summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorCarlos Garnacho <carlosg@gnome.org>2021-04-07 12:38:00 +0200
committerCarlos Garnacho <carlosg@gnome.org>2021-04-07 23:28:04 +0200
commit57386f7e5a722a4b24ec503cb4cf1da57b44588c (patch)
tree45f1d20fae903f32123c83f22872bd89d8b57100
parent006d1004cbbca87a623f42546334938a99205d38 (diff)
downloadtracker-57386f7e5a722a4b24ec503cb4cf1da57b44588c.tar.gz
libtracker-data: Use GDateTime parsing for xsd:date[Time] literals
Use the new GDateTime helpers to parse xsd:date and xsd:dateTime from SPARQL. Fixes: https://gitlab.gnome.org/GNOME/tracker/-/issues/292
-rw-r--r--src/libtracker-data/tracker-sparql.c21
1 files changed, 13 insertions, 8 deletions
diff --git a/src/libtracker-data/tracker-sparql.c b/src/libtracker-data/tracker-sparql.c
index fd9ca99dc..5314cbae7 100644
--- a/src/libtracker-data/tracker-sparql.c
+++ b/src/libtracker-data/tracker-sparql.c
@@ -9542,10 +9542,10 @@ prepare_query (TrackerSparql *sparql,
} else if (prop_type == TRACKER_PROPERTY_TYPE_DATE) {
GError *inner_error = NULL;
gchar *full_str;
- gdouble datetime;
+ GDateTime *datetime;
full_str = g_strdup_printf ("%sT00:00:00Z", binding->literal);
- datetime = tracker_string_to_date (full_str, NULL, &inner_error);
+ datetime = tracker_date_new_from_iso8601 (full_str, &inner_error);
g_free (full_str);
if (inner_error) {
@@ -9554,13 +9554,14 @@ prepare_query (TrackerSparql *sparql,
return NULL;
}
- tracker_db_statement_bind_int (stmt, i, (int) datetime);
+ tracker_db_statement_bind_int (stmt, i,
+ g_date_time_to_unix (datetime));
+ g_date_time_unref (datetime);
} else if (prop_type == TRACKER_PROPERTY_TYPE_DATETIME) {
GError *inner_error = NULL;
- gdouble datetime;
- gint offset = 0;
+ GDateTime *datetime;
- datetime = tracker_string_to_date (binding->literal, &offset, &inner_error);
+ datetime = tracker_date_new_from_iso8601 (binding->literal, &inner_error);
if (inner_error) {
g_propagate_error (error, inner_error);
g_object_unref (stmt);
@@ -9570,11 +9571,15 @@ prepare_query (TrackerSparql *sparql,
/* If we have anything that prevents a unix timestamp to be
* lossless, we use the ISO8601 string.
*/
- if (offset != 0 || floor (datetime) != datetime) {
+ if (g_date_time_get_utc_offset (datetime) != 0 ||
+ g_date_time_get_microsecond (datetime) != 0) {
tracker_db_statement_bind_text (stmt, i, binding->literal);
} else {
- tracker_db_statement_bind_int (stmt, i, datetime);
+ tracker_db_statement_bind_int (stmt, i,
+ g_date_time_to_unix (datetime));
}
+
+ g_date_time_unref (datetime);
} else if (prop_type == TRACKER_PROPERTY_TYPE_INTEGER) {
tracker_db_statement_bind_int (stmt, i, atoi (binding->literal));
} else if (prop_type == TRACKER_PROPERTY_TYPE_LANGSTRING &&