diff options
-rw-r--r-- | src/libtracker-data/tracker-sparql.c | 14 |
1 files changed, 12 insertions, 2 deletions
diff --git a/src/libtracker-data/tracker-sparql.c b/src/libtracker-data/tracker-sparql.c index 2ff43d045..cf023cbb8 100644 --- a/src/libtracker-data/tracker-sparql.c +++ b/src/libtracker-data/tracker-sparql.c @@ -21,6 +21,8 @@ #include "config.h" #include <glib-object.h> +#include <math.h> + #include "tracker-data-query.h" #include "tracker-string-builder.h" #include "tracker-sparql.h" @@ -9384,14 +9386,22 @@ prepare_query (TrackerSparql *sparql, tracker_db_statement_bind_int (stmt, i, (int) datetime); } else if (prop_type == TRACKER_PROPERTY_TYPE_DATETIME) { gdouble datetime; + gint offset = 0; - datetime = tracker_string_to_date (binding->literal, NULL, error); + datetime = tracker_string_to_date (binding->literal, offset, error); if (datetime < 0) { g_object_unref (stmt); return NULL; } - tracker_db_statement_bind_double (stmt, i, datetime); + /* If we have anything that prevents a unix timestamp to be + * lossless, we use the ISO8601 string. + */ + if (offset != 0 || floor (datetime) != datetime) { + tracker_db_statement_bind_text (stmt, i, binding->literal); + } else { + tracker_db_statement_bind_int (stmt, i, 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 && |