tracker r1724 - in branches/xesam-support: . src/libtracker-db src/trackerd



Author: pvanhoof
Date: Fri Jun 20 13:24:44 2008
New Revision: 1724
URL: http://svn.gnome.org/viewvc/tracker?rev=1724&view=rev

Log:
Sync with indexer-split

Modified:
   branches/xesam-support/ChangeLog
   branches/xesam-support/src/libtracker-db/tracker-db-manager.c
   branches/xesam-support/src/trackerd/tracker-main.c
   branches/xesam-support/src/trackerd/tracker-xesam-manager.c
   branches/xesam-support/src/trackerd/tracker-xesam.c

Modified: branches/xesam-support/src/libtracker-db/tracker-db-manager.c
==============================================================================
--- branches/xesam-support/src/libtracker-db/tracker-db-manager.c	(original)
+++ branches/xesam-support/src/libtracker-db/tracker-db-manager.c	Fri Jun 20 13:24:44 2008
@@ -140,7 +140,7 @@
 static gchar              *user_data_dir;
 static gchar              *sys_tmp_dir;
 static gpointer            db_type_enum_class_pointer;
-static TrackerDBInterface *attach_interface = NULL;
+static TrackerDBInterface *attach_iface = NULL;
 
 static const gchar * 
 location_to_directory (TrackerDBLocation location)
