diff options
author | Carlos Garnacho <carlosg@gnome.org> | 2018-10-15 23:04:49 +0200 |
---|---|---|
committer | Carlos Garnacho <carlosg@gnome.org> | 2018-11-13 11:17:31 +0100 |
commit | 9e3b618b8788306e568421a875786c0e714e0705 (patch) | |
tree | aad928a4ca8cd327c66469801096fd38c3b8d3e8 | |
parent | 40054c464174ae3de5d372092d780e3e31460884 (diff) | |
download | tracker-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.c | 43 | ||||
-rw-r--r-- | src/libtracker-data/tracker-db-interface.h | 3 |
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, |