diff options
author | Sam Thursfield <sam@afuera.me.uk> | 2021-05-26 09:15:56 +0000 |
---|---|---|
committer | Sam Thursfield <sam@afuera.me.uk> | 2021-05-26 09:15:56 +0000 |
commit | 7b87224b5180e9a5b4dcbd5cc9c858f36c1c3519 (patch) | |
tree | 7c6fe45ac9336991703f8fb884944749c5fea3ff | |
parent | 6045f4621efa487b62a0c40ffa733fc5982c46bf (diff) | |
parent | 8e6ca66b069a94542cb6f20b226173136cbad17f (diff) | |
download | tracker-7b87224b5180e9a5b4dcbd5cc9c858f36c1c3519.tar.gz |
Merge branch 'wip/carlosg/forgotten-single-valued-properties' into 'master'
libtracker-data: Mark specific properties as being deleted
Closes #308
See merge request GNOME/tracker!432
-rw-r--r-- | src/libtracker-data/tracker-data-update.c | 20 | ||||
-rw-r--r-- | src/libtracker-data/tracker-db-interface-sqlite.c | 57 | ||||
-rw-r--r-- | src/libtracker-data/tracker-db-interface-sqlite.h | 3 |
3 files changed, 11 insertions, 69 deletions
diff --git a/src/libtracker-data/tracker-data-update.c b/src/libtracker-data/tracker-data-update.c index f5c2083f4..bb7373808 100644 --- a/src/libtracker-data/tracker-data-update.c +++ b/src/libtracker-data/tracker-data-update.c @@ -87,12 +87,12 @@ struct _TrackerDataUpdateBufferProperty { const gchar *name; GValue value; guint delete_all_values : 1; + guint delete_value : 1; }; struct _TrackerDataUpdateBufferTable { gboolean insert; gboolean delete_row; - gboolean delete_value; gboolean multiple_values; TrackerClass *class; /* TrackerDataUpdateBufferProperty */ @@ -641,7 +641,6 @@ cache_delete_all_values (TrackerData *data, property.delete_all_values = TRUE; table = cache_ensure_table (data, table_name, TRUE); - table->delete_value = TRUE; g_array_append_val (table->properties, property); } @@ -656,12 +655,12 @@ cache_delete_value (TrackerData *data, TrackerDataUpdateBufferProperty property = { 0 }; property.name = field_name; + property.delete_value = TRUE; g_value_init (&property.value, G_VALUE_TYPE (value)); g_value_copy (value, &property.value); table = cache_ensure_table (data, table_name, multiple_values); - table->delete_value = TRUE; g_array_append_val (table->properties, property); } @@ -833,12 +832,12 @@ tracker_data_resource_buffer_flush (TrackerData *data, for (i = 0; i < table->properties->len; i++) { property = &g_array_index (table->properties, TrackerDataUpdateBufferProperty, i); - if (table->delete_value && property->delete_all_values) { + if (property->delete_all_values) { stmt = tracker_db_interface_create_vstatement (iface, TRACKER_DB_STATEMENT_CACHE_TYPE_UPDATE, &actual_error, "DELETE FROM \"%s\".\"%s\" WHERE ID = ?", database, table_name); - } else if (table->delete_value) { + } else if (property->delete_value) { /* delete rows for multiple value properties */ stmt = tracker_db_interface_create_vstatement (iface, TRACKER_DB_STATEMENT_CACHE_TYPE_UPDATE, &actual_error, "DELETE FROM \"%s\".\"%s\" WHERE ID = ? AND \"%s\" = ?", @@ -969,7 +968,7 @@ tracker_data_resource_buffer_flush (TrackerData *data, for (i = 0; i < table->properties->len; i++) { property = &g_array_index (table->properties, TrackerDataUpdateBufferProperty, i); - if (table->delete_value) { + if (property->delete_value) { /* just set value to NULL for single value properties */ tracker_db_statement_bind_null (stmt, param++); } else { @@ -1648,7 +1647,6 @@ get_old_property_values (TrackerData *data, old_values = get_property_values (data, property, error); } - data->resource_buffer->fts_updated = TRUE; } else { old_values = get_property_values (data, property, error); } @@ -1902,6 +1900,9 @@ cache_insert_metadata_decomposed (TrackerData *data, super_properties = tracker_property_get_super_properties (property); multiple_values = tracker_property_get_multiple_values (property); + data->resource_buffer->fts_updated |= + tracker_property_get_fulltext_indexed (property); + while (*super_properties) { gboolean super_is_multi; GArray *super_old_values; @@ -1913,6 +1914,9 @@ cache_insert_metadata_decomposed (TrackerData *data, return FALSE; } + data->resource_buffer->fts_updated |= + tracker_property_get_fulltext_indexed (*super_properties); + if (super_is_multi || super_old_values->len == 0) { change |= cache_insert_metadata_decomposed (data, *super_properties, object, &new_error); @@ -2090,8 +2094,6 @@ cache_delete_resource_type_full (TrackerData *data, if (!single_type) { if (strcmp (tracker_class_get_uri (class), TRACKER_PREFIX_RDFS "Resource") == 0 && g_hash_table_size (data->resource_buffer->tables) == 0) { - tracker_db_interface_sqlite_fts_delete_id (iface, database, data->resource_buffer->id); - data->resource_buffer->fts_updated = TRUE; /* skip subclass query when deleting whole resource to improve performance */ diff --git a/src/libtracker-data/tracker-db-interface-sqlite.c b/src/libtracker-data/tracker-db-interface-sqlite.c index fabb1d4aa..c6a50add3 100644 --- a/src/libtracker-data/tracker-db-interface-sqlite.c +++ b/src/libtracker-data/tracker-db-interface-sqlite.c @@ -2361,25 +2361,6 @@ tracker_db_interface_sqlite_fts_create_query (TrackerDBInterface *db_interface, return g_string_free (insert_str, FALSE); } -static gchar * -tracker_db_interface_sqlite_fts_create_delete_all_query (TrackerDBInterface *db_interface, - const gchar *database) -{ - GString *insert_str; - - insert_str = g_string_new (NULL); - g_string_append_printf (insert_str, - "INSERT INTO \"%s\".fts5 (fts5, rowid %s) " - "SELECT 'delete', rowid %s FROM \"%s\".fts_view " - "WHERE rowid = ? AND COALESCE(NULL %s) IS NOT NULL", - database, - db_interface->fts_properties, - db_interface->fts_properties, - database, - db_interface->fts_properties); - return g_string_free (insert_str, FALSE); -} - gboolean tracker_db_interface_sqlite_fts_update_text (TrackerDBInterface *db_interface, const gchar *database, @@ -2479,44 +2460,6 @@ tracker_db_interface_sqlite_fts_delete_text (TrackerDBInterface *db_interface, } gboolean -tracker_db_interface_sqlite_fts_delete_id (TrackerDBInterface *db_interface, - const gchar *database, - int id) -{ - TrackerDBStatement *stmt; - GError *error = NULL; - gchar *query; - - query = tracker_db_interface_sqlite_fts_create_delete_all_query (db_interface, database); - stmt = tracker_db_interface_create_statement (db_interface, - TRACKER_DB_STATEMENT_CACHE_TYPE_UPDATE, - &error, - query); - g_free (query); - - if (!stmt || error) { - if (error) { - g_warning ("Could not create FTS delete statement: %s", - error->message); - g_error_free (error); - } - return FALSE; - } - - tracker_db_statement_bind_int (stmt, 0, id); - tracker_db_statement_execute (stmt, &error); - g_object_unref (stmt); - - if (error) { - g_warning ("Could not delete FTS content: %s", error->message); - g_error_free (error); - return FALSE; - } - - return TRUE; -} - -gboolean tracker_db_interface_sqlite_fts_rebuild_tokens (TrackerDBInterface *interface, const gchar *database, GError **error) diff --git a/src/libtracker-data/tracker-db-interface-sqlite.h b/src/libtracker-data/tracker-db-interface-sqlite.h index 1499a3aca..6659fcd10 100644 --- a/src/libtracker-data/tracker-db-interface-sqlite.h +++ b/src/libtracker-data/tracker-db-interface-sqlite.h @@ -82,9 +82,6 @@ gboolean tracker_db_interface_sqlite_fts_delete_text (TrackerD int rowid, const gchar **properties, const gchar **old_text); -gboolean tracker_db_interface_sqlite_fts_delete_id (TrackerDBInterface *interface, - const gchar *database, - int rowid); gboolean tracker_db_interface_sqlite_fts_rebuild_tokens (TrackerDBInterface *interface, const gchar *database, GError **error); |