[gom] gom: Add automatic migration support for flags/enum



commit 4b17d100ec56926dd29c7f35bc79df3794b29c82
Author: Bastien Nocera <hadess hadess net>
Date:   Fri Apr 18 10:32:32 2014 +0200

    gom: Add automatic migration support for flags/enum

 gom/gom-command-builder.c |    6 ++++++
 gom/gom-command.c         |    6 ++++++
 gom/gom-cursor.c          |    6 ++++++
 3 files changed, 18 insertions(+), 0 deletions(-)
---
diff --git a/gom/gom-command-builder.c b/gom/gom-command-builder.c
index 7ad4a82..aea5b76 100644
--- a/gom/gom-command-builder.c
+++ b/gom/gom-command-builder.c
@@ -55,6 +55,8 @@ static GParamSpec *gParamSpecs[LAST_PROP];
 static const char *
 sql_type_for_column (GParamSpec *pspec)
 {
+   GType parent_type;
+
    switch (pspec->value_type) {
    case G_TYPE_INT:
    case G_TYPE_INT64:
@@ -70,6 +72,10 @@ sql_type_for_column (GParamSpec *pspec)
       if (pspec->value_type == G_TYPE_STRV ||
           pspec->value_type == G_TYPE_DATE_TIME)
         return "BLOB";
+      parent_type = g_type_parent(pspec->value_type);
+      if (parent_type == G_TYPE_ENUM ||
+          parent_type == G_TYPE_FLAGS)
+        return "INTEGER";
       if (g_param_spec_get_qdata(pspec, GOM_RESOURCE_FROM_BYTES_FUNC) != NULL)
         return "BLOB";
       return NULL;
diff --git a/gom/gom-command.c b/gom/gom-command.c
index 98d8d16..645776f 100644
--- a/gom/gom-command.c
+++ b/gom/gom-command.c
@@ -80,6 +80,12 @@ gom_command_bind_param (GomCommand   *command,
    case G_TYPE_UINT64:
       sqlite3_bind_int64(priv->stmt, param, g_value_get_uint64(value));
       break;
+   case G_TYPE_ENUM:
+      sqlite3_bind_int(priv->stmt, param, g_value_get_enum(value));
+      break;
+   case G_TYPE_FLAGS:
+      sqlite3_bind_int(priv->stmt, param, g_value_get_flags(value));
+      break;
    case G_TYPE_STRING:
       sqlite3_bind_text(priv->stmt, param,
                         g_value_dup_string(value), -1, g_free);
diff --git a/gom/gom-cursor.c b/gom/gom-cursor.c
index 70564e4..7a9f6d6 100644
--- a/gom/gom-cursor.c
+++ b/gom/gom-cursor.c
@@ -78,6 +78,12 @@ gom_cursor_get_column (GomCursor *cursor,
    case G_TYPE_UINT64:
       g_value_set_uint64(value, sqlite3_column_int64(priv->stmt, column));
       break;
+   case G_TYPE_ENUM:
+      g_value_set_enum(value, sqlite3_column_int(priv->stmt, column));
+      break;
+   case G_TYPE_FLAGS:
+      g_value_set_flags(value, sqlite3_column_int(priv->stmt, column));
+      break;
    default:
       if (G_VALUE_TYPE(value) == G_TYPE_DATE_TIME) {
          GTimeVal tv = { 0 };


[Date Prev][Date Next]   [Thread Prev][Thread Next]   [Thread Index] [Date Index] [Author Index]