[libgda] GdaTime: improvements
- From: Daniel Espinosa Ortiz <despinosa src gnome org>
- To: commits-list gnome org
- Cc:
- Subject: [libgda] GdaTime: improvements
- Date: Sat, 20 Apr 2019 00:18:21 +0000 (UTC)
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]