tracker r1879 - in branches/indexer-split: . data src/libtracker-common src/trackerd



Author: ifrade
Date: Wed Jul 16 16:42:13 2008
New Revision: 1879
URL: http://svn.gnome.org/viewvc/tracker?rev=1879&view=rev

Log:
Fixed metadata API

Modified:
   branches/indexer-split/ChangeLog
   branches/indexer-split/data/sqlite-stored-procs.sql
   branches/indexer-split/src/libtracker-common/tracker-field.c
   branches/indexer-split/src/libtracker-common/tracker-field.h
   branches/indexer-split/src/trackerd/tracker-db.c
   branches/indexer-split/src/trackerd/tracker-metadata.c

Modified: branches/indexer-split/data/sqlite-stored-procs.sql
==============================================================================
--- branches/indexer-split/data/sqlite-stored-procs.sql	(original)
+++ branches/indexer-split/data/sqlite-stored-procs.sql	Wed Jul 16 16:42:13 2008
@@ -120,7 +120,7 @@
 GetMetadataAliases SELECT distinct M.MetaName, M.ID from MetaDataTypes M, MetaDataChildren C where M.ID = C.ChildID and C.MetaDataID = ?; 
 GetMetadataAliasesForName SELECT distinct M.MetaName, M.ID from MetaDataTypes M, MetaDataChildren C where M.ID = C.ChildID and C.MetaDataID = (select ID from MetaDataTypes where MetaName = ?) union select M.MetaName, M.ID from MetaDataTypes M where M.MetaName = ?; 
 
-SelectMetadataClasses SELECT DISTINCT MetaName FROM MetaDataTypes;
+SelectRegisteredClasses SELECT DISTINCT TypeName FROM ServiceTypes;
 
 InsertMetadataType INSERT INTO MetaDataTypes (MetaName) Values (?);
 

Modified: branches/indexer-split/src/libtracker-common/tracker-field.c
==============================================================================
--- branches/indexer-split/src/libtracker-common/tracker-field.c	(original)
+++ branches/indexer-split/src/libtracker-common/tracker-field.c	Wed Jul 16 16:42:13 2008
@@ -119,6 +119,24 @@
 
 G_DEFINE_TYPE (TrackerField, tracker_field, G_TYPE_OBJECT);
 
+const gchar *
+tracker_field_type_to_string (TrackerFieldType fieldtype)
+{
+        GType       type;
+        GEnumClass *enum_class;
+        GEnumValue *enum_value;
+
+        type = tracker_field_type_get_type ();
+        enum_class = G_ENUM_CLASS (g_type_class_peek (type));
+        enum_value = g_enum_get_value (enum_class, fieldtype);
+        
+        if (!enum_value) {
+		return NULL;
+        }
+
+        return enum_value->value_nick;
+}
+
 static void
 tracker_field_class_init (TrackerFieldClass *klass)
 {

Modified: branches/indexer-split/src/libtracker-common/tracker-field.h
==============================================================================
--- branches/indexer-split/src/libtracker-common/tracker-field.h	(original)
+++ branches/indexer-split/src/libtracker-common/tracker-field.h	Wed Jul 16 16:42:13 2008
@@ -41,7 +41,10 @@
 	TRACKER_FIELD_TYPE_LINK,
 } TrackerFieldType;
 
-GType tracker_field_type_get_type (void) G_GNUC_CONST;
+GType        tracker_field_type_get_type  (void) G_GNUC_CONST;
+const gchar *tracker_field_type_to_string (TrackerFieldType fieldtype);
+
+
 
 #define TRACKER_TYPE_FIELD         (tracker_field_get_type ())
 #define TRACKER_TYPE_FIELD_TYPE    (tracker_field_type_get_type ())

