[tracker/wip/carlosg/batches-and-resources: 1/5] libtracker-data: Perform TrackerResource element deletion at a lower level
- From: Carlos Garnacho <carlosg src gnome org>
- To: commits-list gnome org
- Cc:
- Subject: [tracker/wip/carlosg/batches-and-resources: 1/5] libtracker-data: Perform TrackerResource element deletion at a lower level
- Date: Fri, 11 Dec 2020 10:53:13 +0000 (UTC)
commit aec3e481d51523548933d4176059c3a3149ce449
Author: Carlos Garnacho <carlosg gnome org>
Date: Sun Dec 6 18:24:56 2020 +0100
libtracker-data: Perform TrackerResource element deletion at a lower level
We currently are using APIs from 2 different levels, the
tracker_sparql_delete_statement function is very high level, and doesn't
get along with get_old_property_values() in the expected formats (most
glaring thing is expressing resources as IDs vs URI strings).
Use the lowlevel API all through, pretty much like
tracker_sparql_delete_statement() does, so resource properties are
properly deleted.
src/libtracker-data/tracker-data-update.c | 46 ++++++++++++++-----------------
1 file changed, 21 insertions(+), 25 deletions(-)
---
diff --git a/src/libtracker-data/tracker-data-update.c b/src/libtracker-data/tracker-data-update.c
index cb2f39eff..d2ebef193 100644
--- a/src/libtracker-data/tracker-data-update.c
+++ b/src/libtracker-data/tracker-data-update.c
@@ -2219,7 +2219,6 @@ tracker_data_delete_all (TrackerData *data,
TrackerProperty *property;
GArray *old_values;
GError *inner_error = NULL;
- guint i;
g_return_if_fail (subject != NULL);
g_return_if_fail (predicate != NULL);
@@ -2238,33 +2237,30 @@ tracker_data_delete_all (TrackerData *data,
ontologies = tracker_data_manager_get_ontologies (data->manager);
property = tracker_ontologies_get_property_by_uri (ontologies,
predicate);
- old_values = get_old_property_values (data, property, &inner_error);
- if (inner_error) {
- g_propagate_error (error, inner_error);
- return;
- }
-
- for (i = 0; i < old_values->len; i++) {
- GValue *value;
- GBytes *bytes;
-
- value = &g_array_index (old_values, GValue, i);
- bytes_from_gvalue (value,
- &bytes,
- data,
- NULL);
- tracker_data_delete_statement (data, graph, subject,
- predicate, bytes,
- &inner_error);
- g_bytes_unref (bytes);
+ if (tracker_property_get_multiple_values (property)) {
+ cache_delete_all_values (data,
+ tracker_property_get_table_name (property),
+ tracker_property_get_name (property),
+ tracker_property_get_fulltext_indexed (property),
+ tracker_property_get_data_type (property) ==
TRACKER_PROPERTY_TYPE_DATETIME);
+ } else {
+ old_values = get_old_property_values (data, property, &inner_error);
+ if (inner_error) {
+ g_propagate_error (error, inner_error);
+ return;
+ }
- if (inner_error)
- break;
+ if (old_values->len > 0) {
+ cache_delete_value (data,
+ tracker_property_get_table_name (property),
+ tracker_property_get_name (property),
+ &g_array_index (old_values, GValue, 0),
+ FALSE,
+ tracker_property_get_fulltext_indexed (property),
+ tracker_property_get_data_type (property) ==
TRACKER_PROPERTY_TYPE_DATETIME);
+ }
}
-
- if (inner_error)
- g_propagate_error (error, inner_error);
}
static gboolean
[
Date Prev][
Date Next] [
Thread Prev][
Thread Next]
[
Thread Index]
[
Date Index]
[
Author Index]