[tracker] libtracker-data: Factor out function get_old_property_values



commit 0adc4cf8489cbd2a795ae026ecbd5903de146a00
Author: Jürg Billeter <j bitron ch>
Date:   Mon Oct 26 16:11:05 2009 +0100

    libtracker-data: Factor out function get_old_property_values

 src/libtracker-data/tracker-data-update.c |   85 ++++++++++++++++++-----------
 1 files changed, 52 insertions(+), 33 deletions(-)
---
diff --git a/src/libtracker-data/tracker-data-update.c b/src/libtracker-data/tracker-data-update.c
index b321a1e..9531b91 100644
--- a/src/libtracker-data/tracker-data-update.c
+++ b/src/libtracker-data/tracker-data-update.c
@@ -696,39 +696,14 @@ get_property_values (TrackerProperty *property)
 	return old_values;
 }
 
-static void
-cache_set_metadata_decomposed (TrackerProperty	*property,
-			       const gchar	*value,
-			       GError          **error)
+static GValueArray *
+get_old_property_values (TrackerProperty  *property,
+                         GError          **error)
 {
-	guint32		    object_id;
-	gboolean            multiple_values, fts;
-	gchar              *table_name;
-	const gchar        *field_name;
-	TrackerProperty   **properties, **super_properties, **prop;
-	GValue gvalue = { 0 };
+	gboolean            fts;
+	TrackerProperty   **properties, **prop;
 	GValueArray        *old_values;
 
-	/* also insert super property values */
-	super_properties = tracker_property_get_super_properties (property);
-	while (*super_properties) {
-		cache_set_metadata_decomposed (*super_properties, value, error);
-		if (*error) {
-			return;
-		}
-		super_properties++;
-	}
-
-	multiple_values = tracker_property_get_multiple_values (property);
-	if (multiple_values) {
-		table_name = g_strdup_printf ("%s_%s",
-			tracker_class_get_name (tracker_property_get_domain (property)),
-			tracker_property_get_name (property));
-	} else {
-		table_name = g_strdup (tracker_class_get_name (tracker_property_get_domain (property)));
-	}
-	field_name = tracker_property_get_name (property);
-
 	fts = tracker_property_get_fulltext_indexed (property);
 
 	/* read existing property values */
@@ -739,9 +714,8 @@ cache_set_metadata_decomposed (TrackerProperty	*property,
 				     "Subject `%s' is not in domain `%s' of property `%s'",
 				     resource_buffer->subject,
 				     tracker_class_get_name (tracker_property_get_domain (property)),
-				     field_name);
-			g_free (table_name);
-			return;
+				     tracker_property_get_name (property));
+			return NULL;
 		}
 
 		if (fts && !resource_buffer->fts_updated && !resource_buffer->create) {
@@ -779,6 +753,51 @@ cache_set_metadata_decomposed (TrackerProperty	*property,
 		}
 	}
 
+	return old_values;
+}
+
+static void
+cache_set_metadata_decomposed (TrackerProperty	*property,
+			       const gchar	*value,
+			       GError          **error)
+{
+	guint32		    object_id;
+	gboolean            multiple_values, fts;
+	gchar              *table_name;
+	const gchar        *field_name;
+	TrackerProperty   **super_properties;
+	GValue gvalue = { 0 };
+	GValueArray        *old_values;
+
+	/* also insert super property values */
+	super_properties = tracker_property_get_super_properties (property);
+	while (*super_properties) {
+		cache_set_metadata_decomposed (*super_properties, value, error);
+		if (*error) {
+			return;
+		}
+		super_properties++;
+	}
+
+	multiple_values = tracker_property_get_multiple_values (property);
+	if (multiple_values) {
+		table_name = g_strdup_printf ("%s_%s",
+			tracker_class_get_name (tracker_property_get_domain (property)),
+			tracker_property_get_name (property));
+	} else {
+		table_name = g_strdup (tracker_class_get_name (tracker_property_get_domain (property)));
+	}
+	field_name = tracker_property_get_name (property);
+
+	fts = tracker_property_get_fulltext_indexed (property);
+
+	/* read existing property values */
+	old_values = get_old_property_values (property, error);
+	if (*error) {
+		g_free (table_name);
+		return;
+	}
+
 	switch (tracker_property_get_data_type (property)) {
 	case TRACKER_PROPERTY_TYPE_STRING:
 		g_value_init (&gvalue, G_TYPE_STRING);



[Date Prev][Date Next]   [Thread Prev][Thread Next]   [Thread Index] [Date Index] [Author Index]