[libgda] GdaTime: improvements



commit 1e620963372f8ed303b4e30361bbe1b8a5adab2f
Author: Daniel Espinosa <esodan gmail com>
Date:   Fri Apr 19 18:07:02 2019 -0500

    GdaTime: improvements
    
    Using G_DEFINE_BOXED*, added new gda_time_to_utc()

 libgda/gda-value.c                   | 37 +++++++++++++++++++-----------------
 libgda/gda-value.h                   |  3 ++-
 libgda/sqlite/gda-sqlite-recordset.c |  5 ++---
 tests/gda-test.c                     |  2 +-
 4 files changed, 25 insertions(+), 22 deletions(-)
---
diff --git a/libgda/gda-value.c b/libgda/gda-value.c
index d14b1d486..e8ac994ce 100644
--- a/libgda/gda-value.c
+++ b/libgda/gda-value.c
@@ -1477,23 +1477,6 @@ struct _GdaTime {
        GDateTime *dt;
 };
 
-GType
-gda_time_get_type(void)
-{
-       static GType type = 0;
-
-       if (G_UNLIKELY (type == 0)) {
-               type = g_boxed_type_register_static ("GdaTime",
-                                                    (GBoxedCopyFunc) gda_time_copy,
-                                                    (GBoxedFreeFunc) gda_time_free);
-
-               g_value_register_transform_func (G_TYPE_STRING, type, string_to_time);
-               g_value_register_transform_func (type, G_TYPE_STRING, time_to_string);
-       }
-
-       return type;
-}
-
 /**
  * gda_time_copy:
  *
@@ -1521,6 +1504,15 @@ gda_time_free (GdaTime* boxed)
        g_free (boxed);
 }
 
+static void
+gda_time_register_transform_func (GType typeid)
+{
+  g_value_register_transform_func (G_TYPE_STRING, typeid, string_to_time);
+       g_value_register_transform_func (typeid, G_TYPE_STRING, time_to_string);
+}
+
+G_DEFINE_BOXED_TYPE_WITH_CODE (GdaTime, gda_time, gda_time_copy, gda_time_free,
+                          gda_time_register_transform_func (g_define_type_id))
 /**
  * gda_value_take_time:
  * @value: a #GValue that will store @val.
@@ -1619,6 +1611,17 @@ gda_time_to_string_utc (GdaTime *time)
        g_date_time_unref (ndt);
        return str;
 }
+/**
+ * gda_time_to_utc:
+ * @time: a #GdaTime
+ *
+ * Change time zone to UTC.
+ */
+void
+gda_time_to_utc (GdaTime *time)
+{
+  g_date_time_to_utc (time->dt);
+}
 
 /**
  * gda_time_new_from_values:
diff --git a/libgda/gda-value.h b/libgda/gda-value.h
index 7461c5c86..c139e1403 100644
--- a/libgda/gda-value.h
+++ b/libgda/gda-value.h
@@ -91,7 +91,7 @@ gchar*                            gda_numeric_get_string (const GdaNumeric *nume
 void                              gda_numeric_free (GdaNumeric *numeric);
 
 /**
- * GdaTime: (ref-func gda_time_new) (unref-func gda_time_free) (get-value-func gda_value_get_time) 
(set-value-func gda_value_set_time)
+ * GdaTime:
  *
  * Represents a time information.
  */
@@ -121,6 +121,7 @@ void                              gda_time_set_timezone (GdaTime* time, glong ti
 gboolean                          gda_time_valid (const GdaTime *time);
 void                              gda_time_change_timezone (GdaTime *time, glong ntz);
 void                              gda_time_to_timezone (GdaTime *time, GTimeZone *ntz);
+void                              gda_time_to_utc (GdaTime *time);
 gchar*                            gda_time_to_string (GdaTime *time);
 gchar*                            gda_time_to_string_local (GdaTime *time);
 gchar*                            gda_time_to_string_utc (GdaTime *time);
diff --git a/libgda/sqlite/gda-sqlite-recordset.c b/libgda/sqlite/gda-sqlite-recordset.c
index 20d6359a2..f81dd17a7 100644
--- a/libgda/sqlite/gda-sqlite-recordset.c
+++ b/libgda/sqlite/gda-sqlite-recordset.c
@@ -539,9 +539,8 @@ fetch_next_sqlite_row (GdaSqliteRecordset *model, gboolean do_store, GError **er
                                                gda_row_invalidate_value_e (prow, value, lerror);
                                        }
                                        else {
-                                               if (gda_time_get_timezone (timegda) == GDA_TIMEZONE_INVALID)
-                                                       gda_time_set_timezone (timegda, 0); /* set to GMT */
-                                               gda_value_set_time (value, timegda);
+                                               gda_time_to_utc (timegda);
+                                               g_value_set_boxed (value, timegda);
                                        }
                                        gda_time_free (timegda);
                                }
diff --git a/tests/gda-test.c b/tests/gda-test.c
index eb21a5bec..f34fae5b6 100644
--- a/tests/gda-test.c
+++ b/tests/gda-test.c
@@ -9,7 +9,7 @@ int main() {
   stmt = gda_connection_parse_sql_string (cnc, "CREATE TABLE t1(id INTEGER PRIMARY KEY, name text);", NULL, 
NULL);
   gda_connection_statement_execute_non_select (cnc, stmt, NULL, NULL, NULL);
   g_object_unref (stmt);
-  gda_connection_execute_non_select_command (cnc, "INSERT INTO t1 (name) VALUES ('t01')", error);
+  gda_connection_execute_non_select_command (cnc, "INSERT INTO t1 (name) VALUES ('t01')", &error);
   if (error != NULL) {
     g_message ("Error messages: %s", error->message);
   }


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