@@ -1658,26 +1658,33 @@
 		   db_type_to_string (type));
 
 	if (attach_all) {
-		if (!attach_interface) {
-			attach_interface = tracker_db_interface_sqlite_new (path);
-			tracker_db_interface_set_procedure_table (attach_interface, 
-								  prepared_queries);
-
-			/* We don't have separate interfaces for each db in
-			 * this situation. We just have one interface.
-			 * One analyze when we create interfaces.
-			 */
+		iface = tracker_db_interface_sqlite_new (path);
+		tracker_db_interface_set_procedure_table (iface, 
+							  prepared_queries);
+	
+		/* We don't have separate interfaces for each db in
+		 * this situation. We just have one interface.
+		 * One analyze when we create interfaces.
+		 */
+		if (*create) {
 			g_message ("  Analyzing...");
-			db_exec_no_reply (attach_interface, "ANALYZE");
+			db_exec_no_reply (iface, "ANALYZE");
 		}
 
-		g_message ("  Attaching");
-		db_exec_no_reply (attach_interface, 
-				  "ATTACH '%s' as %s",
-				  dbs[type].abs_filename,
-				  dbs[type].name);
-
-		iface = attach_interface;
+		/* The reason we do this is because we need to create
+		 * a new interface for EACH filename so the sql files
+		 * are loaded into the right file instead of the
+		 * first one we create.
+		 */
+		if (attach_iface) {
+			g_message ("  Attaching");
+			db_exec_no_reply (attach_iface, 
+					  "ATTACH '%s' as %s",
+					  dbs[type].abs_filename,
+					  dbs[type].name);
+		} else {
+			attach_iface = iface;
+		}
 	} else {
 		iface = tracker_db_interface_sqlite_new (path);
 		tracker_db_interface_set_procedure_table (iface, 
@@ -2020,22 +2027,31 @@
 
 	iface = db_interface_get (TRACKER_DB_XESAM, &create);
 
+	if (!attach_iface) {
+		g_critical ("XESAM database could not be set up because "
+			    "there is no TrackerDBInterface with all connections "
+			    "attached. The common database is needed to create "
+			    "the xesam database correctly!");
+		g_object_unref (iface);
+		return NULL;
+	}
+
 	if (create) {
-		load_sql_file (iface, "sqlite-xesam.sql", NULL);
+		load_sql_file (attach_iface, "sqlite-xesam.sql", NULL);
 		
-		load_service_file_xesam (iface, "xesam.metadata");
-		load_service_file_xesam (iface, "xesam-convenience.metadata");
-		load_service_file_xesam (iface, "xesam-virtual.metadata");
-		load_service_file_xesam (iface, "xesam.service");
-		load_service_file_xesam (iface, "xesam-convenience.service");
-		load_service_file_xesam (iface, "xesam-service.smapping");
-		load_service_file_xesam (iface, "xesam-metadata.mmapping");
+		load_service_file_xesam (attach_iface, "xesam.metadata");
+		load_service_file_xesam (attach_iface, "xesam-convenience.metadata");
+		load_service_file_xesam (attach_iface, "xesam-virtual.metadata");
+		load_service_file_xesam (attach_iface, "xesam.service");
+		load_service_file_xesam (attach_iface, "xesam-convenience.service");
+		load_service_file_xesam (attach_iface, "xesam-service.smapping");
+		load_service_file_xesam (attach_iface, "xesam-metadata.mmapping");
 		
-		db_xesam_create_lookup (iface);
+		db_xesam_create_lookup (attach_iface);
 	}
 
 	/* Load static xesam data */
-	db_get_static_xesam_data (iface);
+	db_get_static_xesam_data (attach_iface);
 
 	return iface;
 }
@@ -2227,7 +2243,7 @@
 		}
 
 		/* Don't attach while we do this... */
-		attach_all = FALSE;
+		attach_all = TRUE;
 
 		/* In cases where we re-init this module, make sure
 		 * we have cleaned up the ontology before we load all
@@ -2242,23 +2258,19 @@
 		g_message ("Creating database files, this may take a few moments...");
 
 		for (i = 0; i < G_N_ELEMENTS (dbs); i++) {
-			TrackerDBInterface *iface;
-			
-			iface = db_interface_create (i);
-			
-			if (!attach_all) {
-				dbs[i].iface = iface;
-			}
+			dbs[i].iface = db_interface_create (i);
 		}
 
-		/* When attaching all, we have 2 references per
-		 * interface, one for the dbs and one for the
-		 * singletone interface, we need to unref both and
-		 * set the attach interface to NULL to close all
-		 * databases.
+		/* We don't close the dbs in the same loop as before
+		 * becase some databases need other databases
+		 * attached to be created correctly.
 		 */
-		g_object_unref (attach_interface);
-		attach_interface = NULL;
+		for (i = 0; i < G_N_ELEMENTS (dbs); i++) {
+			g_object_unref (dbs[i].iface);
+			dbs[i].iface = NULL;
+		}
+
+		attach_iface = NULL;
 	} else {
 		/* Make sure we remove and recreate the cache directory in tmp
 		 * each time we start up, this is meant to be a per-run
@@ -2278,13 +2290,7 @@
 	g_message ("Loading databases files...");
 
 	for (i = 0; i < G_N_ELEMENTS (dbs); i++) {
-		TrackerDBInterface *iface;
-
-		iface = db_interface_create (i);
-
-		if (!attach_all) {
-			dbs[i].iface = iface;
-		}
+		dbs[i].iface = db_interface_create (i);
 	}
 
 	initialized = TRUE;
@@ -2336,9 +2342,7 @@
 	g_type_class_unref (db_type_enum_class_pointer);
 	db_type_enum_class_pointer = NULL;
 
-	if (attach_interface) {
-		g_object_unref (attach_interface);
-	}
+	attach_iface = NULL;
 
 	/* Make sure we shutdown all other modules we depend on */
 	tracker_ontology_shutdown ();
@@ -2360,7 +2364,7 @@
 	g_return_val_if_fail (initialized != FALSE, NULL);
 
 	if (attach_all) {
-		return attach_interface;
+		return attach_iface;
 	}
 
 	return dbs[db].iface;

Modified: branches/xesam-support/src/trackerd/tracker-main.c
==============================================================================
--- branches/xesam-support/src/trackerd/tracker-main.c	(original)
+++ branches/xesam-support/src/trackerd/tracker-main.c	Fri Jun 20 13:24:44 2008
@@ -463,11 +463,6 @@
 	g_message ("Checking directory exists:'%s'", data_dir);
 	g_mkdir_with_parents (data_dir, 00755);
 
-	/* Remove an existing one */
-	if (g_file_test (sys_tmp_dir, G_FILE_TEST_EXISTS)) {
-		tracker_path_remove (sys_tmp_dir);
-	}
-
 	/* Remove old tracker dirs */
         filename = g_build_filename (g_get_home_dir (), ".Tracker", NULL);
 
@@ -648,11 +643,6 @@
 		tracker_path_remove (data_dir);
 		g_mkdir_with_parents (data_dir, 00755);
 	}
