diff options
author | Sam Thursfield <sam@afuera.me.uk> | 2019-12-08 12:42:51 +0000 |
---|---|---|
committer | Sam Thursfield <sam@afuera.me.uk> | 2019-12-08 12:42:51 +0000 |
commit | 76a5035322a4a3f0702e3f440d21dc9666f5068b (patch) | |
tree | 1858b26382d33e80b321dd41ae1b67e0768ea9f3 | |
parent | 04d715e82c03cb92c9f96f5c5c2cc6be7b8fe804 (diff) | |
parent | 574e546be4da1088eb0b1cf5a21113dd0b340609 (diff) | |
download | tracker-76a5035322a4a3f0702e3f440d21dc9666f5068b.tar.gz |
Merge branch 'wip/carlosg/fts-delete' into 'master'
libtracker-data: Perform FTS deletes in a single query
See merge request GNOME/tracker!159
-rw-r--r-- | src/libtracker-data/tracker-data-update.c | 24 | ||||
-rw-r--r-- | src/libtracker-data/tracker-db-interface-sqlite.c | 10 | ||||
-rw-r--r-- | src/libtracker-data/tracker-db-interface-sqlite.h | 7 |
3 files changed, 26 insertions, 15 deletions
diff --git a/src/libtracker-data/tracker-data-update.c b/src/libtracker-data/tracker-data-update.c index 65e9d8306..322d6c74a 100644 --- a/src/libtracker-data/tracker-data-update.c +++ b/src/libtracker-data/tracker-data-update.c @@ -1397,6 +1397,7 @@ get_old_property_values (TrackerData *data, TrackerOntologies *ontologies; guint i, n_props; TrackerProperty **properties, *prop; + GPtrArray *fts_props, *fts_text; /* first fulltext indexed property to be modified * retrieve values of all fulltext indexed properties @@ -1404,6 +1405,9 @@ get_old_property_values (TrackerData *data, ontologies = tracker_data_manager_get_ontologies (data->manager); properties = tracker_ontologies_get_properties (ontologies, &n_props); + fts_props = g_ptr_array_new (); + fts_text = g_ptr_array_new_with_free_func (g_free); + for (i = 0; i < n_props; i++) { prop = properties[i]; @@ -1425,15 +1429,23 @@ get_old_property_values (TrackerData *data, g_string_append (str, g_value_get_string (value)); } - tracker_db_interface_sqlite_fts_delete_text (iface, - database, - data->resource_buffer->id, - property_name, - str->str); - g_string_free (str, TRUE); + g_ptr_array_add (fts_props, (gpointer) property_name); + g_ptr_array_add (fts_text, g_string_free (str, FALSE)); } } + g_ptr_array_add (fts_props, NULL); + g_ptr_array_add (fts_text, NULL); + + tracker_db_interface_sqlite_fts_delete_text (iface, + database, + data->resource_buffer->id, + (const gchar **) fts_props->pdata, + (const gchar **) fts_text->pdata); + + g_ptr_array_unref (fts_props); + g_ptr_array_unref (fts_text); + data->update_buffer.fts_ever_updated = TRUE; old_values = g_hash_table_lookup (data->resource_buffer->predicates, property); diff --git a/src/libtracker-data/tracker-db-interface-sqlite.c b/src/libtracker-data/tracker-db-interface-sqlite.c index 9bbb7b64f..92e72c7a8 100644 --- a/src/libtracker-data/tracker-db-interface-sqlite.c +++ b/src/libtracker-data/tracker-db-interface-sqlite.c @@ -2239,13 +2239,13 @@ gboolean tracker_db_interface_sqlite_fts_delete_text (TrackerDBInterface *db_interface, const gchar *database, int rowid, - const gchar *property, - const gchar *old_text) + const gchar **properties, + const gchar **old_text) { TrackerDBStatement *stmt; GError *error = NULL; - const gchar *properties[] = { property, NULL }; gchar *query; + gint i; query = tracker_db_interface_sqlite_fts_create_query (db_interface, database, @@ -2264,7 +2264,9 @@ tracker_db_interface_sqlite_fts_delete_text (TrackerDBInterface *db_interface, } tracker_db_statement_bind_int (stmt, 0, rowid); - tracker_db_statement_bind_text (stmt, 1, old_text); + for (i = 0; old_text[i] != NULL; i++) + tracker_db_statement_bind_text (stmt, i + 1, old_text[i]); + tracker_db_statement_execute (stmt, &error); g_object_unref (stmt); diff --git a/src/libtracker-data/tracker-db-interface-sqlite.h b/src/libtracker-data/tracker-db-interface-sqlite.h index 81127539a..f8dc3c07b 100644 --- a/src/libtracker-data/tracker-db-interface-sqlite.h +++ b/src/libtracker-data/tracker-db-interface-sqlite.h @@ -79,14 +79,11 @@ gboolean tracker_db_interface_sqlite_fts_update_text (TrackerD gboolean tracker_db_interface_sqlite_fts_delete_text (TrackerDBInterface *interface, const gchar *database, int rowid, - const gchar *property, - const gchar *old_text); + const gchar **properties, + const gchar **old_text); gboolean tracker_db_interface_sqlite_fts_delete_id (TrackerDBInterface *interface, const gchar *database, int rowid); -void tracker_db_interface_sqlite_fts_update_commit (TrackerDBInterface *interface); -void tracker_db_interface_sqlite_fts_update_rollback (TrackerDBInterface *interface); - void tracker_db_interface_sqlite_fts_rebuild_tokens (TrackerDBInterface *interface, const gchar *database); |