[tracker/wip/carlosg/bindings-in-service] libtracker-data: Transfer parameter types correctly to SERVICE patterns
- From: Carlos Garnacho <carlosg src gnome org>
- To: commits-list gnome org
- Cc:
- Subject: [tracker/wip/carlosg/bindings-in-service] libtracker-data: Transfer parameter types correctly to SERVICE patterns
- Date: Tue, 5 May 2020 11:08:22 +0000 (UTC)
commit d55dd8d9fa93b549adb1be73582a0a6bfa1f8c05
Author: Carlos Garnacho <carlosg gnome org>
Date: Tue May 5 13:03:40 2020 +0200
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.
src/libtracker-data/tracker-vtab-service.c | 31 ++++++++++++++++++++++++++----
1 file changed, 27 insertions(+), 4 deletions(-)
---
diff --git a/src/libtracker-data/tracker-vtab-service.c b/src/libtracker-data/tracker-vtab-service.c
index caa6197c5..db1bbd336 100644
--- a/src/libtracker-data/tracker-vtab-service.c
+++ b/src/libtracker-data/tracker-vtab-service.c
@@ -211,6 +211,30 @@ service_close (sqlite3_vtab_cursor *vtab_cursor)
return SQLITE_OK;
}
+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,
+ sqlite3_value_int64 (value));
+ break;
+ case SQLITE_FLOAT:
+ tracker_sparql_statement_bind_double (statement,
+ sqlite3_value_double (value));
+ break;
+ case SQLITE_TEXT:
+ case SQLITE_BLOB:
+ tracker_sparql_statement_bind_string (statement,
+ sqlite3_value_text (value));
+ case SQLITE_NULL:
+ default:
+ break;
+ }
+}
+
static void
apply_statement_parameters (TrackerSparqlStatement *statement,
GHashTable *names,
@@ -230,10 +254,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_string (name),
+ value);
}
}
[
Date Prev][
Date Next] [
Thread Prev][
Thread Next]
[
Thread Index]
[
Date Index]
[
Author Index]