summaryrefslogtreecommitdiff
path: root/src
diff options
context:
space:
mode:
authorCarlos Garnacho <carlosg@gnome.org>2020-05-05 13:03:40 +0200
committerCarlos Garnacho <carlosg@gnome.org>2020-05-05 13:11:53 +0200
commitaa95abbbb691e9a15b90551cd3681ace4d95c93e (patch)
tree8db04194a1827052f68559c6ed5074339f70cce7 /src
parent6c2a4476c12a415fb712cd98b7d284c2d1419912 (diff)
downloadtracker-aa95abbbb691e9a15b90551cd3681ace4d95c93e.tar.gz
libtracker-data: Transfer parameter types correctly to SERVICE patterns
It's better not to rely on internal casts to/from strings working (may be troublesome with e.g. rounding with certain doubles). Transfer the types obtained to the internal statement, so those reach the external service.
Diffstat (limited to 'src')
-rw-r--r--src/libtracker-data/tracker-vtab-service.c34
1 files changed, 30 insertions, 4 deletions
diff --git a/src/libtracker-data/tracker-vtab-service.c b/src/libtracker-data/tracker-vtab-service.c
index caa6197c5..6fa6be253 100644
--- a/src/libtracker-data/tracker-vtab-service.c
+++ b/src/libtracker-data/tracker-vtab-service.c
@@ -212,6 +212,33 @@ service_close (sqlite3_vtab_cursor *vtab_cursor)
}
static void
+apply_to_statement (TrackerSparqlStatement *statement,
+ const gchar *name,
+ sqlite3_value *value)
+{
+ switch (sqlite3_value_type (value)) {
+ case SQLITE_INTEGER:
+ tracker_sparql_statement_bind_int (statement,
+ name,
+ sqlite3_value_int64 (value));
+ break;
+ case SQLITE_FLOAT:
+ tracker_sparql_statement_bind_double (statement,
+ name,
+ sqlite3_value_double (value));
+ break;
+ case SQLITE_TEXT:
+ case SQLITE_BLOB:
+ tracker_sparql_statement_bind_string (statement,
+ name,
+ sqlite3_value_text (value));
+ case SQLITE_NULL:
+ default:
+ break;
+ }
+}
+
+static void
apply_statement_parameters (TrackerSparqlStatement *statement,
GHashTable *names,
GHashTable *values)
@@ -230,10 +257,9 @@ apply_statement_parameters (TrackerSparqlStatement *statement,
if (!value)
continue;
- /* FIXME: Handle other types better */
- tracker_sparql_statement_bind_string (statement,
- sqlite3_value_text (name),
- sqlite3_value_text (value));
+ apply_to_statement (statement,
+ sqlite3_value_text (name),
+ value);
}
}