Modified: branches/indexer-split/src/trackerd/tracker-db.c
==============================================================================
--- branches/indexer-split/src/trackerd/tracker-db.c	(original)
+++ branches/indexer-split/src/trackerd/tracker-db.c	Wed Jul 16 16:42:13 2008
@@ -1701,29 +1701,30 @@
 
 void
 tracker_db_metadata_set_single (TrackerDBInterface *iface, 
-				const gchar        *service, 
-				const gchar        *id, 
+				const gchar        *service_type, 
+				const gchar        *service_id, 
 				const gchar        *key, 
 				const gchar        *value, 
 				gboolean            do_backup)
 {
-	gchar *array[1];
+	gchar *array[2];
 
 	g_return_if_fail (TRACKER_IS_DB_INTERFACE (iface));
-	g_return_if_fail (service != NULL);
-	g_return_if_fail (id != NULL);
+	g_return_if_fail (service_type != NULL);
+	g_return_if_fail (service_id != NULL);
 	g_return_if_fail (key != NULL);
 	g_return_if_fail (value != NULL);
 
 	array[0] = (gchar*) value;
+	array[1] = NULL;
 
-	tracker_db_metadata_set (iface, service, id, key, array, do_backup);
+	tracker_db_metadata_set (iface, service_type, service_id, key, array, do_backup);
 }
 
 gchar *
 tracker_db_metadata_set (TrackerDBInterface  *iface, 
-			 const gchar         *service, 
-			 const gchar         *id, 
+			 const gchar         *service_type, 
+			 const gchar         *service_id, 
 			 const gchar         *key, 
 			 gchar              **values, 
 			 gboolean             do_backup)
@@ -1739,12 +1740,12 @@
 	GString      *str = NULL;
 	
 	g_return_val_if_fail (TRACKER_IS_DB_INTERFACE (iface), NULL);
-	g_return_val_if_fail (service != NULL, NULL);
-	g_return_val_if_fail (id != NULL, NULL);
+	g_return_val_if_fail (service_type != NULL, NULL);
+	g_return_val_if_fail (service_id != NULL, NULL);
 	g_return_val_if_fail (key != NULL, NULL);
 	g_return_val_if_fail (values != NULL, NULL);
 
-	if (strcmp (id, "0") == 0) {
+	if (strcmp (service_id, "0") == 0) {
 		return NULL;
 	}
 
@@ -1755,10 +1756,10 @@
 		return NULL;
 	}
 	
-	res_service = tracker_db_service_get_by_entity (iface, id);
+	res_service = tracker_db_service_get_by_entity (iface, service_id);
 
 	if (!res_service) {
-		g_warning ("Service not found for id:'%s'", id);
+		g_warning ("Service not found for service_id:'%s'", service_id);
 		return NULL;
 	}
 	
