tracker r1281 - in branches/indexer-split: . src/trackerd
- From: carlosg svn gnome org
- To: svn-commits-list gnome org
- Subject: tracker r1281 - in branches/indexer-split: . src/trackerd
- Date: Mon, 21 Apr 2008 13:47:53 +0100 (BST)
Author: carlosg
Date: Mon Apr 21 12:47:52 2008
New Revision: 1281
URL: http://svn.gnome.org/viewvc/tracker?rev=1281&view=rev
Log:
2008-04-21 Carlos Garnacho <carlos imendio com>
* src/trackerd/tracker-db-interface.[ch]:
* src/trackerd/tracker-db-interface-sqlite.c: Implement API to
start/end a transaction. Do not allocate (and later free) any
memory if a stmt doesn't return any rows. Add a GError parameter to
all query methods.
* src/trackerd/tracker-db-sqlite.h: do forward declaration for
DBConnection, so it can hold pointers to structures of the same type
instead of just gpointers.
* src/trackerd/tracker-db-sqlite.c:
* src/trackerd/tracker-dbus-files.c:
* src/trackerd/tracker-dbus-keywords.c:
* src/trackerd/tracker-dbus-metadata.c:
* src/trackerd/tracker-dbus-search.c:
* src/trackerd/tracker-email-evolution.c:
* src/trackerd/tracker-email-modest.c:
* src/trackerd/tracker-process-files.c:
* src/trackerd/trackerd.c: Update to use new API.
Modified:
branches/indexer-split/ChangeLog
branches/indexer-split/src/trackerd/tracker-db-interface-sqlite.c
branches/indexer-split/src/trackerd/tracker-db-interface.c
branches/indexer-split/src/trackerd/tracker-db-interface.h
branches/indexer-split/src/trackerd/tracker-db-sqlite.c
branches/indexer-split/src/trackerd/tracker-db-sqlite.h
branches/indexer-split/src/trackerd/tracker-dbus-files.c
branches/indexer-split/src/trackerd/tracker-dbus-keywords.c
branches/indexer-split/src/trackerd/tracker-dbus-metadata.c
branches/indexer-split/src/trackerd/tracker-dbus-search.c
branches/indexer-split/src/trackerd/tracker-email-evolution.c
branches/indexer-split/src/trackerd/tracker-email-modest.c
branches/indexer-split/src/trackerd/tracker-process-files.c
branches/indexer-split/src/trackerd/trackerd.c
Modified: branches/indexer-split/src/trackerd/tracker-db-interface-sqlite.c
==============================================================================
--- branches/indexer-split/src/trackerd/tracker-db-interface-sqlite.c (original)
+++ branches/indexer-split/src/trackerd/tracker-db-interface-sqlite.c Mon Apr 21 12:47:52 2008
@@ -33,6 +33,8 @@
GHashTable *procedures;
GSList *function_data;
+
+ guint in_transaction : 1;
};
struct SqliteFunctionData {
@@ -44,7 +46,8 @@
enum {
PROP_0,
- PROP_FILENAME
+ PROP_FILENAME,
+ PROP_IN_TRANSACTION
};
G_DEFINE_TYPE_WITH_CODE (TrackerDBInterfaceSqlite, tracker_db_interface_sqlite, G_TYPE_OBJECT,
@@ -89,6 +92,9 @@
case PROP_FILENAME:
priv->filename = g_value_dup_string (value);
break;
+ case PROP_IN_TRANSACTION:
+ priv->in_transaction = g_value_get_boolean (value);
+ break;
default:
G_OBJECT_WARN_INVALID_PROPERTY_ID (object, prop_id, pspec);
}
@@ -108,6 +114,9 @@
case PROP_FILENAME:
g_value_set_string (value, priv->filename);
break;
+ case PROP_IN_TRANSACTION:
+ g_value_set_boolean (value, priv->in_transaction);
+ break;
default:
G_OBJECT_WARN_INVALID_PROPERTY_ID (object, prop_id, pspec);
}
@@ -123,7 +132,7 @@
g_free (priv->filename);
g_hash_table_destroy (priv->statements);
- g_hash_table_destroy (priv->procedures);
+ g_hash_table_unref (priv->procedures);
g_slist_foreach (priv->function_data, (GFunc) g_free, NULL);
g_slist_free (priv->function_data);
@@ -150,6 +159,11 @@
"DB filename",
NULL,
G_PARAM_READWRITE | G_PARAM_CONSTRUCT_ONLY));
+ /* Override properties from interface */
+ g_object_class_override_property (object_class,
+ PROP_IN_TRANSACTION,
+ "in-transaction");
+
g_type_class_add_private (object_class,
sizeof (TrackerDBInterfaceSqlitePrivate));
}
@@ -297,27 +311,26 @@
}
static void
-tracker_db_interface_sqlite_add_procedure (TrackerDBInterface *db_interface,
- const gchar *procedure_name,
- const gchar *procedure)
+tracker_db_interface_sqlite_set_procedure_table (TrackerDBInterface *db_interface,
+ GHashTable *procedure_table)
{
TrackerDBInterfaceSqlitePrivate *priv;
priv = TRACKER_DB_INTERFACE_SQLITE_GET_PRIVATE (db_interface);
-
- g_hash_table_insert (priv->procedures,
- g_strdup (procedure_name),
- g_strdup (procedure));
+ priv->procedures = g_hash_table_ref (procedure_table);
}
static TrackerDBResultSet *
-create_result_set_from_stmt (sqlite3_stmt *stmt)
+create_result_set_from_stmt (TrackerDBInterfaceSqlite *interface,
+ sqlite3_stmt *stmt,
+ GError **error)
{
- TrackerDBResultSet *result_set;
+ TrackerDBInterfaceSqlitePrivate *priv;
+ TrackerDBResultSet *result_set = NULL;
gint columns, result, busy_count;
+ priv = TRACKER_DB_INTERFACE_SQLITE_GET_PRIVATE (interface);
columns = sqlite3_column_count (stmt);
- result_set = _tracker_db_result_set_new (columns);
result = SQLITE_OK;
while (result == SQLITE_OK ||
@@ -346,11 +359,38 @@
break;
case SQLITE_ROW:
+ if (G_UNLIKELY (!result_set)) {
+ result_set = _tracker_db_result_set_new (columns);
+ }
+
add_row (result_set, stmt);
break;
}
}
+ if (result != SQLITE_DONE) {
+ if (result == SQLITE_CORRUPT) {
+ g_critical ("Database %s is corrupt. Can't live without it", priv->filename);
+ g_assert_not_reached ();
+ }
+
+ if (!error) {
+ g_warning (sqlite3_errmsg (priv->db));
+ } else {
+ g_set_error (error,
+ TRACKER_DB_INTERFACE_ERROR,
+ TRACKER_DB_QUERY_ERROR,
+ sqlite3_errmsg (priv->db));
+ }
+
+ /* If there was an error, result set may be invalid or incomplete */
+ if (result_set) {
+ g_object_unref (result_set);
+ }
+
+ return NULL;
+ }
+
return result_set;
}
@@ -390,9 +430,10 @@
}
static TrackerDBResultSet *
-tracker_db_interface_sqlite_execute_procedure (TrackerDBInterface *db_interface,
- const gchar *procedure_name,
- va_list args)
+tracker_db_interface_sqlite_execute_procedure (TrackerDBInterface *db_interface,
+ GError **error,
+ const gchar *procedure_name,
+ va_list args)
{
TrackerDBInterfaceSqlitePrivate *priv;
sqlite3_stmt *stmt;
@@ -405,20 +446,21 @@
n_args = 1;
while ((str = va_arg (args, gchar *)) != NULL) {
- sqlite3_bind_text (stmt, n_args, str, -1, SQLITE_TRANSIENT);
+ sqlite3_bind_text (stmt, n_args, str, -1, SQLITE_STATIC);
n_args++;
}
/* Just panic if the number of arguments don't match */
g_assert (n_args != stmt_args);
- return create_result_set_from_stmt (stmt);
+ return create_result_set_from_stmt (db_interface, stmt, error);
}
static TrackerDBResultSet *
-tracker_db_interface_sqlite_execute_procedure_len (TrackerDBInterface *db_interface,
- const gchar *procedure_name,
- va_list args)
+tracker_db_interface_sqlite_execute_procedure_len (TrackerDBInterface *db_interface,
+ GError **error,
+ const gchar *procedure_name,
+ va_list args)
{
TrackerDBInterfaceSqlitePrivate *priv;
sqlite3_stmt *stmt;
@@ -435,10 +477,10 @@
if (len == -1) {
/* Assume we're dealing with strings */
- sqlite3_bind_text (stmt, n_args, str, len, SQLITE_TRANSIENT);
+ sqlite3_bind_text (stmt, n_args, str, len, SQLITE_STATIC);
} else {
/* Deal with it as a blob */
- sqlite3_bind_blob (stmt, n_args, str, len, SQLITE_TRANSIENT);
+ sqlite3_bind_blob (stmt, n_args, str, len, SQLITE_STATIC);
}
n_args++;
@@ -447,12 +489,13 @@
/* Just panic if the number of arguments don't match */
g_assert (n_args != stmt_args);
- return create_result_set_from_stmt (stmt);
+ return create_result_set_from_stmt (db_interface, stmt, error);
}
static TrackerDBResultSet *
-tracker_db_interface_sqlite_execute_query (TrackerDBInterface *db_interface,
- const gchar *query)
+tracker_db_interface_sqlite_execute_query (TrackerDBInterface *db_interface,
+ GError **error,
+ const gchar *query)
{
TrackerDBInterfaceSqlitePrivate *priv;
TrackerDBResultSet *result_set;
@@ -463,10 +506,14 @@
sqlite3_prepare_v2 (priv->db, query, -1, &stmt, NULL);
if (!stmt) {
+ g_set_error (error,
+ TRACKER_DB_INTERFACE_ERROR,
+ TRACKER_DB_QUERY_ERROR,
+ sqlite3_errmsg (priv->db));
return NULL;
}
- result_set = create_result_set_from_stmt (stmt);
+ result_set = create_result_set_from_stmt (db_interface, stmt, error);
sqlite3_finalize (stmt);
return result_set;
@@ -475,7 +522,7 @@
static void
tracker_db_interface_sqlite_iface_init (TrackerDBInterfaceIface *iface)
{
- iface->add_procedure = tracker_db_interface_sqlite_add_procedure;
+ iface->set_procedure_table = tracker_db_interface_sqlite_set_procedure_table;
iface->execute_procedure = tracker_db_interface_sqlite_execute_procedure;
iface->execute_procedure_len = tracker_db_interface_sqlite_execute_procedure_len;
iface->execute_query = tracker_db_interface_sqlite_execute_query;
Modified: branches/indexer-split/src/trackerd/tracker-db-interface.c
==============================================================================
--- branches/indexer-split/src/trackerd/tracker-db-interface.c (original)
+++ branches/indexer-split/src/trackerd/tracker-db-interface.c Mon Apr 21 12:47:52 2008
@@ -40,26 +40,34 @@
G_DEFINE_TYPE (TrackerDBResultSet, tracker_db_result_set, G_TYPE_OBJECT)
+GQuark
+tracker_db_interface_error_quark (void)
+{
+ return g_quark_from_static_string ("tracker-db-interface-error-quark");
+}
+
+static void
+tracker_db_interface_class_init (gpointer iface)
+{
+ g_object_interface_install_property (iface,
+ g_param_spec_boolean ("in-transaction",
+ "In transaction",
+ "Whether the connection has a transaction opened",
+ FALSE,
+ G_PARAM_READWRITE));
+}
+
GType
tracker_db_interface_get_type (void)
{
static GType type = 0;
if (G_UNLIKELY (type == 0)) {
- const GTypeInfo type_info = {
- sizeof (TrackerDBInterfaceIface), /* class_size */
- NULL, /* base_init */
- NULL, /* base_finalize */
- NULL,
- NULL, /* class_finalize */
- NULL, /* class_data */
- 0,
- 0, /* n_preallocs */
- NULL
- };
-
- type = g_type_register_static (G_TYPE_INTERFACE, "TrackerDBInterface",
- &type_info, 0);
+ type = g_type_register_static_simple (G_TYPE_INTERFACE,
+ "TrackerDBInterface",
+ sizeof (TrackerDBInterfaceIface),
+ (GClassInitFunc) tracker_db_interface_class_init,
+ 0, NULL, 0);
g_type_interface_add_prerequisite (type, G_TYPE_OBJECT);
}
@@ -223,9 +231,10 @@
}
TrackerDBResultSet *
-tracker_db_interface_execute_vquery (TrackerDBInterface *interface,
- const gchar *query,
- va_list args)
+tracker_db_interface_execute_vquery (TrackerDBInterface *interface,
+ GError **error,
+ const gchar *query,
+ va_list args)
{
TrackerDBResultSet *result_set = NULL;
gchar *str;
@@ -239,47 +248,48 @@
}
str = g_strdup_vprintf (query, args);
- result_set = TRACKER_DB_INTERFACE_GET_IFACE (interface)->execute_query (interface, str);
+ result_set = TRACKER_DB_INTERFACE_GET_IFACE (interface)->execute_query (interface, error, str);
g_free (str);
return ensure_result_set_state (result_set);
}
TrackerDBResultSet *
-tracker_db_interface_execute_query (TrackerDBInterface *interface,
- const gchar *query,
+tracker_db_interface_execute_query (TrackerDBInterface *interface,
+ GError **error,
+ const gchar *query,
...)
{
TrackerDBResultSet *result_set;
va_list args;
va_start (args, query);
- result_set = tracker_db_interface_execute_vquery (interface, query, args);
+ result_set = tracker_db_interface_execute_vquery (interface, error, query, args);
va_end (args);
return result_set;
}
void
-tracker_db_interface_add_procedure (TrackerDBInterface *interface,
- const gchar *procedure_name,
- const gchar *procedure)
+tracker_db_interface_set_procedure_table (TrackerDBInterface *interface,
+ GHashTable *procedure_table)
{
g_return_if_fail (TRACKER_IS_DB_INTERFACE (interface));
- g_return_if_fail (procedure != NULL);
+ g_return_if_fail (procedure_table != NULL);
- if (!TRACKER_DB_INTERFACE_GET_IFACE (interface)->add_procedure) {
- g_critical ("Database abstraction %s doesn't implement the method add_procedure()", G_OBJECT_TYPE_NAME (interface));
+ if (!TRACKER_DB_INTERFACE_GET_IFACE (interface)->set_procedure_table) {
+ g_critical ("Database abstraction %s doesn't implement the method set_procedure_table()", G_OBJECT_TYPE_NAME (interface));
return;
}
- TRACKER_DB_INTERFACE_GET_IFACE (interface)->add_procedure (interface, procedure_name, procedure);
+ TRACKER_DB_INTERFACE_GET_IFACE (interface)->set_procedure_table (interface, procedure_table);
}
TrackerDBResultSet *
-tracker_db_interface_execute_vprocedure (TrackerDBInterface *interface,
- const gchar *procedure,
- va_list args)
+tracker_db_interface_execute_vprocedure (TrackerDBInterface *interface,
+ GError **error,
+ const gchar *procedure,
+ va_list args)
{
TrackerDBResultSet *result_set;
@@ -291,15 +301,16 @@
return NULL;
}
- result_set = TRACKER_DB_INTERFACE_GET_IFACE (interface)->execute_procedure (interface, procedure, args);
+ result_set = TRACKER_DB_INTERFACE_GET_IFACE (interface)->execute_procedure (interface, error, procedure, args);
return ensure_result_set_state (result_set);
}
TrackerDBResultSet *
-tracker_db_interface_execute_vprocedure_len (TrackerDBInterface *interface,
- const gchar *procedure,
- va_list args)
+tracker_db_interface_execute_vprocedure_len (TrackerDBInterface *interface,
+ GError **error,
+ const gchar *procedure,
+ va_list args)
{
TrackerDBResultSet *result_set;
@@ -311,41 +322,86 @@
return NULL;
}
- result_set = TRACKER_DB_INTERFACE_GET_IFACE (interface)->execute_procedure_len (interface, procedure, args);
+ result_set = TRACKER_DB_INTERFACE_GET_IFACE (interface)->execute_procedure_len (interface, error, procedure, args);
return ensure_result_set_state (result_set);
}
TrackerDBResultSet *
-tracker_db_interface_execute_procedure (TrackerDBInterface *interface,
- const gchar *procedure,
+tracker_db_interface_execute_procedure (TrackerDBInterface *interface,
+ GError **error,
+ const gchar *procedure,
...)
{
TrackerDBResultSet *result_set;
va_list args;
va_start (args, procedure);
- result_set = tracker_db_interface_execute_vprocedure (interface, procedure, args);
+ result_set = tracker_db_interface_execute_vprocedure (interface, error, procedure, args);
va_end (args);
return result_set;
}
TrackerDBResultSet *
-tracker_db_interface_execute_procedure_len (TrackerDBInterface *interface,
- const gchar *procedure,
+tracker_db_interface_execute_procedure_len (TrackerDBInterface *interface,
+ GError **error,
+ const gchar *procedure,
...)
{
TrackerDBResultSet *result_set;
va_list args;
va_start (args, procedure);
- result_set = tracker_db_interface_execute_vprocedure_len (interface, procedure, args);
+ result_set = tracker_db_interface_execute_vprocedure_len (interface, error, procedure, args);
va_end (args);
return result_set;
}
+gboolean
+tracker_db_interface_start_transaction (TrackerDBInterface *interface)
+{
+ GError *error = NULL;
+
+ tracker_db_interface_execute_query (interface, &error, "BEGIN TRANSACTION");
+
+ if (error) {
+ g_warning (error->message);
+ g_error_free (error);
+ return FALSE;
+ }
+
+ g_object_set (interface, "in-transaction", TRUE, NULL);
+ return TRUE;
+}
+
+gboolean
+tracker_db_interface_end_transaction (TrackerDBInterface *interface)
+{
+ gboolean in_transaction;
+ GError *error = NULL;
+
+ g_object_get (interface, "in-transaction", &in_transaction, NULL);
+
+ if (!in_transaction)
+ return FALSE;
+
+ g_object_set (interface, "in-transaction", FALSE, NULL);
+ tracker_db_interface_execute_query (interface, &error, "COMMIT");
+
+ if (error) {
+ g_warning (error->message);
+ g_error_free (error);
+
+ tracker_db_interface_execute_query (interface, NULL, "ROLLBACK");
+
+ return FALSE;
+ }
+
+ return TRUE;
+}
+
/* TrackerDBResultSet semiprivate API */
TrackerDBResultSet *
_tracker_db_result_set_new (guint columns)
Modified: branches/indexer-split/src/trackerd/tracker-db-interface.h
==============================================================================
--- branches/indexer-split/src/trackerd/tracker-db-interface.h (original)
+++ branches/indexer-split/src/trackerd/tracker-db-interface.h Mon Apr 21 12:47:52 2008
@@ -38,6 +38,12 @@
#define TRACKER_TYPE_DB_BLOB (tracker_db_blob_get_type ())
+#define TRACKER_DB_INTERFACE_ERROR (tracker_db_interface_error_quark ())
+
+typedef enum {
+ TRACKER_DB_QUERY_ERROR,
+ TRACKER_DB_CORRUPT
+} TrackerDBInterfaceError;
typedef struct TrackerDBInterface TrackerDBInterface;
typedef struct TrackerDBInterfaceIface TrackerDBInterfaceIface;
@@ -47,17 +53,19 @@
struct TrackerDBInterfaceIface {
GTypeInterface iface;
- void (* add_procedure) (TrackerDBInterface *interface,
- const gchar *procedure_name,
- const gchar *procedure);
- TrackerDBResultSet * (* execute_procedure) (TrackerDBInterface *interface,
- const gchar *procedure,
- va_list args);
- TrackerDBResultSet * (* execute_procedure_len) (TrackerDBInterface *interface,
- const gchar *procedure,
- va_list args);
- TrackerDBResultSet * (* execute_query) (TrackerDBInterface *interface,
- const gchar *query);
+ void (* set_procedure_table) (TrackerDBInterface *interface,
+ GHashTable *procedure_table);
+ TrackerDBResultSet * (* execute_procedure) (TrackerDBInterface *interface,
+ GError **error,
+ const gchar *procedure,
+ va_list args);
+ TrackerDBResultSet * (* execute_procedure_len) (TrackerDBInterface *interface,
+ GError **error,
+ const gchar *procedure,
+ va_list args);
+ TrackerDBResultSet * (* execute_query) (TrackerDBInterface *interface,
+ GError **error,
+ const gchar *query);
};
struct TrackerDBResultSet {
@@ -69,35 +77,46 @@
};
+GQuark tracker_db_interface_error_quark (void);
+
GType tracker_db_interface_get_type (void);
GType tracker_db_result_set_get_type (void);
GType tracker_db_blob_get_type (void);
/* Functions to create queries/procedures */
-TrackerDBResultSet * tracker_db_interface_execute_vquery (TrackerDBInterface *interface,
- const gchar *query,
- va_list args);
-TrackerDBResultSet * tracker_db_interface_execute_query (TrackerDBInterface *interface,
- const gchar *query,
- ...) G_GNUC_PRINTF (2, 3);
-void tracker_db_interface_add_procedure (TrackerDBInterface *interface,
- const gchar *procedure_name,
- const gchar *procedure);
-TrackerDBResultSet * tracker_db_interface_execute_vprocedure (TrackerDBInterface *interface,
- const gchar *procedure,
- va_list args);
-TrackerDBResultSet * tracker_db_interface_execute_procedure (TrackerDBInterface *interface,
- const gchar *procedure,
- ...) G_GNUC_NULL_TERMINATED;
+TrackerDBResultSet * tracker_db_interface_execute_vquery (TrackerDBInterface *interface,
+ GError **error,
+ const gchar *query,
+ va_list args);
+TrackerDBResultSet * tracker_db_interface_execute_query (TrackerDBInterface *interface,
+ GError **error,
+ const gchar *query,
+ ...) G_GNUC_PRINTF (3, 4);
+void tracker_db_interface_set_procedure_table (TrackerDBInterface *interface,
+ GHashTable *procedure_table);
+TrackerDBResultSet * tracker_db_interface_execute_vprocedure (TrackerDBInterface *interface,
+ GError **error,
+ const gchar *procedure,
+ va_list args);
+TrackerDBResultSet * tracker_db_interface_execute_procedure (TrackerDBInterface *interface,
+ GError **error,
+ const gchar *procedure,
+ ...) G_GNUC_NULL_TERMINATED;
TrackerDBResultSet * tracker_db_interface_execute_vprocedure_len (TrackerDBInterface *interface,
+ GError **error,
const gchar *procedure,
va_list args);
TrackerDBResultSet * tracker_db_interface_execute_procedure_len (TrackerDBInterface *interface,
+ GError **error,
const gchar *procedure,
...) G_GNUC_NULL_TERMINATED;
+gboolean tracker_db_interface_start_transaction (TrackerDBInterface *interface);
+gboolean tracker_db_interface_end_transaction (TrackerDBInterface *interface);
+
+
/* Semi private TrackerDBResultSet functions */
TrackerDBResultSet * _tracker_db_result_set_new (guint cols);
void _tracker_db_result_set_append (TrackerDBResultSet *result_set);
Modified: branches/indexer-split/src/trackerd/tracker-db-sqlite.c
==============================================================================
--- branches/indexer-split/src/trackerd/tracker-db-sqlite.c (original)
+++ branches/indexer-split/src/trackerd/tracker-db-sqlite.c Mon Apr 21 12:47:52 2008
@@ -64,6 +64,7 @@
extern Tracker *tracker;
+static GHashTable *prepared_queries;
//static GMutex *sequence_mutex;
gboolean use_nfs_safe_locking = FALSE;
@@ -393,14 +394,16 @@
}
-static gboolean
-tracker_db_initialize (TrackerDBInterface *db)
+gboolean
+tracker_db_initialize (void)
{
FILE *file;
char *sql_file;
GTimeVal *tv;
int i = 0;
+ prepared_queries = g_hash_table_new_full (g_str_hash, g_str_equal, g_free, g_free);
+
tracker_log ("Loading prepared queries...");
sql_file = g_build_filename (SHAREDIR, "tracker", "sqlite-stored-procs.sql", NULL);
@@ -445,7 +448,7 @@
name = buffer;
//tracker_log ("installing query %s with sql %s", name, query);
- tracker_db_interface_add_procedure (db, name, query);
+ g_hash_table_insert (prepared_queries, g_strdup (name), g_strdup (query));
} else {
continue;
}
@@ -549,7 +552,7 @@
}
db = tracker_db_interface_sqlite_new (dbname);
- tracker_db_initialize (db);
+ tracker_db_interface_set_procedure_table (db, prepared_queries);
g_free (dbname);
return db;
@@ -576,7 +579,7 @@
}
db = tracker_db_interface_sqlite_new (dbname);
- tracker_db_initialize (db);
+ tracker_db_interface_set_procedure_table (db, prepared_queries);
g_free (dbname);
return db;
@@ -777,25 +780,17 @@
void
tracker_db_start_index_transaction (DBConnection *db_con)
{
- DBConnection *tmp;
DBConnection *email_db_con = db_con->emails;
-
- tmp = db_con->common;
- if (!tmp->in_transaction) tracker_db_start_transaction (tmp);
-
+ tracker_db_interface_start_transaction (db_con->common->db);
/* files */
- if (!db_con->in_transaction) tracker_db_start_transaction (db_con);
-
- tmp = db_con->blob;
- if (!tmp->in_transaction) tracker_db_start_transaction (tmp);
+ tracker_db_interface_start_transaction (db_con->db);
+ tracker_db_interface_start_transaction (db_con->blob->db);
/* emails */
- if (!email_db_con->in_transaction) tracker_db_start_transaction (email_db_con);
-
- tmp = email_db_con->blob;
- if (!tmp->in_transaction) tracker_db_start_transaction (tmp);
+ tracker_db_interface_start_transaction (email_db_con->db);
+ tracker_db_interface_start_transaction (email_db_con->blob->db);
}
@@ -803,34 +798,17 @@
void
tracker_db_end_index_transaction (DBConnection *db_con)
{
- DBConnection *tmp;
DBConnection *email_db_con = db_con->emails;
- tmp = db_con->common;
- if (tmp->in_transaction) {
- tracker_db_end_transaction (tmp);
- }
+ tracker_db_interface_end_transaction (db_con->common->db);
/* files */
- if (db_con->in_transaction) {
- tracker_db_end_transaction (db_con);
- }
-
- tmp = db_con->blob;
- if (tmp->in_transaction) {
- tracker_db_end_transaction (tmp);
- }
+ tracker_db_interface_end_transaction (db_con->db);
+ tracker_db_interface_end_transaction (db_con->blob->db);
/* emails */
- if (email_db_con->in_transaction) {
- tracker_db_end_transaction (email_db_con);
- }
-
- tmp = email_db_con->blob;
- if (tmp->in_transaction) {
- tracker_db_end_transaction (tmp);
- }
-
+ tracker_db_interface_end_transaction (email_db_con->db);
+ tracker_db_interface_end_transaction (email_db_con->blob->db);
}
@@ -866,7 +844,7 @@
db_con = g_new0 (DBConnection, 1);
db_con->db = tracker_db_interface_sqlite_new (dbname);
- tracker_db_initialize (db_con->db);
+ tracker_db_interface_set_procedure_table (db_con->db, prepared_queries);
g_free (dbname);
db_con->db_type = TRACKER_DB_TYPE_DATA;
@@ -1077,8 +1055,7 @@
DBConnection *cache = db_con->cache;
DBConnection *emails = db_con->emails;
- if (cache && cache->in_transaction) {
- tracker_db_end_transaction (cache);
+ if (cache && tracker_db_interface_end_transaction (cache->db)) {
cache_trans = TRUE;
}
@@ -1098,7 +1075,7 @@
open_email_db (emails);
if (cache_trans) {
- tracker_db_start_transaction (cache);
+ tracker_db_interface_start_transaction (cache->db);
}
@@ -1110,8 +1087,7 @@
gboolean cache_trans = FALSE;
DBConnection *cache = db_con->cache;
- if (cache && cache->in_transaction) {
- tracker_db_end_transaction (cache);
+ if (cache && tracker_db_interface_end_transaction (cache->db)) {
cache_trans = TRUE;
}
@@ -1128,10 +1104,8 @@
open_email_db (emails);
if (cache_trans) {
- tracker_db_start_transaction (cache);
+ tracker_db_interface_start_transaction (cache->db);
}
-
-
}
DBConnection *
@@ -1156,7 +1130,7 @@
db_con = g_new0 (DBConnection, 1);
db_con->db = tracker_db_interface_sqlite_new (dbname);
- tracker_db_initialize (db_con->db);
+ tracker_db_interface_set_procedure_table (db_con->db, prepared_queries);
g_free (dbname);
db_con->db_type = TRACKER_DB_TYPE_CACHE;
@@ -1202,7 +1176,7 @@
db_con = g_new0 (DBConnection, 1);
db_con->db = tracker_db_interface_sqlite_new (dbname);
- tracker_db_initialize (db_con->db);
+ tracker_db_interface_set_procedure_table (db_con->db, prepared_queries);
g_free (dbname);
@@ -1396,10 +1370,13 @@
lock_db();
va_start (args, query);
- result_set = tracker_db_interface_execute_vquery (db_con->db, query, args);
+ result_set = tracker_db_interface_execute_vquery (db_con->db, NULL, query, args);
va_end (args);
- if (result_set) {
+ /* This function is meant for queries that don't return any result set,
+ * if it's passed some query that returns a result set, just discard it.
+ */
+ if (G_UNLIKELY (result_set)) {
g_object_unref (result_set);
}
@@ -1438,7 +1415,7 @@
va_list args;
va_start (args, procedure);
- result_set = tracker_db_interface_execute_vprocedure (db_con->db, procedure, args);
+ result_set = tracker_db_interface_execute_vprocedure (db_con->db, NULL, procedure, args);
va_end (args);
return result_set;
@@ -1452,7 +1429,7 @@
va_list args;
va_start (args, procedure);
- result_set = tracker_db_interface_execute_vprocedure (db_con->db, procedure, args);
+ result_set = tracker_db_interface_execute_vprocedure (db_con->db, NULL, procedure, args);
va_end (args);
if (result_set) {
@@ -1562,7 +1539,7 @@
int i;
result_set = tracker_db_interface_execute_query
- (db_con->db, "SELECT OptionValue FROM Options WHERE OptionKey = 'DBVersion'");
+ (db_con->db, NULL, "SELECT OptionValue FROM Options WHERE OptionKey = 'DBVersion'");
if (!result_set) {
return FALSE;
@@ -1597,9 +1574,9 @@
load_sql_file (db_con, "sqlite-service-types.sql");
load_sql_file (db_con, "sqlite-metadata.sql");
- tracker_db_interface_execute_query (db_con->db,
+ tracker_db_interface_execute_query (db_con->db, NULL,
"update Options set OptionValue = '16' where OptionKey = 'DBVersion'");
- tracker_db_interface_execute_query (db_con->db, "ANALYZE");
+ tracker_db_interface_execute_query (db_con->db, NULL, "ANALYZE");
}
/* apply and table changes for each version update */
@@ -1692,7 +1669,7 @@
str_file_id = tracker_uint_to_str (id);
lock_connection (db_con);
- result_set = tracker_db_interface_execute_procedure (db_con->db, "GetAllContents", str_file_id, NULL);
+ result_set = tracker_db_interface_execute_procedure (db_con->db, NULL, "GetAllContents", str_file_id, NULL);
unlock_connection (db_con);
g_free (str_file_id);
@@ -1796,6 +1773,7 @@
}
tracker_db_interface_execute_procedure_len (blob_db_con->db,
+ NULL,
"SaveServiceContents",
str_file_id, -1,
def->id, -1,
@@ -1832,6 +1810,7 @@
}
tracker_db_interface_execute_procedure_len (blob_db_con->db,
+ NULL,
"SaveServiceContents",
str_file_id, -1,
def->id, -1,
@@ -2025,52 +2004,12 @@
void
tracker_db_clear_temp (DBConnection *db_con)
{
- tracker_db_start_transaction (db_con->cache);
+ tracker_db_interface_start_transaction (db_con->cache->db);
tracker_db_exec_no_reply (db_con->cache, "DELETE FROM FilePending");
tracker_db_exec_no_reply (db_con->cache, "DELETE FROM FileWatches");
- tracker_db_end_transaction (db_con->cache);
-}
-
-
-
-gboolean
-tracker_db_start_transaction (DBConnection *db_con)
-{
- //if (db_con->in_transaction) {
- // tracker_error ("Error - cannot start transaction - database is already in a transaction");
- //}
-
- if (!tracker_db_exec_no_reply (db_con, "BEGIN TRANSACTION")) {
- tracker_error ("could not start transaction");
- return FALSE;
- }
-
- db_con->in_transaction = TRUE;
- return TRUE;
-}
-
-
-gboolean
-tracker_db_end_transaction (DBConnection *db_con)
-{
-
- if (!db_con->in_transaction) {
- tracker_error ("Error - cannot end transaction. Rolling back...");
- return FALSE;
- }
-
- db_con->in_transaction = FALSE;
-
- if (!tracker_db_exec_no_reply (db_con, "COMMIT")) {
- tracker_error ("could not commit transaction");
- tracker_db_exec_no_reply (db_con, "ROLLBACK");
- return FALSE;
- }
-
- return TRUE;
+ tracker_db_interface_end_transaction (db_con->cache->db);
}
-
void
tracker_db_check_tables (DBConnection *db_con)
{
@@ -2125,7 +2064,7 @@
if (count > limit) count = limit;
} else {
- tracker_db_start_transaction (db_con);
+ tracker_db_interface_start_transaction (db_con->db);
tracker_exec_proc (db_con, "DeleteSearchResults1", NULL);
}
@@ -2212,7 +2151,7 @@
}
if (save_results) {
- tracker_db_end_transaction (db_con);
+ tracker_db_interface_end_transaction (db_con->db);
}
/* delete duds */
@@ -3648,14 +3587,14 @@
/* delete all files underneath directory
- tracker_db_start_transaction (db_con);
+ tracker_db_interface_start_transaction (db_con->db);
tracker_exec_proc (db_con, "DeleteService2", uri, NULL);
tracker_exec_proc (db_con, "DeleteService3", uri_prefix, NULL);
tracker_exec_proc (db_con, "DeleteService4", uri, NULL);
tracker_exec_proc (db_con, "DeleteService5", uri_prefix, NULL);
tracker_exec_proc (db_con, "DeleteService8", uri, uri_prefix, NULL);
tracker_exec_proc (db_con, "DeleteService10", uri, uri_prefix, NULL);
- tracker_db_end_transaction (db_con);
+ tracker_db_interface_end_transaction (db_con->db);
*/
/* delete directory */
@@ -3785,7 +3724,7 @@
tracker_db_exec_no_reply (cache, "DELETE FROM FilePending WHERE ID IN (SELECT ID FROM FileTemp)");
- return tracker_db_interface_execute_query (cache->db, "SELECT FileID, FileUri, Action, MimeType, IsDir, IsNew, RefreshEmbedded, RefreshContents, ServiceTypeID FROM FileTemp ORDER BY ID");
+ return tracker_db_interface_execute_query (cache->db, NULL, "SELECT FileID, FileUri, Action, MimeType, IsDir, IsNew, RefreshEmbedded, RefreshContents, ServiceTypeID FROM FileTemp ORDER BY ID");
}
@@ -3814,7 +3753,7 @@
tracker_db_exec_no_reply (cache, str);
tracker_db_exec_no_reply (cache, "DELETE FROM FilePending WHERE ID IN (SELECT ID FROM MetadataTemp)");
- return tracker_db_interface_execute_query (cache->db, "SELECT FileID, FileUri, Action, MimeType, IsDir, IsNew, RefreshEmbedded, RefreshContents, ServiceTypeID FROM MetadataTemp ORDER BY ID");
+ return tracker_db_interface_execute_query (cache->db, NULL, "SELECT FileID, FileUri, Action, MimeType, IsDir, IsNew, RefreshEmbedded, RefreshContents, ServiceTypeID FROM MetadataTemp ORDER BY ID");
}
@@ -3931,7 +3870,7 @@
tracker_debug ("getting files with mimes using sql %s", query);
- result_set = tracker_db_interface_execute_query (db_con->db, query);
+ result_set = tracker_db_interface_execute_query (db_con->db, NULL, query);
g_free (query);
@@ -4291,7 +4230,7 @@
if (id == 0) {
tracker_debug ("WARNING: original file %s not found in DB", moved_from_uri);
tracker_db_insert_pending_file (db_con, id, moved_to_uri, NULL, "unknown", 0, TRACKER_ACTION_WRITABLE_FILE_CLOSED, FALSE, TRUE, -1);
- tracker_db_end_transaction (db_con);
+ tracker_db_interface_end_transaction (db_con->db);
return;
}
@@ -5312,7 +5251,7 @@
TrackerDBResultSet *result_set;
gboolean integrity_check = TRUE;
- result_set = tracker_db_interface_execute_query (db_con->db, "pragma integrity_check;");
+ result_set = tracker_db_interface_execute_query (db_con->db, NULL, "pragma integrity_check;");
if (!result_set) {
integrity_check = FALSE;
Modified: branches/indexer-split/src/trackerd/tracker-db-sqlite.h
==============================================================================
--- branches/indexer-split/src/trackerd/tracker-db-sqlite.h (original)
+++ branches/indexer-split/src/trackerd/tracker-db-sqlite.h Mon Apr 21 12:47:52 2008
@@ -38,9 +38,9 @@
+typedef struct DBConnection DBConnection;
-
-typedef struct {
+struct DBConnection {
TrackerDBInterface *db;
TrackerDBType db_type;
DBCategory db_category;
@@ -54,19 +54,17 @@
guint in_error : 1;
/* pointers to other database connection objects */
- gpointer data;
- gpointer common;
- gpointer files;
- gpointer index;
- gpointer emails;
- gpointer others;
- gpointer blob;
- gpointer cache;
- gpointer user;
+ DBConnection *data;
+ DBConnection *common;
+ DBConnection *files;
+ DBConnection *index;
+ DBConnection *emails;
+ DBConnection *others;
+ DBConnection *blob;
+ DBConnection *cache;
+ DBConnection *user;
gpointer word_index;
-
-
-} DBConnection;
+};
char ** tracker_db_get_row (char ***result, int num);
@@ -78,6 +76,7 @@
gboolean tracker_db_needs_setup (void);
gboolean tracker_db_needs_data (void);
+gboolean tracker_db_initialize (void);
void tracker_db_thread_init (void);
void tracker_db_thread_end (void);
void tracker_db_close (DBConnection *db_con);
Modified: branches/indexer-split/src/trackerd/tracker-dbus-files.c
==============================================================================
--- branches/indexer-split/src/trackerd/tracker-dbus-files.c (original)
+++ branches/indexer-split/src/trackerd/tracker-dbus-files.c Mon Apr 21 12:47:52 2008
@@ -991,7 +991,7 @@
g_free (uri_filtered);
query = g_string_free (sql, FALSE);
- result_set = tracker_db_interface_execute_query (db_con->db, query);
+ result_set = tracker_db_interface_execute_query (db_con->db, NULL, query);
*values = tracker_dbus_query_result_to_ptr_array (result_set);
if (result_set) {
Modified: branches/indexer-split/src/trackerd/tracker-dbus-keywords.c
==============================================================================
--- branches/indexer-split/src/trackerd/tracker-dbus-keywords.c (original)
+++ branches/indexer-split/src/trackerd/tracker-dbus-keywords.c Mon Apr 21 12:47:52 2008
@@ -603,7 +603,7 @@
tracker_debug (query);
- result_set = tracker_db_interface_execute_query (db_con->db, query);
+ result_set = tracker_db_interface_execute_query (db_con->db, NULL, query);
*values = tracker_dbus_query_result_to_strv (result_set, NULL);
if (result_set) {
Modified: branches/indexer-split/src/trackerd/tracker-dbus-metadata.c
==============================================================================
--- branches/indexer-split/src/trackerd/tracker-dbus-metadata.c (original)
+++ branches/indexer-split/src/trackerd/tracker-dbus-metadata.c Mon Apr 21 12:47:52 2008
@@ -270,7 +270,7 @@
tracker_debug (query);
- result_set = tracker_db_interface_execute_query (db_con->db, query);
+ result_set = tracker_db_interface_execute_query (db_con->db, NULL, query);
*values = tracker_dbus_query_result_to_strv (result_set, NULL);
g_free (query);
Modified: branches/indexer-split/src/trackerd/tracker-dbus-search.c
==============================================================================
--- branches/indexer-split/src/trackerd/tracker-dbus-search.c (original)
+++ branches/indexer-split/src/trackerd/tracker-dbus-search.c Mon Apr 21 12:47:52 2008
@@ -939,7 +939,7 @@
FALSE);
}
- result_set = tracker_db_interface_execute_query (db_con->db, query_translated);
+ result_set = tracker_db_interface_execute_query (db_con->db, NULL, query_translated);
g_free (query_translated);
}
Modified: branches/indexer-split/src/trackerd/tracker-email-evolution.c
==============================================================================
--- branches/indexer-split/src/trackerd/tracker-email-evolution.c (original)
+++ branches/indexer-split/src/trackerd/tracker-email-evolution.c Mon Apr 21 12:47:52 2008
@@ -271,7 +271,7 @@
if (tracker_db_get_option_int (db_con->common, "InitialIndex") == 1) {
char *sql = g_strdup_printf ("update Services set mtime = 0 where path like '%s/.evolution/%s'", g_get_home_dir (), "%");
- tracker_db_interface_execute_query (db_con->db, sql);
+ tracker_db_interface_execute_query (db_con->db, NULL, sql);
g_free (sql);
}
Modified: branches/indexer-split/src/trackerd/tracker-email-modest.c
==============================================================================
--- branches/indexer-split/src/trackerd/tracker-email-modest.c (original)
+++ branches/indexer-split/src/trackerd/tracker-email-modest.c Mon Apr 21 12:47:52 2008
@@ -281,7 +281,7 @@
if (tracker_db_get_option_int (db_con->common, "InitialIndex") == 1) {
char *sql = g_strdup_printf ("update Services set mtime = 0 where path like '%s/.modest/%s'", g_get_home_dir (), "%");
- tracker_db_interface_execute_query (db_con->db, sql);
+ tracker_db_interface_execute_query (db_con->db, NULL, sql);
g_free (sql);
}
Modified: branches/indexer-split/src/trackerd/tracker-process-files.c
==============================================================================
--- branches/indexer-split/src/trackerd/tracker-process-files.c (original)
+++ branches/indexer-split/src/trackerd/tracker-process-files.c Mon Apr 21 12:47:52 2008
@@ -659,14 +659,14 @@
db_con = tracker->index_db;
tracker_db_start_index_transaction (db_con);
- tracker_db_start_transaction (db_con->cache);
+ tracker_db_interface_start_transaction (db_con->cache->db);
tracker_applications_add_service_directories ();
list = tracker_get_service_dirs ("Applications");
process_directory_list (tracker, list, FALSE);
- tracker_db_end_transaction (db_con->cache);
+ tracker_db_interface_end_transaction (db_con->cache->db);
g_slist_free (list);
}
@@ -816,7 +816,7 @@
return;
}
- tracker_db_start_transaction (db_con->cache);
+ tracker_db_interface_start_transaction (db_con->cache->db);
/* Index watched dirs first */
process_watch_directories (tracker, index_include);
@@ -845,7 +845,7 @@
crawl_directories = NULL;
}
- tracker_db_end_transaction (db_con->cache);
+ tracker_db_interface_end_transaction (db_con->cache->db);
/* Signal progress */
g_signal_emit_by_name (object, "index-progress",
@@ -922,7 +922,7 @@
return;
}
- tracker_db_start_transaction (db_con->cache);
+ tracker_db_interface_start_transaction (db_con->cache->db);
process_index_crawl_add_directories (tracker, crawl_directory_roots);
@@ -946,7 +946,7 @@
crawl_directories = NULL;
}
- tracker_db_end_transaction (db_con->cache);
+ tracker_db_interface_end_transaction (db_con->cache->db);
}
static void
@@ -977,9 +977,9 @@
db_con = tracker->index_db;
tracker_log ("Starting chat log indexing...");
- tracker_db_start_transaction (db_con->cache);
+ tracker_db_interface_start_transaction (db_con->cache->db);
process_directory_list (tracker, list, TRUE);
- tracker_db_end_transaction (db_con->cache);
+ tracker_db_interface_end_transaction (db_con->cache->db);
g_slist_free (list);
}
@@ -1005,9 +1005,9 @@
tracker_log ("Starting Firefox web history indexing...");
tracker_add_service_path ("WebHistory", firefox_dir);
- tracker_db_start_transaction (db_con->cache);
+ tracker_db_interface_start_transaction (db_con->cache->db);
process_directory_list (tracker, list, TRUE);
- tracker_db_end_transaction (db_con->cache);
+ tracker_db_interface_end_transaction (db_con->cache->db);
g_slist_free (list);
}
@@ -1056,7 +1056,7 @@
tracker_email_add_service_directories (db_con->emails);
tracker_log ("Starting email indexing...");
- tracker_db_start_transaction (db_con->cache);
+ tracker_db_interface_start_transaction (db_con->cache->db);
name = tracker_email_get_name ();
@@ -1068,7 +1068,7 @@
g_slist_free (list);
}
- tracker_db_end_transaction (db_con->cache);
+ tracker_db_interface_end_transaction (db_con->cache->db);
}
}
@@ -1192,13 +1192,13 @@
tracker_log ("Updating database stats, please wait...");
- tracker_db_start_transaction (db_con);
+ tracker_db_interface_start_transaction (db_con->db);
tracker_db_exec_no_reply (db_con, "ANALYZE");
- tracker_db_end_transaction (db_con);
+ tracker_db_interface_end_transaction (db_con->db);
- tracker_db_start_transaction (db_con->emails);
+ tracker_db_interface_start_transaction (db_con->emails->db);
tracker_db_exec_no_reply (db_con->emails, "ANALYZE");
- tracker_db_end_transaction (db_con->emails);
+ tracker_db_interface_end_transaction (db_con->emails->db);
tracker_log ("Finished optimizing, waiting for new events...");
}
@@ -1528,7 +1528,9 @@
tracker);
/* Start processing */
+ g_print ("oooye!\n");
g_mutex_lock (tracker->files_signal_mutex);
+ g_print ("oooye2!\n");
/* Signal state change */
g_signal_emit_by_name (object,
Modified: branches/indexer-split/src/trackerd/trackerd.c
==============================================================================
--- branches/indexer-split/src/trackerd/trackerd.c (original)
+++ branches/indexer-split/src/trackerd/trackerd.c Mon Apr 21 12:47:52 2008
@@ -840,12 +840,10 @@
/* Set thread safe DB connection */
tracker_db_thread_init ();
-#if 0
- if (!tracker_db_initialize (tracker->data_dir)) {
+ if (!tracker_db_initialize ()) {
tracker_error ("Could not initialize database engine!");
return EXIT_FAILURE;
}
-#endif
/* FIXME: is this actually necessary? */
db_con = tracker_db_connect_cache ();
[
Date Prev][
Date Next] [
Thread Prev][
Thread Next]
[
Thread Index]
[
Date Index]
[
Author Index]