summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorSam Thursfield <sam@afuera.me.uk>2021-05-26 09:15:56 +0000
committerSam Thursfield <sam@afuera.me.uk>2021-05-26 09:15:56 +0000
commit7b87224b5180e9a5b4dcbd5cc9c858f36c1c3519 (patch)
tree7c6fe45ac9336991703f8fb884944749c5fea3ff
parent6045f4621efa487b62a0c40ffa733fc5982c46bf (diff)
parent8e6ca66b069a94542cb6f20b226173136cbad17f (diff)
downloadtracker-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.c20
-rw-r--r--src/libtracker-data/tracker-db-interface-sqlite.c57
-rw-r--r--src/libtracker-data/tracker-db-interface-sqlite.h3
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);