@@ -1776,12 +1777,12 @@
 		tracker_field_get_data_type (def) == TRACKER_FIELD_TYPE_FULLTEXT;
 
 	if (update_index) {
-		old_value = tracker_db_metadata_get_delimited (iface, id, key);
+		old_value = tracker_db_metadata_get_delimited (iface, service_id, key);
 	}
 
 	/* delete old value if metadata does not support multiple values */
 	if (!tracker_field_get_multiple_values (def)) {
-		tracker_db_metadata_delete (iface, service, id, key, FALSE);
+		tracker_db_metadata_delete (iface, service_type, service_id, key, FALSE);
 	}
 
 	switch (tracker_field_get_data_type (def)) {
@@ -1793,7 +1794,7 @@
 			
 			tracker_db_exec_proc (iface, 
 					      "SetMetadataKeyword", 
-					      id, 
+					      service_id, 
 					      tracker_field_get_id (def), 
 					      values[i], 
 					      NULL);
@@ -1801,9 +1802,9 @@
 			/* Backup non-embedded data for embedded services */
 			if (do_backup && 
 			    !tracker_field_get_embedded (def) && 
-			    tracker_ontology_service_type_has_embedded (service)) {
+			    tracker_ontology_service_type_has_embedded (service_type)) {
 				backup_non_embedded_metadata (iface, 
-							      id, 
+							      service_id, 
 							      tracker_field_get_id (def), 
 							      values[i]);
 			}
@@ -1835,8 +1836,8 @@
 			/* Backup non-embedded data for embedded services */
 			if (do_backup &&
 			    !tracker_field_get_embedded (def) && 
-			    tracker_ontology_service_type_has_embedded (service)) {
-				backup_non_embedded_metadata (iface, id, tracker_field_get_id (def), values[i]);
+			    tracker_ontology_service_type_has_embedded (service_type)) {
+				backup_non_embedded_metadata (iface, service_id, tracker_field_get_id (def), values[i]);
 			}
 
 			mvalue = tracker_parser_text_to_string (values[i], 
@@ -1848,7 +1849,7 @@
 								tracker_field_get_delimited (def));
 			tracker_db_exec_proc (iface, 
 					      "SetMetadata", 
-					      id, 
+					      service_id, 
 					      tracker_field_get_id (def), 
 					      mvalue, 
 					      values[i], 
@@ -1864,7 +1865,7 @@
 			 * blob or something else? 
 			 */
 			db_save_full_text (iface,
-					   id, 
+					   service_id, 
 					   values[0], 
 					   strlen (values[0]));
 			new_value = values[0];
@@ -1882,9 +1883,9 @@
 			/* Backup non-embedded data for embedded services */
 			if (do_backup && 
 			    !tracker_field_get_embedded (def) && 
-			    tracker_ontology_service_type_has_embedded (service)) {
+			    tracker_ontology_service_type_has_embedded (service_type)) {
 				backup_non_embedded_metadata (iface, 
-							      id, 
+							      service_id, 
 							      tracker_field_get_id (def), 
 							      values[i]);
 			}
@@ -1898,7 +1899,7 @@
 								tracker_field_get_delimited (def));
 			tracker_db_exec_proc (iface, 
 					      "SetMetadata", 
-					      id, 
+					      service_id, 
 					      tracker_field_get_id (def), 
 					      mvalue, 
 					      values[i], 
@@ -1916,16 +1917,16 @@
 			/* Backup non-embedded data for embedded services */
 			if (do_backup && 
 			    !tracker_field_get_embedded (def) && 
-			    tracker_ontology_service_type_has_embedded (service)) {
+			    tracker_ontology_service_type_has_embedded (service_type)) {
 				backup_non_embedded_metadata (iface, 
-							      id, 
+							      service_id, 
 							      tracker_field_get_id (def), 
 							      values[i]);
 			}
 
 			tracker_db_exec_proc (iface,
 					      "SetMetadata", 
-					      id, 
+					      service_id, 
 					      tracker_field_get_id (def), 
 					      " ", 
 					      values[i], 
@@ -1942,16 +1943,16 @@
 			/* Backup non-embedded data for embedded services */
 			if (do_backup && 
 			    !tracker_field_get_embedded (def) && 
-			    tracker_ontology_service_type_has_embedded (service)) {
+			    tracker_ontology_service_type_has_embedded (service_type)) {
 				backup_non_embedded_metadata (iface, 
-							      id, 
+							      service_id, 
 							      tracker_field_get_id (def), 
 							      values[i]);
 			}
 
 			tracker_db_exec_proc (iface,
 					      "SetMetadataNumeric", 
-					      id, 
+					      service_id, 
 					      tracker_field_get_id (def), 
 					      values[i], 
 					      NULL);
@@ -1975,7 +1976,7 @@
 
 			tracker_db_exec_proc (iface, 
 					      "SetMetadataNumeric", 
-					      id, 
+					      service_id, 
 					      tracker_field_get_id (def), 
 					      mvalue, 
 					      NULL);
@@ -1983,9 +1984,9 @@
 			/* backup non-embedded data for embedded services */
 			if (do_backup && 
 			    !tracker_field_get_embedded (def) && 
-			    tracker_ontology_service_type_has_embedded (service)) {
+			    tracker_ontology_service_type_has_embedded (service_type)) {
 				backup_non_embedded_metadata (iface,
-							      id, 
+							      service_id, 
 							      tracker_field_get_id (def), 
 							      mvalue);
 			}
@@ -2025,7 +2026,7 @@
 						  "update Services set KeyMetadata%d = '%s' where id = %s",
 						  key_field, 
 						  esc_value, 
-						  id);
+						  service_id);
 
 			g_free (esc_value);
 		}
