[tracker/wip/carlosg/bindings-in-service] libtracker-data: Transfer parameter types correctly to SERVICE patterns



commit aa95abbbb691e9a15b90551cd3681ace4d95c93e
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 | 34 ++++++++++++++++++++++++++----
 1 file 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
@@ -211,6 +211,33 @@ 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,
+                                                  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,
@@ -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);
        }
 }
 


[Date Prev][Date Next]   [Thread Prev][Thread Next]   [Thread Index] [Date Index] [Author Index]