-
-	/* Remove sys tmp directory */
-	if (sys_tmp_dir) {
-		tracker_path_remove (sys_tmp_dir);
-	}
 }
 
 static gboolean

Modified: branches/xesam-support/src/trackerd/tracker-xesam-manager.c
==============================================================================
--- branches/xesam-support/src/trackerd/tracker-xesam-manager.c	(original)
+++ branches/xesam-support/src/trackerd/tracker-xesam-manager.c	Fri Jun 20 13:24:44 2008
@@ -138,8 +138,9 @@
 			     g_strdup (tracker_xesam_session_get_id (session)),
 			     g_object_ref (session));
 
-	if (session_id)
+	if (session_id) {
 		*session_id = g_strdup (tracker_xesam_session_get_id (session));
+	}
 
 	return session;
 }
@@ -149,13 +150,15 @@
 				     GError      **error)
 {
 	gpointer inst = g_hash_table_lookup (xesam_sessions, session_id);
-	if (!inst)
+
+	if (!inst) {
 		g_set_error (error, 
 			     TRACKER_XESAM_ERROR_DOMAIN, 
 			     TRACKER_XESAM_ERROR_SESSION_ID_NOT_REGISTERED,
 			     "Session ID is not registered");
-	else
+	} else {
 		g_hash_table_remove (xesam_sessions, session_id);
+	}
 }
 
 TrackerXesamSession *
@@ -163,13 +166,16 @@
 				   GError      **error)
 {
 	TrackerXesamSession *session = g_hash_table_lookup (xesam_sessions, session_id);
-	if (session)
+
+	if (session) {
 		g_object_ref (session);
-	else
+	} else {
 		g_set_error (error,
 			     TRACKER_XESAM_ERROR_DOMAIN, 
 			     TRACKER_XESAM_ERROR_SESSION_ID_NOT_REGISTERED,
 			     "Session ID is not registered");
+	}
+
 	return session;
 }
 
@@ -187,6 +193,7 @@
 		TrackerXesamLiveSearch *search;
 
 		search = tracker_xesam_session_get_search (sessions->data, search_id, NULL);
+
 		if (search) {
 			/* Search got a reference added already */
 			if (search_in) {
@@ -204,11 +211,13 @@
 
 	g_list_free (sessions);
 
-	if (!session) 
+	if (!session) {
 		g_set_error (error, 
 			     TRACKER_XESAM_ERROR_DOMAIN, 
 			     TRACKER_XESAM_ERROR_SEARCH_ID_NOT_REGISTERED,
 			     "Search ID is not registered");
+	}
+
 	return session;
 }
 
@@ -223,8 +232,9 @@
 
 	while (sessions) {
 		TrackerXesamLiveSearch *p;
-		
+
 		p = tracker_xesam_session_get_search (sessions->data, search_id, NULL);
+
 		if (p) {
 			/* Search got a reference added already */
 			search = p;
@@ -236,11 +246,12 @@
 
 	g_list_free (sessions);
 
-	if (!search) 
+	if (!search) {
 		g_set_error (error, 
 			     TRACKER_XESAM_ERROR_DOMAIN, 
 			     TRACKER_XESAM_ERROR_SEARCH_ID_NOT_REGISTERED,
 			     "Search ID is not registered");
+	}
 
 	return search;
 }

Modified: branches/xesam-support/src/trackerd/tracker-xesam.c
==============================================================================
--- branches/xesam-support/src/trackerd/tracker-xesam.c	(original)
+++ branches/xesam-support/src/trackerd/tracker-xesam.c	Fri Jun 20 13:24:44 2008
@@ -409,15 +409,15 @@
 		if (error) {
 			dbus_g_method_return_error (context, error);
 			g_error_free (error);
-		} else 
+		} else {
+			g_debug ("Created new xesam search: %s  for session: %s",
+				search_id, session_id);
 			dbus_g_method_return (context, search_id);
+		}
 
 		if (search)
 			g_object_unref (search);
 
-		g_debug ("Created new xesam search: %s  for session: %s",
-			 search_id, session_id);
-
 		g_free (search_id);
 
 	} else if (error) {



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