@@ -2037,10 +2038,10 @@
 	 */
 	if (update_index) {
 		if (str) {
-			update_metadata_index (id, res_service, def, old_value, str->str);
+			update_metadata_index (service_id, res_service, def, old_value, str->str);
 			g_string_free (str, TRUE);
 		} else {
-			update_metadata_index (id, res_service, def, old_value, new_value);	
+			update_metadata_index (service_id, res_service, def, old_value, new_value);	
 		}
 	}
 
@@ -2878,24 +2879,30 @@
 	return id;
 }
 
+/*
+ * Obtain the concrete service type name for the file id. 
+ */
 gchar *
 tracker_db_service_get_by_entity (TrackerDBInterface *iface, 
 				  const gchar        *id)
 {
 	TrackerDBResultSet *result_set;
+	gint                service_type_id;
 	gchar              *result = NULL;
-	
+
 	g_return_val_if_fail (TRACKER_IS_DB_INTERFACE (iface), NULL);
 	g_return_val_if_fail (id != NULL, NULL);
 
 	result_set = tracker_db_exec_proc (iface,
-					   "GetFileByID2", 
+					   "GetFileByID",
 					   id,
 					   NULL);
 
 	if (result_set) {
-		tracker_db_result_set_get (result_set, 1, &result, -1);
+		tracker_db_result_set_get (result_set, 3, &service_type_id, -1);
 		g_object_unref (result_set);
+
+		result = tracker_ontology_get_service_type_by_id (service_type_id);
 	}
 
 	return result;

Modified: branches/indexer-split/src/trackerd/tracker-metadata.c
==============================================================================
--- branches/indexer-split/src/trackerd/tracker-metadata.c	(original)
+++ branches/indexer-split/src/trackerd/tracker-metadata.c	Wed Jul 16 16:42:13 2008
@@ -36,14 +36,6 @@
 #include "tracker-db.h"
 #include "tracker-marshal.h"
 
-static const gchar *types[] = {
-	"index", 
-	"string", 
-	"numeric", 
-	"date", 
-	NULL
-};
-
 G_DEFINE_TYPE(TrackerMetadata, tracker_metadata, G_TYPE_OBJECT)
 
 static void
@@ -67,8 +59,8 @@
  */
 gboolean
 tracker_metadata_get (TrackerMetadata   *object,
-		      const gchar       *service,
-		      const gchar       *id,
+		      const gchar       *service_type,
+		      const gchar       *uri,
 		      gchar            **keys,
 		      gchar           ***values,
 		      GError           **error)
@@ -85,32 +77,32 @@
 
 	request_id = tracker_dbus_get_next_request_id ();
 
-	tracker_dbus_return_val_if_fail (service != NULL, FALSE, error);
+	tracker_dbus_return_val_if_fail (service_type != NULL, FALSE, error);
 	tracker_dbus_return_val_if_fail (keys != NULL, FALSE, error);
 	tracker_dbus_return_val_if_fail (g_strv_length (keys) > 0, FALSE, error);
 	tracker_dbus_return_val_if_fail (values != NULL, FALSE, error);
 
-	if (!tracker_ontology_is_valid_service_type (service)) {
+	if (!tracker_ontology_is_valid_service_type (service_type)) {
 		tracker_dbus_request_failed (request_id,
 					     error, 
                                              "Service '%s' is invalid or has not been implemented yet", 
-                                             service);
+                                             service_type);
 		return FALSE;
 	}
 
 	tracker_dbus_request_new (request_id,
 				  "DBus request to get metadata values, "
-				  "service:'%s'",
-				  service);
+				  "service type:'%s'",
+				  service_type);
 
-	iface = tracker_db_manager_get_db_interface_by_service (service);
+	iface = tracker_db_manager_get_db_interface_by_service (service_type);
 
-	service_id = tracker_db_file_get_id_as_string (iface, service, id);
+	service_id = tracker_db_file_get_id_as_string (iface, service_type, uri);
         if (!service_id) {
 		tracker_dbus_request_failed (request_id,
 					     error,
 					     "Service URI '%s' not found", 
-					     id);
+					     uri);
                 return FALSE;
         }
 
