diff options
author | Carlos Garnacho <carlosg@gnome.org> | 2020-05-05 13:03:40 +0200 |
---|---|---|
committer | Carlos Garnacho <carlosg@gnome.org> | 2020-05-05 13:11:53 +0200 |
commit | aa95abbbb691e9a15b90551cd3681ace4d95c93e (patch) | |
tree | 8db04194a1827052f68559c6ed5074339f70cce7 /src | |
parent | 6c2a4476c12a415fb712cd98b7d284c2d1419912 (diff) | |
download | tracker-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.c | 34 |
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); } } |