diff options
author | Carlos Garnacho <carlosg@gnome.org> | 2022-01-30 11:34:00 +0100 |
---|---|---|
committer | Carlos Garnacho <carlosg@gnome.org> | 2022-02-04 19:22:01 +0100 |
commit | a760bd1b32b3327cbc3ad60e509290c7034a0edc (patch) | |
tree | 45434a3c32eea720bd3d8c5c4ef0d1a216495fae | |
parent | 15534e0d1e32cbbf981f317bc25db7fd5891971f (diff) | |
download | tracker-a760bd1b32b3327cbc3ad60e509290c7034a0edc.tar.gz |
libtracker-data: Add n_columns argument to cursors
We will want to add additional columns, that are not visible on the
outside. At the moment this field is unused.
-rw-r--r-- | src/libtracker-data/tracker-db-interface-sqlite.c | 31 |
1 files changed, 27 insertions, 4 deletions
diff --git a/src/libtracker-data/tracker-db-interface-sqlite.c b/src/libtracker-data/tracker-db-interface-sqlite.c index a0944e9bd..499d5c96d 100644 --- a/src/libtracker-data/tracker-db-interface-sqlite.c +++ b/src/libtracker-data/tracker-db-interface-sqlite.c @@ -115,6 +115,7 @@ struct TrackerDBCursor { sqlite3_stmt *stmt; TrackerDBStatement *ref_stmt; gboolean finished; + guint n_columns; TrackerPropertyType *types; guint n_types; }; @@ -142,6 +143,7 @@ static TrackerDBStatement *tracker_db_statement_sqlite_new (TrackerDBIn sqlite3_stmt *sqlite_stmt); static void tracker_db_statement_sqlite_reset (TrackerDBStatement *stmt); static TrackerDBCursor *tracker_db_cursor_sqlite_new (TrackerDBStatement *ref_stmt, + guint n_columns, TrackerPropertyType *types, guint n_types); static gboolean tracker_db_cursor_get_boolean (TrackerSparqlCursor *cursor, @@ -3220,6 +3222,7 @@ tracker_db_cursor_class_init (TrackerDBCursorClass *class) static TrackerDBCursor * tracker_db_cursor_sqlite_new (TrackerDBStatement *ref_stmt, + guint n_columns, TrackerPropertyType *types, guint n_types) { @@ -3248,6 +3251,7 @@ tracker_db_cursor_sqlite_new (TrackerDBStatement *ref_stmt, cursor = g_object_new (TRACKER_TYPE_DB_CURSOR, NULL); cursor->finished = FALSE; + cursor->n_columns = n_columns; cursor->stmt = ref_stmt->stmt; cursor->ref_stmt = tracker_db_statement_sqlite_grab (ref_stmt); @@ -3475,7 +3479,14 @@ db_cursor_iter_next (TrackerDBCursor *cursor, guint tracker_db_cursor_get_n_columns (TrackerDBCursor *cursor) { - return sqlite3_column_count (cursor->stmt); + guint n_columns; + + if (cursor->n_columns == 0) + n_columns = sqlite3_column_count (cursor->stmt); + else + n_columns = cursor->n_columns; + + return n_columns; } void @@ -3516,6 +3527,9 @@ tracker_db_cursor_get_int (TrackerDBCursor *cursor, TrackerDBInterface *iface; gint64 result; + if (cursor->n_columns > 0 && column >= cursor->n_columns) + return 0; + iface = cursor->ref_stmt->db_interface; tracker_db_interface_lock (iface); @@ -3534,6 +3548,9 @@ tracker_db_cursor_get_double (TrackerDBCursor *cursor, TrackerDBInterface *iface; gdouble result; + if (cursor->n_columns > 0 && column >= cursor->n_columns) + return 0; + iface = cursor->ref_stmt->db_interface; tracker_db_interface_lock (iface); @@ -3559,7 +3576,7 @@ tracker_db_cursor_get_value_type (TrackerDBCursor *cursor, { TrackerDBInterface *iface; gint column_type; - guint n_columns = sqlite3_column_count (cursor->stmt); + guint n_columns = tracker_db_cursor_get_n_columns (cursor); g_return_val_if_fail (column < n_columns, TRACKER_SPARQL_VALUE_TYPE_UNBOUND); @@ -3612,6 +3629,9 @@ tracker_db_cursor_get_variable_name (TrackerDBCursor *cursor, TrackerDBInterface *iface; const gchar *result; + if (cursor->n_columns > 0 && column >= cursor->n_columns) + return NULL; + iface = cursor->ref_stmt->db_interface; tracker_db_interface_lock (iface); @@ -3636,6 +3656,9 @@ tracker_db_cursor_get_string (TrackerDBCursor *cursor, TrackerDBInterface *iface; const gchar *result; + if (cursor->n_columns > 0 && column >= cursor->n_columns) + return NULL; + iface = cursor->ref_stmt->db_interface; tracker_db_interface_lock (iface); @@ -3672,7 +3695,7 @@ tracker_db_statement_start_cursor (TrackerDBStatement *stmt, g_return_val_if_fail (TRACKER_IS_DB_STATEMENT (stmt), NULL); g_return_val_if_fail (!stmt->stmt_is_used, NULL); - return tracker_db_cursor_sqlite_new (stmt, NULL, 0); + return tracker_db_cursor_sqlite_new (stmt, 0, NULL, 0); } TrackerDBCursor * @@ -3684,7 +3707,7 @@ tracker_db_statement_start_sparql_cursor (TrackerDBStatement *stmt, g_return_val_if_fail (TRACKER_IS_DB_STATEMENT (stmt), NULL); g_return_val_if_fail (!stmt->stmt_is_used, NULL); - return tracker_db_cursor_sqlite_new (stmt, types, n_types); + return tracker_db_cursor_sqlite_new (stmt, 0, types, n_types); } static void |