summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorSam Thursfield <sam@afuera.me.uk>2019-12-08 12:42:51 +0000
committerSam Thursfield <sam@afuera.me.uk>2019-12-08 12:42:51 +0000
commit76a5035322a4a3f0702e3f440d21dc9666f5068b (patch)
tree1858b26382d33e80b321dd41ae1b67e0768ea9f3
parent04d715e82c03cb92c9f96f5c5c2cc6be7b8fe804 (diff)
parent574e546be4da1088eb0b1cf5a21113dd0b340609 (diff)
downloadtracker-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.c24
-rw-r--r--src/libtracker-data/tracker-db-interface-sqlite.c10
-rw-r--r--src/libtracker-data/tracker-db-interface-sqlite.h7
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);