@@ -120,7 +112,7 @@
 		tracker_dbus_request_failed (request_id,
 					     error, 
 					     "Service information can not be found for entity '%s'", 
-					     id);
+					     uri);
                 return FALSE;
 	}
 
@@ -177,7 +169,7 @@
 	g_free (service_result);
 
 	/* Build SQL where clause */
-	g_string_append_printf (sql, " WHERE S.ID = %s", id);
+	g_string_append_printf (sql, " WHERE S.ID = %s", service_id);
 	g_free (service_id);
 
 	query = g_string_free (sql, FALSE);
@@ -224,7 +216,7 @@
 	tracker_dbus_return_val_if_fail (values != NULL, FALSE, error);
 	tracker_dbus_return_val_if_fail (g_strv_length (keys) > 0, FALSE, error);
 	tracker_dbus_return_val_if_fail (g_strv_length (values) > 0, FALSE, error);
-	tracker_dbus_return_val_if_fail (g_strv_length (keys) != g_strv_length (values), FALSE, error);
+	tracker_dbus_return_val_if_fail (g_strv_length (keys) == g_strv_length (values), FALSE, error);
 
 	tracker_dbus_request_new (request_id,
 				  "DBus request to set metadata keys, "
@@ -293,10 +285,9 @@
 				   gboolean         *is_writable,
 				   GError          **error)
 {
-	TrackerDBInterface *iface;
-	TrackerDBResultSet *result_set;
 	guint               request_id;
-	gint                i;
+	TrackerField       *def = NULL;
+	TrackerFieldType    field_type;
 
 	request_id = tracker_dbus_get_next_request_id ();
 
@@ -305,26 +296,13 @@
 	tracker_dbus_return_val_if_fail (is_embedded != NULL, FALSE, error);
 	tracker_dbus_return_val_if_fail (is_writable != NULL, FALSE, error);
 
-	/* Here it doesn't matter which one we ask, as long as it has common.db
-	 * attached. The service ones are cached connections, so we can use
-	 * those instead of asking for an individual-file connection (like what
-	 * the original code had) */
-
-	/* iface = tracker_db_manager_get_db_interfaceX (TRACKER_DB_COMMON); */
-
-	iface = tracker_db_manager_get_db_interface_by_service (TRACKER_DB_FOR_FILE_SERVICE);
-
 	tracker_dbus_request_new (request_id,
 				  "DBus request to get metadata details, "
-				  "name:'%s'",
+				  "metadata type:'%s'",
 				  metadata);
 
-	result_set = tracker_db_exec_proc (iface, 
-					   "GetMetadataTypeInfo",
-					   metadata, 
-					   NULL);
-
-	if (!result_set) {
+	def = tracker_ontology_get_field_def (metadata);
+	if (!def) {
 		tracker_dbus_request_failed (request_id,
 					     error, 
 					     "Metadata name '%s' is invalid or unrecognized",
@@ -332,14 +310,11 @@
 		return FALSE;
 	}
 
-	tracker_db_result_set_get (result_set,
-				   1, &i,
-				   2, is_embedded,
-				   3, is_writable,
-				   -1);
+	field_type = tracker_field_get_data_type (def);
 
-	*type = g_strdup (types[i]);
-	g_object_unref (result_set);
+	*type = g_strdup (tracker_field_type_to_string (field_type));
+	*is_embedded = tracker_field_get_embedded (def);
+	*is_writable = !tracker_field_get_embedded (def);
 
 	tracker_dbus_request_success (request_id);
 	
@@ -412,7 +387,7 @@
 	iface = tracker_db_manager_get_db_interface_by_service (TRACKER_DB_FOR_FILE_SERVICE);
 
 	result_set = tracker_db_exec_proc (iface, 
-					   "SelectMetadataClasses", 
+					   "SelectRegisteredClasses", 
 					   NULL);
 	
 	if (result_set) {



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