[tracker/wip/carlosg/batches-and-resources: 1/5] libtracker-data: Perform TrackerResource element deletion at a lower level




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]