summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorCarlos Garnacho <carlosg@gnome.org>2018-10-15 23:04:49 +0200
committerCarlos Garnacho <carlosg@gnome.org>2018-11-13 11:17:31 +0100
commit9e3b618b8788306e568421a875786c0e714e0705 (patch)
treeaad928a4ca8cd327c66469801096fd38c3b8d3e8
parent40054c464174ae3de5d372092d780e3e31460884 (diff)
downloadtracker-9e3b618b8788306e568421a875786c0e714e0705.tar.gz
libtracker-data: Add tracker_db_interface_bind_value
This function takes a generic GValue, and uses the right sqlite3_bind* function underneath, or transforms to a string.
-rw-r--r--src/libtracker-data/tracker-db-interface-sqlite.c43
-rw-r--r--src/libtracker-data/tracker-db-interface.h3
2 files changed, 46 insertions, 0 deletions
diff --git a/src/libtracker-data/tracker-db-interface-sqlite.c b/src/libtracker-data/tracker-db-interface-sqlite.c
index a8878992a..d0e8f7adf 100644
--- a/src/libtracker-data/tracker-db-interface-sqlite.c
+++ b/src/libtracker-data/tracker-db-interface-sqlite.c
@@ -2721,6 +2721,49 @@ tracker_db_statement_bind_text (TrackerDBStatement *stmt,
}
void
+tracker_db_statement_bind_value (TrackerDBStatement *stmt,
+ int index,
+ const GValue *value)
+{
+ GType type;
+
+ g_return_if_fail (TRACKER_IS_DB_STATEMENT (stmt));
+
+ g_assert (!stmt->stmt_is_used);
+
+ tracker_db_interface_lock (stmt->db_interface);
+
+ type = G_VALUE_TYPE (value);
+
+ if (type == G_TYPE_INT) {
+ sqlite3_bind_int64 (stmt->stmt, index + 1, g_value_get_int (value));
+ } else if (type == G_TYPE_INT64) {
+ sqlite3_bind_int64 (stmt->stmt, index + 1, g_value_get_int64 (value));
+ } else if (type == G_TYPE_DOUBLE) {
+ sqlite3_bind_double (stmt->stmt, index + 1, g_value_get_double (value));
+ } else if (type == G_TYPE_FLOAT) {
+ sqlite3_bind_double (stmt->stmt, index + 1, g_value_get_float (value));
+ } else if (type == G_TYPE_STRING) {
+ sqlite3_bind_text (stmt->stmt, index + 1,
+ g_value_get_string (value), -1, SQLITE_TRANSIENT);
+ } else {
+ GValue dest = G_VALUE_INIT;
+
+ g_value_init (&dest, G_TYPE_STRING);
+
+ if (g_value_transform (value, &dest)) {
+ sqlite3_bind_text (stmt->stmt, index + 1,
+ g_value_get_string (&dest), -1, SQLITE_TRANSIENT);
+ g_value_unset (&dest);
+ } else {
+ g_assert_not_reached ();
+ }
+ }
+
+ tracker_db_interface_unlock (stmt->db_interface);
+}
+
+void
tracker_db_cursor_rewind (TrackerDBCursor *cursor)
{
TrackerDBInterface *iface;
diff --git a/src/libtracker-data/tracker-db-interface.h b/src/libtracker-data/tracker-db-interface.h
index 09e78b52e..287738afb 100644
--- a/src/libtracker-data/tracker-db-interface.h
+++ b/src/libtracker-data/tracker-db-interface.h
@@ -128,6 +128,9 @@ void tracker_db_statement_bind_null (TrackerDBS
void tracker_db_statement_bind_text (TrackerDBStatement *stmt,
int index,
const gchar *value);
+void tracker_db_statement_bind_value (TrackerDBStatement *stmt,
+ int index,
+ const GValue *value);
void tracker_db_statement_execute (TrackerDBStatement *stmt,
GError **error);
TrackerDBCursor * tracker_db_statement_start_cursor (TrackerDBStatement *stmt,