tracker r1612 - in branches/xesam-support: . src/libtracker-common src/libtracker-db src/tracker-indexer src/trackerd
- From: pvanhoof svn gnome org
- To: svn-commits-list gnome org
- Subject: tracker r1612 - in branches/xesam-support: . src/libtracker-common src/libtracker-db src/tracker-indexer src/trackerd
- Date: Mon, 9 Jun 2008 15:41:08 +0000 (UTC)
Author: pvanhoof
Date: Mon Jun 9 15:41:07 2008
New Revision: 1612
URL: http://svn.gnome.org/viewvc/tracker?rev=1612&view=rev
Log:
2008-06-09 Philip Van Hoof <pvanhoof gnome org>
* svn merge -r 1591:1608 ../indexer-split
Removed:
branches/xesam-support/src/trackerd/tracker-db-sqlite.c
branches/xesam-support/src/trackerd/tracker-db-sqlite.h
Modified:
branches/xesam-support/ChangeLog
branches/xesam-support/src/libtracker-common/tracker-type-utils.h
branches/xesam-support/src/libtracker-common/tracker-utils.h
branches/xesam-support/src/libtracker-db/tracker-db-interface-sqlite.h
branches/xesam-support/src/libtracker-db/tracker-db-manager.c
branches/xesam-support/src/libtracker-db/tracker-db-manager.h
branches/xesam-support/src/tracker-indexer/tracker-main.c
branches/xesam-support/src/trackerd/Makefile.am
branches/xesam-support/src/trackerd/tracker-daemon.c
branches/xesam-support/src/trackerd/tracker-daemon.h
branches/xesam-support/src/trackerd/tracker-db-email.c
branches/xesam-support/src/trackerd/tracker-db-email.h
branches/xesam-support/src/trackerd/tracker-db.c
branches/xesam-support/src/trackerd/tracker-db.h
branches/xesam-support/src/trackerd/tracker-dbus.c
branches/xesam-support/src/trackerd/tracker-email-evolution.c
branches/xesam-support/src/trackerd/tracker-email-kmail.c
branches/xesam-support/src/trackerd/tracker-email-modest.c
branches/xesam-support/src/trackerd/tracker-email-plugin.h
branches/xesam-support/src/trackerd/tracker-email-thunderbird.c
branches/xesam-support/src/trackerd/tracker-email-utils.c
branches/xesam-support/src/trackerd/tracker-email-utils.h
branches/xesam-support/src/trackerd/tracker-email.c
branches/xesam-support/src/trackerd/tracker-email.h
branches/xesam-support/src/trackerd/tracker-files.c
branches/xesam-support/src/trackerd/tracker-files.h
branches/xesam-support/src/trackerd/tracker-indexer.c
branches/xesam-support/src/trackerd/tracker-keywords.c
branches/xesam-support/src/trackerd/tracker-keywords.h
branches/xesam-support/src/trackerd/tracker-main.c
branches/xesam-support/src/trackerd/tracker-main.h
branches/xesam-support/src/trackerd/tracker-metadata.c
branches/xesam-support/src/trackerd/tracker-metadata.h
branches/xesam-support/src/trackerd/tracker-process-files.c
branches/xesam-support/src/trackerd/tracker-rdf-query.c
branches/xesam-support/src/trackerd/tracker-rdf-query.h
branches/xesam-support/src/trackerd/tracker-search.c
branches/xesam-support/src/trackerd/tracker-search.h
branches/xesam-support/src/trackerd/tracker-utils.c
branches/xesam-support/src/trackerd/tracker-watcher-fam.c
branches/xesam-support/src/trackerd/tracker-watcher-inotify.c
branches/xesam-support/src/trackerd/tracker-watcher.h
branches/xesam-support/src/trackerd/tracker-xesam-live-search.c
branches/xesam-support/src/trackerd/tracker-xesam-manager.c
branches/xesam-support/src/trackerd/tracker-xesam-query.c
branches/xesam-support/src/trackerd/tracker-xesam-query.h
branches/xesam-support/src/trackerd/tracker-xesam.c
branches/xesam-support/src/trackerd/tracker-xesam.h
Modified: branches/xesam-support/src/libtracker-common/tracker-type-utils.h
==============================================================================
--- branches/xesam-support/src/libtracker-common/tracker-type-utils.h (original)
+++ branches/xesam-support/src/libtracker-common/tracker-type-utils.h Mon Jun 9 15:41:07 2008
@@ -24,28 +24,24 @@
#include <glib.h>
-gchar * tracker_date_format (const gchar *time_string);
-time_t tracker_string_to_date (const gchar *time_string);
-gchar * tracker_date_to_string (time_t date_time);
-
-gchar * tracker_long_to_string (glong i);
-gchar * tracker_int_to_string (gint i);
-gchar * tracker_uint_to_string (guint i);
-gchar * tracker_gint32_to_string (gint32 i);
-gchar * tracker_guint32_to_string (guint32 i);
-
-gboolean tracker_string_to_uint (const gchar *s,
- guint *ret);
-gint tracker_string_in_string_list (const gchar *str,
- gchar **strv);
-gchar ** tracker_gslist_to_string_list (GSList *list);
-gchar * tracker_string_list_to_string (gchar **strv,
- gint length,
- gchar sep);
+gchar * tracker_date_format (const gchar *time_string);
+time_t tracker_string_to_date (const gchar *time_string);
+gchar * tracker_date_to_string (time_t date_time);
+gchar * tracker_long_to_string (glong i);
+gchar * tracker_int_to_string (gint i);
+gchar * tracker_uint_to_string (guint i);
+gchar * tracker_gint32_to_string (gint32 i);
+gchar * tracker_guint32_to_string (guint32 i);
+gboolean tracker_string_to_uint (const gchar *s,
+ guint *ret);
+gint tracker_string_in_string_list (const gchar *str,
+ gchar **strv);
+gchar ** tracker_gslist_to_string_list (GSList *list);
+gchar * tracker_string_list_to_string (gchar **strv,
+ gint length,
+ gchar sep);
/* "true" -> "1"; "false" -> "0" */
-gchar * tracker_boolean_as_text_to_number (const gchar *value);
-
-
+gchar * tracker_boolean_as_text_to_number (const gchar *value);
#endif /* __LIBTRACKER_COMMON_TYPE_UTILS_H__ */
Modified: branches/xesam-support/src/libtracker-common/tracker-utils.h
==============================================================================
--- branches/xesam-support/src/libtracker-common/tracker-utils.h (original)
+++ branches/xesam-support/src/libtracker-common/tracker-utils.h Mon Jun 9 15:41:07 2008
@@ -22,6 +22,8 @@
#ifndef __LIBTRACKER_COMMON_UTILS_H__
#define __LIBTRACKER_COMMON_UTILS_H__
+#include <glib.h>
+
gboolean tracker_is_empty_string (const char *str);
gchar * tracker_string_replace (const gchar *haystack,
gchar *needle,
Modified: branches/xesam-support/src/libtracker-db/tracker-db-interface-sqlite.h
==============================================================================
--- branches/xesam-support/src/libtracker-db/tracker-db-interface-sqlite.h (original)
+++ branches/xesam-support/src/libtracker-db/tracker-db-interface-sqlite.h Mon Jun 9 15:41:07 2008
@@ -31,7 +31,7 @@
#define TRACKER_IS_DB_INTERFACE_SQLITE_CLASS(c) (G_TYPE_CHECK_CLASS_TYPE ((o), TRACKER_TYPE_DB_INTERFACE_SQLITE))
#define TRACKER_DB_INTERFACE_SQLITE_GET_CLASS(o) (G_TYPE_INSTANCE_GET_CLASS ((o), TRACKER_TYPE_DB_INTERFACE_SQLITE, TrackerDBInterfaceSqliteClass))
-typedef struct TrackerDBInterfaceSqlite TrackerDBInterfaceSqlite;
+typedef struct TrackerDBInterfaceSqlite TrackerDBInterfaceSqlite;
typedef struct TrackerDBInterfaceSqliteClass TrackerDBInterfaceSqliteClass;
typedef gint (* TrackerDBCollationFunc) (gchar *str1,
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 Mon Jun 9 15:41:07 2008
@@ -23,8 +23,10 @@
#include <stdlib.h>
#include <string.h>
#include <regex.h>
+#include <zlib.h>
#include <libtracker-common/tracker-field.h>
+#include <libtracker-common/tracker-nfs-lock.h>
#include <libtracker-common/tracker-ontology.h>
#include <libtracker-common/tracker-type-utils.h>
#include <libtracker-common/tracker-utils.h>
@@ -32,6 +34,8 @@
#include "tracker-db-manager.h"
#include "tracker-db-interface-sqlite.h"
+#define ZLIBBUFSIZ 8192
+
typedef enum {
TRACKER_DB_LOCATION_DATA_DIR,
TRACKER_DB_LOCATION_USER_DATA_DIR,
@@ -39,19 +43,21 @@
} TrackerDBLocation;
typedef struct {
- TrackerDB db;
- TrackerDBLocation location;
- const gchar *file;
- const gchar *name;
- gchar *abs_filename;
- gint cache_size;
- gint page_size;
- gboolean add_functions;
+ TrackerDB db;
+ TrackerDBLocation location;
+ TrackerDBInterface *iface;
+ const gchar *file;
+ const gchar *name;
+ gchar *abs_filename;
+ gint cache_size;
+ gint page_size;
+ gboolean add_functions;
} TrackerDBDefinition;
static TrackerDBDefinition dbs[] = {
{ TRACKER_DB_COMMON,
TRACKER_DB_LOCATION_USER_DATA_DIR,
+ NULL,
"common.db",
"common",
NULL,
@@ -60,6 +66,7 @@
FALSE },
{ TRACKER_DB_CACHE,
TRACKER_DB_LOCATION_SYS_TMP_ROOT_DIR,
+ NULL,
"cache.db",
"cache",
NULL,
@@ -68,6 +75,7 @@
FALSE },
{ TRACKER_DB_FILE_METADATA,
TRACKER_DB_LOCATION_DATA_DIR,
+ NULL,
"file-meta.db",
"file-meta",
NULL,
@@ -76,6 +84,7 @@
TRUE },
{ TRACKER_DB_FILE_CONTENTS,
TRACKER_DB_LOCATION_DATA_DIR,
+ NULL,
"file-contents.db",
"file-contents",
NULL,
@@ -84,6 +93,7 @@
FALSE },
{ TRACKER_DB_EMAIL_METADATA,
TRACKER_DB_LOCATION_DATA_DIR,
+ NULL,
"email-meta.db",
"email-meta",
NULL,
@@ -92,6 +102,7 @@
TRUE },
{ TRACKER_DB_EMAIL_CONTENTS,
TRACKER_DB_LOCATION_DATA_DIR,
+ NULL,
"email-contents.db",
"email-contents",
NULL,
@@ -100,6 +111,7 @@
FALSE },
{ TRACKER_DB_XESAM,
TRACKER_DB_LOCATION_DATA_DIR,
+ NULL,
"xesam.db",
"xesam",
NULL,
@@ -108,10 +120,17 @@
TRUE },
};
-static gboolean initialized;
-static gchar *services_dir;
-static gchar *sql_dir;
-static GHashTable *prepared_queries;
+static gboolean db_exec_no_reply (TrackerDBInterface *iface,
+ const gchar *query,
+ ...);
+static TrackerDBInterface *db_interface_create (TrackerDB db,
+ gboolean attach_all);
+
+static gboolean initialized;
+static GHashTable *prepared_queries;
+static gchar *services_dir;
+static gchar *sql_dir;
+static gpointer db_type_enum_class_pointer;
static const gchar *
location_to_directory (TrackerDBLocation location,
@@ -132,13 +151,16 @@
}
void
-configure_database_description (const gchar *data_dir,
- const gchar *user_data_dir,
- const gchar *sys_tmp_root_dir)
+set_up_databases (gboolean attach_all,
+ const gchar *data_dir,
+ const gchar *user_data_dir,
+ const gchar *sys_tmp_root_dir)
{
const gchar *dir;
guint i;
+ g_message ("Setting up all databases");
+
for (i = 0; i < G_N_ELEMENTS (dbs); i++) {
/* Fill absolute path for the database */
dir = location_to_directory (dbs[i].location,
@@ -147,7 +169,10 @@
sys_tmp_root_dir);
dbs[i].abs_filename = g_build_filename (dir, dbs[i].file, NULL);
+ dbs[i].iface = db_interface_create (i, attach_all);
}
+
+ g_message ("Setting up all databases completed");
}
static void
@@ -158,7 +183,7 @@
gchar *path, *content, **queries;
gint i;
- path = tracker_db_manager_get_sql_file (file);
+ path = g_build_filename (sql_dir, file, NULL);
if (!delimiter) {
delimiter = ";";
@@ -176,7 +201,7 @@
tracker_db_interface_execute_query (iface, NULL, queries[i]);
}
- g_message ("Loaded SQL file:'%s'", file);
+ g_message (" Loaded SQL file:'%s'", file);
g_strfreev (queries);
g_free (content);
@@ -194,7 +219,7 @@
gint id, i, j;
key_file = g_key_file_new ();
- service_file = tracker_db_manager_get_service_file (filename);
+ service_file = g_build_filename (services_dir, filename, NULL);
if (!g_key_file_load_from_file (key_file, service_file, G_KEY_FILE_NONE, NULL)) {
g_free (service_file);
@@ -283,7 +308,7 @@
gchar **groups, **keys;
gint i, j, id;
- service_file = tracker_db_manager_get_service_file (filename);
+ service_file = g_build_filename (services_dir, filename, NULL);
key_file = g_key_file_new ();
@@ -430,6 +455,300 @@
g_free (service_file);
}
+static TrackerDBResultSet *
+db_exec_proc (TrackerDBInterface *iface,
+ const gchar *procedure,
+ ...)
+{
+ TrackerDBResultSet *result_set;
+ va_list args;
+
+ va_start (args, procedure);
+ result_set = tracker_db_interface_execute_vprocedure (iface,
+ NULL,
+ procedure,
+ args);
+ va_end (args);
+
+ return result_set;
+}
+
+static gboolean
+db_exec_no_reply (TrackerDBInterface *iface,
+ const gchar *query,
+ ...)
+{
+ TrackerDBResultSet *result_set;
+ va_list args;
+
+ tracker_nfs_lock_obtain ();
+
+ va_start (args, query);
+ result_set = tracker_db_interface_execute_vquery (iface, NULL, query, args);
+ va_end (args);
+
+ if (result_set) {
+ g_object_unref (result_set);
+ }
+
+ tracker_nfs_lock_release ();
+
+ return TRUE;
+}
+
+static void
+load_service_file_xesam_map (TrackerDBInterface *iface,
+ const gchar *db_proc,
+ const gchar *data_to_split,
+ const gchar *data_to_insert)
+{
+ gchar **mappings;
+ gchar **mapping;
+
+ mappings = g_strsplit_set (data_to_split, ";", -1);
+
+ if (!mappings) {
+ return;
+ }
+
+ for (mapping = mappings; *mapping; mapping++) {
+ gchar *esc_value;
+
+ esc_value = tracker_escape_string (*mapping);
+ db_exec_proc (iface,
+ db_proc,
+ data_to_insert,
+ esc_value,
+ NULL);
+ g_free (esc_value);
+ }
+
+ g_strfreev (mappings);
+}
+
+static void
+load_service_file_xesam_insert (TrackerDBInterface *iface,
+ const gchar *sql_format,
+ const gchar *data_to_split,
+ const gchar *data_to_insert)
+{
+ gchar **parents;
+ gchar **parent;
+
+ parents = g_strsplit_set (data_to_split, ";", -1);
+
+ if (!parents) {
+ return;
+ }
+
+ for (parent = parents; *parent; parent++) {
+ gchar *sql;
+
+ sql = g_strdup_printf (sql_format, *parent, data_to_insert);
+ db_exec_no_reply (iface, sql);
+ g_free (sql);
+ }
+
+ g_strfreev (parents);
+}
+
+static void
+load_service_file_xesam_update (TrackerDBInterface *iface,
+ const gchar *sql_format,
+ const gchar *data_to_update,
+ const gchar *data_key,
+ const gchar *data_value)
+{
+ gchar *str;
+ gchar *sql;
+
+ str = tracker_escape_string (data_key);
+ sql = g_strdup_printf (sql_format,
+ data_to_update,
+ str,
+ data_value);
+ db_exec_no_reply (iface, sql);
+ g_free (sql);
+ g_free (str);
+}
+
+static gboolean
+load_service_file_xesam (TrackerDBInterface *iface,
+ const gchar *filename)
+{
+ GKeyFile *key_file;
+ GError *error = NULL;
+ const gchar * const *language_names;
+ gchar **groups;
+ gchar **group;
+ gchar *service_file;
+ gchar *sql;
+ gboolean is_metadata;
+ gboolean is_service;
+ gboolean is_metadata_mapping;
+ gboolean is_service_mapping;
+ gint id;
+
+ const gchar *data_types[] = {
+ "string",
+ "float",
+ "integer",
+ "boolean",
+ "dateTime",
+ "List of strings",
+ "List of Uris",
+ "List of Urls",
+ NULL
+ };
+
+ key_file = g_key_file_new ();
+ service_file = g_build_filename (services_dir, filename, NULL);
+
+ if (!g_key_file_load_from_file (key_file, service_file, G_KEY_FILE_NONE, &error)) {
+ g_critical ("Couldn't load XESAM service file:'%s', %s",
+ filename,
+ error->message);
+ g_clear_error (&error);
+ g_free (service_file);
+ g_key_file_free (key_file);
+
+ return FALSE;
+ }
+
+ g_free (service_file);
+
+ is_metadata = FALSE;
+ is_service = FALSE;
+ is_metadata_mapping = FALSE;
+ is_service_mapping = FALSE;
+
+ if (g_str_has_suffix (filename, ".metadata")) {
+ is_metadata = TRUE;
+ } else if (g_str_has_suffix (filename, ".service")) {
+ is_service = TRUE;
+ } else if (g_str_has_suffix (filename, ".mmapping")) {
+ is_metadata_mapping = TRUE;
+ } else if (g_str_has_suffix (filename, ".smapping")) {
+ is_service_mapping = TRUE;
+ } else {
+ g_warning ("XESAM Service file:'%s' does not a recognised suffix "
+ "('.service', '.metadata', '.mmapping' or '.smapping')",
+ filename);
+ g_key_file_free (key_file);
+ return FALSE;
+ }
+
+ language_names = g_get_language_names ();
+
+ groups = g_key_file_get_groups (key_file, NULL);
+
+ for (group = groups; *group; group++) {
+ gchar *str_id;
+ gchar **keys;
+ gchar **key;
+
+ if (is_metadata) {
+ db_exec_proc (iface,
+ "InsertXesamMetadataType",
+ *group,
+ NULL);
+ id = tracker_db_interface_sqlite_get_last_insert_id (TRACKER_DB_INTERFACE_SQLITE (iface));
+ } else if (is_service) {
+ db_exec_proc (iface,
+ "InsertXesamServiceType",
+ *group,
+ NULL);
+ id = tracker_db_interface_sqlite_get_last_insert_id (TRACKER_DB_INTERFACE_SQLITE (iface));
+ }
+
+ /* Get inserted ID */
+ str_id = tracker_uint_to_string (id);
+ keys = g_key_file_get_keys (key_file, *group, NULL, NULL);
+
+ for (key = keys; *key; key++) {
+ gchar *value;
+
+ value = g_key_file_get_locale_string (key_file,
+ *group,
+ *key,
+ language_names[0],
+ NULL);
+
+ if (!value) {
+ continue;
+ }
+
+ if (strcasecmp (value, "true") == 0) {
+ g_free (value);
+ value = g_strdup ("1");
+ } else if (strcasecmp (value, "false") == 0) {
+ g_free (value);
+ value = g_strdup ("0");
+ }
+
+ if (is_metadata) {
+ if (strcasecmp (*key, "Parents") == 0) {
+ load_service_file_xesam_insert (iface,
+ "INSERT INTO XesamMetadataChildren (Parent, Child) VALUES ('%s', '%s')",
+ value,
+ *group);
+ } else if (strcasecmp (*key, "ValueType") == 0) {
+ gint data_id;
+
+ data_id = tracker_string_in_string_list (value, (gchar **) data_types);
+
+ if (data_id != -1) {
+ sql = g_strdup_printf ("update XesamMetadataTypes set DataTypeID = %d where ID = %s",
+ data_id,
+ str_id);
+ db_exec_no_reply (iface, sql);
+ g_free (sql);
+ }
+ } else {
+ load_service_file_xesam_update (iface,
+ "update XesamMetadataTypes set %s = '%s' where ID = %s",
+ *key,
+ value,
+ str_id);
+ }
+ } else if (is_service) {
+ if (strcasecmp (*key, "Parents") == 0) {
+ load_service_file_xesam_insert (iface,
+ "INSERT INTO XesamServiceChildren (Parent, Child) VALUES ('%s', '%s')",
+ value,
+ *group);
+ } else {
+ load_service_file_xesam_update (iface,
+ "update XesamServiceTypes set %s = '%s' where typeID = %s",
+ *key,
+ value,
+ str_id);
+ }
+ } else if (is_metadata_mapping) {
+ load_service_file_xesam_map (iface,
+ "InsertXesamMetaDataMapping",
+ value,
+ *group);
+ } else {
+ load_service_file_xesam_map (iface,
+ "InsertXesamServiceMapping",
+ value,
+ *group);
+ }
+
+ g_free (value);
+ }
+
+ g_strfreev (keys);
+ g_free (str_id);
+ }
+
+ g_strfreev (groups);
+ g_key_file_free (key_file);
+
+ return TRUE;
+}
+
static gboolean
load_prepared_queries (void)
{
@@ -442,7 +761,7 @@
g_message ("Loading prepared queries...");
- sql_filename = tracker_db_manager_get_sql_file ("sqlite-stored-procs.sql");
+ sql_filename = g_build_filename (sql_dir, "sqlite-stored-procs.sql", NULL);
t = g_timer_new ();
@@ -510,11 +829,11 @@
}
static TrackerField *
-db_manager_row_to_field_def (TrackerDBResultSet *result_set)
+db_row_to_field_def (TrackerDBResultSet *result_set)
{
TrackerField *field_def;
TrackerFieldType field_type;
- gchar *field_name, *name;
+ gchar *id_str, *field_name, *name;
gint weight, id;
gboolean embedded, multiple_values, delimited, filtered, store_metadata;
@@ -533,7 +852,9 @@
9, &store_metadata,
-1);
- tracker_field_set_id (field_def, tracker_int_to_string (id));
+ id_str = tracker_int_to_string (id);
+
+ tracker_field_set_id (field_def, id_str);
tracker_field_set_name (field_def, name);
tracker_field_set_data_type (field_def, field_type);
tracker_field_set_field_name (field_def, field_name);
@@ -544,6 +865,7 @@
tracker_field_set_filtered (field_def, filtered);
tracker_field_set_store_metadata (field_def, store_metadata);
+ g_free (id_str);
g_free (field_name);
g_free (name);
@@ -551,7 +873,7 @@
}
static TrackerService *
-db_manager_row_to_service (TrackerDBResultSet *result_set)
+db_row_to_service (TrackerDBResultSet *result_set)
{
TrackerService *service;
GSList *new_list = NULL;
@@ -586,25 +908,6 @@
tracker_service_set_has_thumbs (service, has_thumbs);
tracker_service_set_content_metadata (service, content_metadata);
-#if 0
- if (g_str_has_prefix (name, "Email") ||
- g_str_has_suffix (name, "Emails")) {
- tracker_service_set_db_type (service, TRACKER_DB_TYPE_EMAIL);
-
- if (tracker->email_service_min == 0 ||
- id < tracker->email_service_min) {
- tracker->email_service_min = id;
- }
-
- if (tracker->email_service_max == 0 ||
- id > tracker->email_service_max) {
- tracker->email_service_max = id;
- }
- } else {
- tracker_service_set_db_type (service, TRACKER_DB_TYPE_DATA);
- }
-#endif
-
tracker_service_set_show_service_files (service, show_service_files);
tracker_service_set_show_service_directories (service, show_service_directories);
@@ -643,9 +946,9 @@
}
static GSList *
-db_manager_mime_query (TrackerDBInterface *iface,
- const gchar *stored_proc,
- gint service_id)
+db_mime_query (TrackerDBInterface *iface,
+ const gchar *stored_proc,
+ gint service_id)
{
TrackerDBResultSet *result_set;
GSList *result = NULL;
@@ -676,25 +979,25 @@
}
static GSList *
-db_manager_get_mimes_for_service_id (TrackerDBInterface *iface,
- gint service_id)
+db_get_mimes_for_service_id (TrackerDBInterface *iface,
+ gint service_id)
{
- return db_manager_mime_query (iface, "GetMimeForServiceId", service_id);
+ return db_mime_query (iface, "GetMimeForServiceId", service_id);
}
static GSList *
-db_manager_get_mime_prefixes_for_service_id (TrackerDBInterface *iface,
- gint service_id)
+db_get_mime_prefixes_for_service_id (TrackerDBInterface *iface,
+ gint service_id)
{
- return db_manager_mime_query (iface, "GetMimePrefixForServiceId", service_id);
+ return db_mime_query (iface, "GetMimePrefixForServiceId", service_id);
}
/* Sqlite utf-8 user defined collation sequence */
static gint
-db_manager_utf8_collation_func (gchar *str1,
- gint len1,
- gchar *str2,
- int len2)
+utf8_collation_func (gchar *str1,
+ gint len1,
+ gchar *str2,
+ int len2)
{
gchar *word1, *word2;
gint result;
@@ -806,11 +1109,126 @@
return result;
}
+static gchar *
+function_uncompress_string (const gchar *ptr,
+ gint size,
+ gint *uncompressed_size)
+{
+ z_stream zs;
+ gchar *buf, *swap;
+ unsigned char obuf[ZLIBBUFSIZ];
+ gint rv, asiz, bsiz, osiz;
+
+ zs.zalloc = Z_NULL;
+ zs.zfree = Z_NULL;
+ zs.opaque = Z_NULL;
+
+ if (inflateInit2 (&zs, 15) != Z_OK) {
+ return NULL;
+ }
+
+ asiz = size * 2 + 16;
+
+ if (asiz < ZLIBBUFSIZ) {
+ asiz = ZLIBBUFSIZ;
+ }
+
+ if (!(buf = malloc (asiz))) {
+ inflateEnd (&zs);
+ return NULL;
+ }
+
+ bsiz = 0;
+ zs.next_in = (unsigned char *)ptr;
+ zs.avail_in = size;
+ zs.next_out = obuf;
+ zs.avail_out = ZLIBBUFSIZ;
+
+ while ((rv = inflate (&zs, Z_NO_FLUSH)) == Z_OK) {
+ osiz = ZLIBBUFSIZ - zs.avail_out;
+
+ if (bsiz + osiz >= asiz) {
+ asiz = asiz * 2 + osiz;
+
+ if (!(swap = realloc (buf, asiz))) {
+ free (buf);
+ inflateEnd (&zs);
+ return NULL;
+ }
+
+ buf = swap;
+ }
+
+ memcpy (buf + bsiz, obuf, osiz);
+ bsiz += osiz;
+ zs.next_out = obuf;
+ zs.avail_out = ZLIBBUFSIZ;
+ }
+
+ if (rv != Z_STREAM_END) {
+ free (buf);
+ inflateEnd (&zs);
+ return NULL;
+ }
+ osiz = ZLIBBUFSIZ - zs.avail_out;
+
+ if (bsiz + osiz >= asiz) {
+ asiz = asiz * 2 + osiz;
+
+ if (!(swap = realloc (buf, asiz))) {
+ free (buf);
+ inflateEnd (&zs);
+ return NULL;
+ }
+
+ buf = swap;
+ }
+
+ memcpy (buf + bsiz, obuf, osiz);
+ bsiz += osiz;
+ buf[bsiz] = '\0';
+ *uncompressed_size = bsiz;
+ inflateEnd (&zs);
+
+ return buf;
+}
+
+static GValue
+function_uncompress (TrackerDBInterface *interface,
+ gint argc,
+ GValue values[])
+{
+ GByteArray *array;
+ GValue result = { 0, };
+ gchar *output;
+ gint len;
+
+ array = g_value_get_boxed (&values[0]);
+
+ if (!array) {
+ return result;
+ }
+
+ output = function_uncompress_string ((const gchar *) array->data,
+ array->len,
+ &len);
+
+ if (!output) {
+ g_warning ("Uncompress failed");
+ return result;
+ }
+
+ g_value_init (&result, G_TYPE_STRING);
+ g_value_take_string (&result, output);
+
+ return result;
+}
+
static void
-db_manager_set_params (TrackerDBInterface *iface,
- gint cache_size,
- gint page_size,
- gboolean add_functions)
+db_set_params (TrackerDBInterface *iface,
+ gint cache_size,
+ gint page_size,
+ gboolean add_functions)
{
tracker_db_interface_execute_query (iface, NULL, "PRAGMA synchronous = NORMAL;");
tracker_db_interface_execute_query (iface, NULL, "PRAGMA count_changes = 0;");
@@ -819,15 +1237,19 @@
tracker_db_interface_execute_query (iface, NULL, "PRAGMA auto_vacuum = 0;");
if (page_size != TRACKER_DB_PAGE_SIZE_DONT_SET) {
+ g_message (" Setting page size to %d", page_size);
tracker_db_interface_execute_query (iface, NULL, "PRAGMA page_size = %d", page_size);
}
tracker_db_interface_execute_query (iface, NULL, "PRAGMA cache_size = %d", cache_size);
+ g_message (" Setting cache size to %d", cache_size);
if (add_functions) {
+ g_message (" Adding functions (FormatDate, etc)");
+
if (!tracker_db_interface_sqlite_set_collation_function (TRACKER_DB_INTERFACE_SQLITE (iface),
"UTF8",
- db_manager_utf8_collation_func)) {
+ utf8_collation_func)) {
g_critical ("Collation sequence failed");
}
@@ -856,7 +1278,7 @@
}
static void
-db_manager_get_static_data (TrackerDBInterface *iface)
+db_get_static_data (TrackerDBInterface *iface)
{
TrackerDBResultSet *result_set;
@@ -875,7 +1297,7 @@
TrackerField *def;
GSList *child_ids = NULL;
- def = db_manager_row_to_field_def (result_set);
+ def = db_row_to_field_def (result_set);
result_set2 = tracker_db_interface_execute_procedure (iface,
NULL,
@@ -921,11 +1343,11 @@
while (valid) {
TrackerService *service;
- GSList *mimes, *mime_prefixes;
- const gchar *name;
- gint id;
+ GSList *mimes, *mime_prefixes;
+ const gchar *name;
+ gint id;
- service = db_manager_row_to_service (result_set);
+ service = db_row_to_service (result_set);
if (!service) {
continue;
@@ -934,8 +1356,8 @@
id = tracker_service_get_id (service);
name = tracker_service_get_name (service);
- mimes = db_manager_get_mimes_for_service_id (iface, id);
- mime_prefixes = db_manager_get_mime_prefixes_for_service_id (iface, id);
+ mimes = db_get_mimes_for_service_id (iface, id);
+ mime_prefixes = db_get_mime_prefixes_for_service_id (iface, id);
g_message ("Adding service:'%s' with id:%d and mimes:%d",
name,
@@ -957,93 +1379,461 @@
}
}
-TrackerDBInterface *
-db_manager_get_common (void)
+static const gchar *
+db_type_to_string (TrackerDB db)
{
- TrackerDBInterface *interface;
+ GType type;
+ GEnumClass *enum_class;
+ GEnumValue *enum_value;
+
+ type = tracker_db_get_type ();
+ enum_class = G_ENUM_CLASS (g_type_class_peek (type));
+ enum_value = g_enum_get_value (enum_class, db);
+
+ if (!enum_value) {
+ return "unknown";
+ }
+
+ return enum_value->value_nick;
+}
+
+static TrackerDBInterface *
+db_interface_get (TrackerDB type,
+ gboolean attach_all,
+ gboolean *create)
+{
+ TrackerDBInterface *iface;
const gchar *path;
- gboolean create = FALSE;
- path = tracker_db_manager_get_file (TRACKER_DB_COMMON);
+ path = tracker_db_manager_get_file (type);
if (!g_file_test (path, G_FILE_TEST_EXISTS)) {
- create = TRUE;
+ *create = TRUE;
+ } else {
+ *create = FALSE;
+ }
+
+ g_message ("%s database... '%s' (%s)",
+ *create ? "Creating" : "Loading",
+ path,
+ db_type_to_string (type));
+
+ iface = tracker_db_interface_sqlite_new (path);
+ tracker_db_interface_set_procedure_table (iface, prepared_queries);
+
+ /* FIXME: Shouldn't we do this for common/cache dbs too? */
+ if (type != TRACKER_DB_COMMON &&
+ type != TRACKER_DB_CACHE) {
+ db_set_params (iface,
+ dbs[type].cache_size,
+ dbs[type].page_size,
+ dbs[type].add_functions);
+ }
+
+ if (attach_all) {
+ g_message (" Attaching to current DB connection");
+ db_exec_no_reply (iface,
+ "ATTACH '%s' as %s",
+ dbs[type].abs_filename,
+ dbs[type].name);
}
- interface = tracker_db_interface_sqlite_new (path);
- tracker_db_interface_set_procedure_table (interface, prepared_queries);
+ return iface;
+}
+
+static TrackerDBInterface *
+db_interface_get_common (gboolean attach_all)
+{
+ TrackerDBInterface *iface;
+ gboolean create;
+
+ iface = db_interface_get (TRACKER_DB_COMMON,
+ attach_all,
+ &create);
if (create) {
/* Create tables */
- load_sql_file (interface, "sqlite-tracker.sql", NULL);
- load_sql_file (interface, "sqlite-metadata.sql", NULL);
- load_sql_file (interface, "sqlite-service-types.sql", NULL);
+ load_sql_file (iface, "sqlite-tracker.sql", NULL);
+ load_sql_file (iface, "sqlite-metadata.sql", NULL);
+ load_sql_file (iface, "sqlite-service-types.sql", NULL);
/* Load services info */
- load_service_file (interface, "default.service");
+ load_service_file (iface, "default.service");
/* Load metadata info */
- load_metadata_file (interface, "default.metadata");
- load_metadata_file (interface, "file.metadata");
- load_metadata_file (interface, "audio.metadata");
- load_metadata_file (interface, "application.metadata");
- load_metadata_file (interface, "document.metadata");
- load_metadata_file (interface, "email.metadata");
- load_metadata_file (interface, "image.metadata");
- load_metadata_file (interface, "video.metadata");
+ load_metadata_file (iface, "default.metadata");
+ load_metadata_file (iface, "file.metadata");
+ load_metadata_file (iface, "audio.metadata");
+ load_metadata_file (iface, "application.metadata");
+ load_metadata_file (iface, "document.metadata");
+ load_metadata_file (iface, "email.metadata");
+ load_metadata_file (iface, "image.metadata");
+ load_metadata_file (iface, "video.metadata");
+
+ db_exec_no_reply (iface, "ANALYZE");
}
/* Load static data into tracker ontology */
- db_manager_get_static_data (interface);
+ db_get_static_data (iface);
- return interface;
+ return iface;
}
-TrackerDBInterface *
-db_manager_get_file_metadata (void)
+static TrackerDBInterface *
+db_interface_get_cache (gboolean attach_all)
{
- TrackerDBInterface *interface;
- const gchar *path;
- gboolean create = FALSE;
+ TrackerDBInterface *iface;
+ gboolean create;
- path = tracker_db_manager_get_file (TRACKER_DB_FILE_METADATA);
+ iface = db_interface_get (TRACKER_DB_CACHE,
+ attach_all,
+ &create);
- if (!g_file_test (path, G_FILE_TEST_EXISTS)) {
- create = TRUE;
+ if (create) {
+ load_sql_file (iface, "sqlite-cache.sql", NULL);
+
+ db_exec_no_reply (iface, "ANALYZE");
}
- interface = tracker_db_interface_sqlite_new (path);
- tracker_db_interface_set_procedure_table (interface, prepared_queries);
+ return iface;
+}
+
+static TrackerDBInterface *
+db_interface_get_file_metadata (gboolean attach_all)
+{
+ TrackerDBInterface *iface;
+ gboolean create;
- db_manager_set_params (interface,
- tracker_db_manager_get_cache_size (TRACKER_DB_FILE_METADATA),
- tracker_db_manager_get_page_size (TRACKER_DB_FILE_METADATA),
- tracker_db_manager_get_add_functions (TRACKER_DB_FILE_METADATA));
+ iface = db_interface_get (TRACKER_DB_FILE_METADATA,
+ attach_all,
+ &create);
if (create) {
- load_sql_file (interface, "sqlite-service.sql", NULL);
- load_sql_file (interface, "sqlite-service-triggers.sql", "!");
+ load_sql_file (iface, "sqlite-service.sql", NULL);
+ load_sql_file (iface, "sqlite-service-triggers.sql", "!");
+
+ db_exec_no_reply (iface, "ANALYZE");
}
- return interface;
+ return iface;
}
-const gchar *
-db_manager_db_type_to_string (TrackerDB db)
+static TrackerDBInterface *
+db_interface_get_file_contents (gboolean attach_all)
{
- GType type;
- GEnumClass *enum_class;
- GEnumValue *enum_value;
+ TrackerDBInterface *iface;
+ gboolean create;
- type = tracker_db_get_type ();
- enum_class = G_ENUM_CLASS (g_type_class_peek (type));
- enum_value = g_enum_get_value (enum_class, db);
-
- if (!enum_value) {
- return "unknown";
- }
+ iface = db_interface_get (TRACKER_DB_FILE_CONTENTS,
+ attach_all,
+ &create);
- return enum_value->value_nick;
+ if (create) {
+ load_sql_file (iface, "sqlite-contents.sql", NULL);
+
+ db_exec_no_reply (iface, "ANALYZE");
+ }
+
+ tracker_db_interface_sqlite_create_function (iface,
+ "uncompress",
+ function_uncompress,
+ 1);
+
+ return iface;
+}
+
+static TrackerDBInterface *
+db_interface_get_email_metadata (gboolean attach_all)
+{
+ TrackerDBInterface *iface;
+ gboolean create;
+
+ iface = db_interface_get (TRACKER_DB_EMAIL_METADATA,
+ attach_all,
+ &create);
+
+ if (create) {
+ load_sql_file (iface, "sqlite-service.sql", NULL);
+ load_sql_file (iface, "sqlite-email.sql", NULL);
+ load_sql_file (iface, "sqlite-service-triggers.sql", "!");
+
+ db_exec_no_reply (iface, "ANALYZE");
+ }
+
+ return iface;
+}
+
+static TrackerDBInterface *
+db_interface_get_email_contents (gboolean attach_all)
+{
+ TrackerDBInterface *iface;
+ gboolean create;
+
+ iface = db_interface_get (TRACKER_DB_EMAIL_CONTENTS,
+ attach_all,
+ &create);
+
+ if (create) {
+ load_sql_file (iface, "sqlite-contents.sql", NULL);
+
+ db_exec_no_reply (iface, "ANALYZE");
+ }
+
+ tracker_db_interface_sqlite_create_function (iface,
+ "uncompress",
+ function_uncompress,
+ 1);
+
+ return iface;
+}
+
+static gboolean
+db_xesam_get_service_mapping (TrackerDBInterface *iface,
+ const gchar *type,
+ GList **list)
+{
+ TrackerDBResultSet *result_set;
+ gboolean valid = TRUE;
+
+ result_set = db_exec_proc (iface,
+ "GetXesamServiceMappings",
+ type,
+ NULL);
+
+ if (result_set) {
+ while (valid) {
+ gchar *st;
+
+ tracker_db_result_set_get (result_set, 0, &st, -1);
+ if (strcmp (st, " ") != 0) {
+ *list = g_list_prepend (*list, g_strdup (st));
+ }
+
+ valid = tracker_db_result_set_iter_next (result_set);
+ g_free (st);
+ }
+
+ *list = g_list_reverse (*list);
+ g_object_unref (result_set);
+ }
+
+ result_set = db_exec_proc (iface,
+ "GetXesamServiceChildren",
+ type,
+ NULL);
+ valid = TRUE;
+
+ if (result_set) {
+ while (valid) {
+ gchar *st;
+
+ tracker_db_result_set_get (result_set, 0, &st, -1);
+ db_xesam_get_service_mapping (iface, st, list);
+
+ valid = tracker_db_result_set_iter_next (result_set);
+ g_free (st);
+ }
+
+ g_object_unref (result_set);
+ }
+
+ return TRUE;
+}
+
+static gboolean
+db_xesam_get_metadata_mapping (TrackerDBInterface *iface,
+ const gchar *type,
+ GList **list)
+{
+ TrackerDBResultSet *result_set;
+ gboolean valid = TRUE;
+
+ result_set = db_exec_proc (iface,
+ "GetXesamMetaDataMappings",
+ type,
+ NULL);
+
+ if (result_set) {
+ while (valid) {
+ gchar *st;
+
+ tracker_db_result_set_get (result_set, 0, &st, -1);
+
+ if (strcmp(st, " ") != 0) {
+ *list = g_list_prepend (*list, g_strdup (st));
+ }
+
+ valid = tracker_db_result_set_iter_next (result_set);
+ g_free (st);
+ }
+
+ *list = g_list_reverse (*list);
+ g_object_unref (result_set);
+ }
+
+ result_set = db_exec_proc (iface,
+ "GetXesamMetaDataChildren",
+ type,
+ NULL);
+ valid = TRUE;
+
+ if (result_set) {
+ while (valid) {
+ gchar *st;
+
+ tracker_db_result_set_get (result_set, 0, &st, -1);
+ db_xesam_get_service_mapping (iface, st ,list);
+
+ valid = tracker_db_result_set_iter_next (result_set);
+ g_free (st);
+ }
+
+ g_object_unref (result_set);
+ }
+
+ return TRUE;
+}
+
+static gboolean
+db_xesam_create_lookup (TrackerDBInterface *iface)
+{
+ TrackerDBResultSet *result_set;
+ gboolean valid;
+
+ valid = TRUE;
+
+ result_set = db_exec_proc (iface,
+ "GetXesamServiceTypes",
+ NULL);
+
+ if (result_set) {
+ while (valid) {
+ GList *list = NULL;
+ GList *iter = NULL;
+ gchar *st;
+
+ tracker_db_result_set_get (result_set, 0, &st, -1);
+ db_xesam_get_service_mapping (iface, st, &list);
+
+ iter = g_list_first (list);
+
+ while (iter) {
+ db_exec_proc (iface,
+ "InsertXesamServiceLookup",
+ st,
+ iter->data,
+ NULL);
+ g_free (iter->data);
+ iter = g_list_next (iter);
+ }
+
+ g_list_free (list);
+
+ valid = tracker_db_result_set_iter_next (result_set);
+ g_free (st);
+ }
+ }
+
+ g_object_unref (result_set);
+
+ valid = TRUE;
+ result_set = db_exec_proc (iface,
+ "GetXesamMetaDataTypes",
+ NULL);
+
+ if (result_set) {
+ while (valid) {
+ GList *list = NULL;
+ GList *iter = NULL;
+ gchar *st;
+
+ tracker_db_result_set_get (result_set, 0, &st, -1);
+ db_xesam_get_metadata_mapping (iface, st, &list);
+
+ iter = g_list_first (list);
+ while (iter) {
+ db_exec_proc (iface,
+ "InsertXesamMetaDataLookup",
+ st,
+ iter->data,
+ NULL);
+ g_free (iter->data);
+ iter = g_list_next (iter);
+ }
+
+ g_list_free (list);
+
+ valid = tracker_db_result_set_iter_next (result_set);
+ g_free (st);
+ }
+ }
+
+ g_object_unref (result_set);
+
+ return TRUE;
+}
+
+static TrackerDBInterface *
+db_interface_get_xesam (gboolean attach_all)
+{
+ TrackerDBInterface *iface;
+ gboolean create;
+
+ iface = db_interface_get (TRACKER_DB_XESAM,
+ attach_all,
+ &create);
+
+ if (create) {
+ load_sql_file (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");
+
+ db_xesam_create_lookup (iface);
+
+ db_exec_no_reply (iface, "ANALYZE");
+ }
+
+ return iface;
+}
+
+static TrackerDBInterface *
+db_interface_create (TrackerDB db,
+ gboolean attach_all)
+{
+ switch (db) {
+ case TRACKER_DB_COMMON:
+ return db_interface_get_common (attach_all);
+
+ case TRACKER_DB_CACHE:
+ return db_interface_get_cache (attach_all);
+
+ case TRACKER_DB_FILE_METADATA:
+ return db_interface_get_file_metadata (attach_all);
+
+ case TRACKER_DB_FILE_CONTENTS:
+ return db_interface_get_file_contents (attach_all);
+
+ case TRACKER_DB_EMAIL_METADATA:
+ return db_interface_get_email_metadata (attach_all);
+
+ case TRACKER_DB_EMAIL_CONTENTS:
+ return db_interface_get_email_contents (attach_all);
+
+ case TRACKER_DB_XESAM:
+ return db_interface_get_xesam (attach_all);
+ }
+
+ g_critical ("This TrackerDB type:%d->'%s' has no interface set up yet!!",
+ db,
+ db_type_to_string (db));
+
+ return NULL;
}
GType
@@ -1061,33 +1851,36 @@
"cache" },
{ TRACKER_DB_FILE_METADATA,
"TRACKER_DB_FILE_METADATA",
- "file-meta" },
+ "file metadata" },
{ TRACKER_DB_FILE_CONTENTS,
"TRACKER_DB_FILE_CONTENTS",
- "file-contents" },
+ "file contents" },
{ TRACKER_DB_EMAIL_METADATA,
"TRACKER_DB_EMAIL_METADATA",
- "email-meta" },
+ "email metadata" },
{ TRACKER_DB_EMAIL_CONTENTS,
"TRACKER_DB_EMAIL_CONTENTS",
- "email-contents" },
+ "email contents" },
{ TRACKER_DB_XESAM,
"TRACKER_DB_XESAM",
"xesam" },
{ 0, NULL, NULL }
};
- etype = g_enum_register_static ("TrackerDBType", values);
+ etype = g_enum_register_static ("TrackerDB", values);
}
return etype;
}
void
-tracker_db_manager_init (const gchar *data_dir,
+tracker_db_manager_init (gboolean attach_all_dbs,
+ const gchar *data_dir,
const gchar *user_data_dir,
const gchar *sys_tmp_dir)
{
+ GType etype;
+
g_return_if_fail (data_dir != NULL);
g_return_if_fail (user_data_dir != NULL);
g_return_if_fail (sys_tmp_dir != NULL);
@@ -1096,6 +1889,20 @@
return;
}
+
+ /* Since we don't reference this enum anywhere, we do
+ * it here to make sure it exists when we call
+ * g_type_class_peek(). This wouldn't be necessary if
+ * it was a param in a GObject for example.
+ *
+ * This does mean that we are leaking by 1 reference
+ * here and should clean it up, but it doesn't grow so
+ * this is acceptable.
+ */
+ etype = tracker_db_get_type ();
+ db_type_enum_class_pointer = g_type_class_ref (etype);
+
+ /* Set up locations */
services_dir = g_build_filename (SHAREDIR,
"tracker",
"services",
@@ -1103,18 +1910,22 @@
sql_dir = g_build_filename (SHAREDIR,
"tracker",
NULL);
-
- configure_database_description (data_dir,
- user_data_dir,
- sys_tmp_dir);
-
+
+ /* Add prepared queries */
prepared_queries = g_hash_table_new_full (g_str_hash,
g_str_equal,
g_free,
g_free);
-
+
load_prepared_queries ();
-
+
+ /* Configure database locations and interfaces */
+ set_up_databases (attach_all_dbs,
+ data_dir,
+ user_data_dir,
+ sys_tmp_dir);
+
+
initialized = TRUE;
}
@@ -1127,18 +1938,34 @@
return;
}
- g_hash_table_unref (prepared_queries);
- prepared_queries = NULL;
-
for (i = 0; i < G_N_ELEMENTS (dbs); i++) {
if (dbs[i].abs_filename) {
g_free (dbs[i].abs_filename);
+ dbs[i].abs_filename = NULL;
+
+ g_object_unref (dbs[i].iface);
+ dbs[i].iface = NULL;
}
}
+ g_hash_table_unref (prepared_queries);
+ prepared_queries = NULL;
+
g_free (services_dir);
g_free (sql_dir);
+ /* Since we don't reference this enum anywhere, we do
+ * it here to make sure it exists when we call
+ * g_type_class_peek(). This wouldn't be necessary if
+ * it was a param in a GObject for example.
+ *
+ * This does mean that we are leaking by 1 reference
+ * here and should clean it up, but it doesn't grow so
+ * this is acceptable.
+ */
+ g_type_class_unref (db_type_enum_class_pointer);
+ db_type_enum_class_pointer = NULL;
+
initialized = FALSE;
}
@@ -1148,72 +1975,62 @@
return dbs[db].abs_filename;
}
-gboolean
-tracker_db_manager_file_exists (TrackerDB db)
-{
- return g_file_test (dbs[db].abs_filename, G_FILE_TEST_IS_REGULAR);
-}
-
-gchar *
-tracker_db_manager_get_service_file (const gchar *service_file)
+TrackerDBInterface *
+tracker_db_manager_get_db_interface (TrackerDB db)
{
- g_return_val_if_fail (service_file != NULL, NULL);
-
- return g_build_filename (services_dir, service_file, NULL);
+ return dbs[db].iface;
}
-gchar *
-tracker_db_manager_get_sql_file (const gchar *sql_file)
+TrackerDBInterface *
+tracker_db_manager_get_db_interface_by_service (const gchar *service,
+ gboolean content)
{
- g_return_val_if_fail (sql_file != NULL, NULL);
+ TrackerDBType type;
+ TrackerDB db;
- return g_build_filename (sql_dir, sql_file, NULL);
-}
+ g_return_val_if_fail (service != NULL, NULL);
-gint
-tracker_db_manager_get_cache_size (TrackerDB db)
-{
- return dbs[db].cache_size;
-}
+ type = tracker_ontology_get_db_for_service_type (service);
-gint
-tracker_db_manager_get_page_size (TrackerDB db)
-{
- return dbs[db].page_size;
-}
+ switch (type) {
+ case TRACKER_DB_TYPE_EMAIL:
+ if (G_UNLIKELY (content)) {
+ db = TRACKER_DB_EMAIL_CONTENTS;
+ } else {
+ db = TRACKER_DB_EMAIL_METADATA;
+ }
+ break;
-gboolean
-tracker_db_manager_get_add_functions (TrackerDB db)
-{
- return dbs[db].add_functions;
-}
+ default:
+ if (G_UNLIKELY (content)) {
+ db = TRACKER_DB_FILE_CONTENTS;
+ } else {
+ db = TRACKER_DB_FILE_METADATA;
+ }
+ break;
+ }
-const gchar *
-tracker_db_manager_get_name (TrackerDB db)
-{
- return dbs[db].name;
+ return tracker_db_manager_get_db_interface (db);
}
TrackerDBInterface *
-tracker_db_manager_get_db_interface (TrackerDB db)
+tracker_db_manager_get_db_interface_content (TrackerDBInterface *iface)
{
- switch (db) {
- case TRACKER_DB_COMMON:
- return db_manager_get_common ();
+ guint i;
- case TRACKER_DB_CACHE:
- case TRACKER_DB_FILE_METADATA:
- return db_manager_get_file_metadata ();
+ g_return_val_if_fail (TRACKER_IS_DB_INTERFACE (iface), NULL);
- case TRACKER_DB_FILE_CONTENTS:
- case TRACKER_DB_EMAIL_METADATA:
- case TRACKER_DB_EMAIL_CONTENTS:
- case TRACKER_DB_XESAM:
- g_critical ("This TrackerDB type:%d->'%s' has no interface set up yet!!",
- db,
- db_manager_db_type_to_string (db));
- break;
- }
+ for (i = 0; i < G_N_ELEMENTS (dbs); i++) {
+ if (dbs[i].iface != iface) {
+ continue;
+ }
+
+ if (i == TRACKER_DB_FILE_METADATA) {
+ return dbs[TRACKER_DB_FILE_CONTENTS].iface;
+ } else if (i == TRACKER_DB_EMAIL_METADATA) {
+ return dbs[TRACKER_DB_EMAIL_CONTENTS].iface;
+ }
+ }
return NULL;
}
Modified: branches/xesam-support/src/libtracker-db/tracker-db-manager.h
==============================================================================
--- branches/xesam-support/src/libtracker-db/tracker-db-manager.h (original)
+++ branches/xesam-support/src/libtracker-db/tracker-db-manager.h Mon Jun 9 15:41:07 2008
@@ -42,24 +42,22 @@
TRACKER_DB_XESAM,
} TrackerDB;
-GType tracker_db_get_type (void) G_GNUC_CONST;
+GType tracker_db_get_type (void) G_GNUC_CONST;
-void tracker_db_manager_init (const gchar *data_dir,
- const gchar *user_data_dir,
- const gchar *sys_tmp_root_dir);
-void tracker_db_manager_shutdown (void);
-
-const gchar *tracker_db_manager_get_file (TrackerDB db);
-gboolean tracker_db_manager_file_exists (TrackerDB db);
-gchar * tracker_db_manager_get_service_file (const gchar *service_file);
-gchar * tracker_db_manager_get_sql_file (const gchar *sql_file);
-gint tracker_db_manager_get_cache_size (TrackerDB db);
-gint tracker_db_manager_get_page_size (TrackerDB db);
-gboolean tracker_db_manager_get_add_functions (TrackerDB db);
-const gchar *tracker_db_manager_get_name (TrackerDB db);
+void tracker_db_manager_init (gboolean attach_all_dbs,
+ const gchar *data_dir,
+ const gchar *user_data_dir,
+ const gchar *sys_tmp_root_dir);
+void tracker_db_manager_shutdown (void);
+const gchar *tracker_db_manager_get_file (TrackerDB db);
+TrackerDBInterface *
+ tracker_db_manager_get_db_interface (TrackerDB db);
+TrackerDBInterface *
+ tracker_db_manager_get_db_interface_by_service (const gchar *service,
+ gboolean content);
TrackerDBInterface *
- tracker_db_manager_get_db_interface (TrackerDB db);
+ tracker_db_manager_get_db_interface_content (TrackerDBInterface *iface);
G_END_DECLS
Modified: branches/xesam-support/src/tracker-indexer/tracker-main.c
==============================================================================
--- branches/xesam-support/src/tracker-indexer/tracker-main.c (original)
+++ branches/xesam-support/src/tracker-indexer/tracker-main.c Mon Jun 9 15:41:07 2008
@@ -163,7 +163,7 @@
sys_tmp_dir = g_build_filename (g_get_tmp_dir (), filename, NULL);
g_free (filename);
- tracker_db_manager_init (data_dir, user_data_dir, sys_tmp_dir);
+ tracker_db_manager_init (FALSE, data_dir, user_data_dir, sys_tmp_dir);
g_free (data_dir);
g_free (user_data_dir);
Modified: branches/xesam-support/src/trackerd/Makefile.am
==============================================================================
--- branches/xesam-support/src/trackerd/Makefile.am (original)
+++ branches/xesam-support/src/trackerd/Makefile.am Mon Jun 9 15:41:07 2008
@@ -78,8 +78,6 @@
tracker-db.h \
tracker-db-email.c \
tracker-db-email.h \
- tracker-db-sqlite.c \
- tracker-db-sqlite.h \
tracker-dbus.c \
tracker-dbus.h \
tracker-email.c \
Modified: branches/xesam-support/src/trackerd/tracker-daemon.c
==============================================================================
--- branches/xesam-support/src/trackerd/tracker-daemon.c (original)
+++ branches/xesam-support/src/trackerd/tracker-daemon.c Mon Jun 9 15:41:07 2008
@@ -29,6 +29,7 @@
#include <libtracker-common/tracker-dbus.h>
#include <libtracker-db/tracker-db-dbus.h>
+#include <libtracker-db/tracker-db-manager.h>
#include "tracker-dbus.h"
#include "tracker-daemon.h"
@@ -40,14 +41,12 @@
typedef struct {
DBusGProxy *fd_proxy;
- DBConnection *db_con;
TrackerConfig *config;
Tracker *tracker;
} TrackerDaemonPriv;
enum {
PROP_0,
- PROP_DB_CONNECTION,
PROP_CONFIG,
PROP_TRACKER
};
@@ -80,12 +79,6 @@
object_class->set_property = daemon_set_property;
g_object_class_install_property (object_class,
- PROP_DB_CONNECTION,
- g_param_spec_pointer ("db-connection",
- "DB connection",
- "DBConnection object use for transactions",
- G_PARAM_WRITABLE));
- g_object_class_install_property (object_class,
PROP_CONFIG,
g_param_spec_object ("config",
"Config",
@@ -177,10 +170,6 @@
priv = GET_PRIV (object);
switch (param_id) {
- case PROP_DB_CONNECTION:
- tracker_daemon_set_db_connection (TRACKER_DAEMON (object),
- g_value_get_pointer (value));
- break;
case PROP_CONFIG:
tracker_daemon_set_config (TRACKER_DAEMON (object),
g_value_get_object (value));
@@ -197,17 +186,14 @@
}
TrackerDaemon *
-tracker_daemon_new (DBConnection *db_con,
- TrackerConfig *config,
+tracker_daemon_new (TrackerConfig *config,
Tracker *tracker)
{
TrackerDaemon *object;
- g_return_val_if_fail (db_con != NULL, NULL);
g_return_val_if_fail (TRACKER_IS_CONFIG (config), NULL);
object = g_object_new (TRACKER_TYPE_DAEMON,
- "db-connection", db_con,
"config", config,
"tracker", tracker,
NULL);
@@ -216,22 +202,6 @@
}
void
-tracker_daemon_set_db_connection (TrackerDaemon *object,
- DBConnection *db_con)
-{
- TrackerDaemonPriv *priv;
-
- g_return_if_fail (TRACKER_IS_DAEMON (object));
- g_return_if_fail (db_con != NULL);
-
- priv = GET_PRIV (object);
-
- priv->db_con = db_con;
-
- g_object_notify (G_OBJECT (object), "db-connection");
-}
-
-void
tracker_daemon_set_config (TrackerDaemon *object,
TrackerConfig *config)
{
@@ -314,7 +284,7 @@
GError **error)
{
TrackerDaemonPriv *priv;
- guint request_id;
+ guint request_id;
request_id = tracker_dbus_get_next_request_id ();
@@ -338,10 +308,9 @@
GHashTable **values,
GError **error)
{
- TrackerDaemonPriv *priv;
- TrackerDBResultSet *result_set;
- guint request_id;
- DBConnection *db_con;
+ TrackerDBInterface *iface;
+ TrackerDBResultSet *result_set;
+ guint request_id;
/* FIXME: Note, the main_services_only variable is redundant */
@@ -349,14 +318,11 @@
tracker_dbus_return_val_if_fail (values != NULL, FALSE, error);
- priv = GET_PRIV (object);
-
- db_con = priv->db_con;
-
tracker_dbus_request_new (request_id,
"DBus request to get daemon services");
- result_set = tracker_exec_proc (db_con, "GetServices", 0);
+ iface = tracker_db_manager_get_db_interface (TRACKER_DB_FILE_METADATA);
+ result_set = tracker_db_exec_proc (iface, "GetServices", 0);
*values = tracker_dbus_query_result_to_hash_table (result_set);
if (result_set) {
@@ -373,23 +339,20 @@
GPtrArray **values,
GError **error)
{
- TrackerDaemonPriv *priv;
- TrackerDBResultSet *result_set;
- guint request_id;
- DBConnection *db_con;
+ TrackerDBInterface *iface;
+ TrackerDBResultSet *result_set;
+ guint request_id;
request_id = tracker_dbus_get_next_request_id ();
tracker_dbus_return_val_if_fail (values != NULL, FALSE, error);
- priv = GET_PRIV (object);
-
- db_con = priv->db_con;
-
tracker_dbus_request_new (request_id,
"DBus request to get daemon service stats");
- result_set = tracker_exec_proc (db_con, "GetStats", 0);
+ iface = tracker_db_manager_get_db_interface (TRACKER_DB_FILE_METADATA);
+
+ result_set = tracker_db_exec_proc (iface, "GetStats", 0);
*values = tracker_dbus_query_result_to_ptr_array (result_set);
if (result_set) {
@@ -408,8 +371,8 @@
GError **error)
{
TrackerDaemonPriv *priv;
- guint request_id;
- gboolean signal_state_change = FALSE;
+ guint request_id;
+ gboolean signal_state_change = FALSE;
/* FIXME: Shouldn't we just make the TrackerConfig module a
* DBus object instead so values can be tweaked in real time
@@ -483,10 +446,6 @@
tracker_config_get_enable_indexing (priv->config));
}
- tracker_notify_file_data_available ();
-
- tracker_dbus_request_success (request_id);
-
return TRUE;
}
@@ -497,7 +456,7 @@
GError **error)
{
TrackerDaemonPriv *priv;
- guint request_id;
+ guint request_id;
/* FIXME: Shouldn't we just make the TrackerConfig module a
* DBus object instead so values can be tweaked in real time
@@ -527,8 +486,6 @@
g_message ("Maxinum number of unique words set to %d", value);
}
- tracker_notify_file_data_available ();
-
tracker_dbus_request_success (request_id);
return TRUE;
@@ -540,7 +497,7 @@
GError **error)
{
TrackerDaemonPriv *priv;
- guint request_id;
+ guint request_id;
request_id = tracker_dbus_get_next_request_id ();
@@ -567,7 +524,7 @@
GError **error)
{
TrackerDaemonPriv *priv;
- guint request_id;
+ guint request_id;
request_id = tracker_dbus_get_next_request_id ();
Modified: branches/xesam-support/src/trackerd/tracker-daemon.h
==============================================================================
--- branches/xesam-support/src/trackerd/tracker-daemon.h (original)
+++ branches/xesam-support/src/trackerd/tracker-daemon.h Mon Jun 9 15:41:07 2008
@@ -26,7 +26,6 @@
#include <libtracker-common/tracker-config.h>
-#include "tracker-db-sqlite.h"
#include "tracker-main.h"
#define TRACKER_DAEMON_SERVICE "org.freedesktop.Tracker"
@@ -54,11 +53,8 @@
};
GType tracker_daemon_get_type (void);
-TrackerDaemon *tracker_daemon_new (DBConnection *db_con,
- TrackerConfig *config,
+TrackerDaemon *tracker_daemon_new (TrackerConfig *config,
Tracker *tracker);
-void tracker_daemon_set_db_connection (TrackerDaemon *object,
- DBConnection *db_con);
void tracker_daemon_set_config (TrackerDaemon *object,
TrackerConfig *config);
void tracker_daemon_set_tracker (TrackerDaemon *object,
Modified: branches/xesam-support/src/trackerd/tracker-db-email.c
==============================================================================
--- branches/xesam-support/src/trackerd/tracker-db-email.c (original)
+++ branches/xesam-support/src/trackerd/tracker-db-email.c Mon Jun 9 15:41:07 2008
@@ -28,17 +28,19 @@
#include <libtracker-common/tracker-parser.h>
#include <libtracker-common/tracker-type-utils.h>
+#include <libtracker-db/tracker-db-manager.h>
+
#include "tracker-db-email.h"
#define MAX_ADDRESSES 255
static gint
-tracker_db_email_get_mbox_offset (DBConnection *db_con, const gchar *mbox_uri)
+tracker_db_email_get_mbox_offset (TrackerDBInterface *iface, const gchar *mbox_uri)
{
TrackerDBResultSet *result_set;
gint offset;
- result_set = tracker_exec_proc (db_con, "GetMBoxDetails", mbox_uri, NULL);
+ result_set = tracker_db_exec_proc (iface, "GetMBoxDetails", mbox_uri, NULL);
if (!result_set) {
return -1;
@@ -52,7 +54,7 @@
void
-tracker_db_email_register_mbox (DBConnection *db_con,
+tracker_db_email_register_mbox (TrackerDBInterface *iface,
MailApplication mail_app,
MailType mail_type,
const gchar *path,
@@ -64,7 +66,7 @@
gchar *str_mail_app = tracker_int_to_string (mail_app);
gchar *str_mail_type = tracker_int_to_string (mail_type);
- tracker_exec_proc (db_con, "InsertMboxDetails", str_mail_app, str_mail_type, filename, path, uri_prefix, NULL);
+ tracker_db_exec_proc (iface, "InsertMboxDetails", str_mail_app, str_mail_type, filename, path, uri_prefix, NULL);
g_message ("Registered email store %s of type %s", filename, types[mail_type]);
@@ -74,30 +76,30 @@
void
-tracker_db_email_flag_mbox_junk (DBConnection *db_con, const gchar *mbox_uri)
+tracker_db_email_flag_mbox_junk (TrackerDBInterface *iface, const gchar *mbox_uri)
{
- tracker_exec_proc (db_con, "SetJunkMbox", "1", mbox_uri, NULL);
+ tracker_db_exec_proc (iface, "SetJunkMbox", "1", mbox_uri, NULL);
}
void
-tracker_db_email_reset_mbox_junk (DBConnection *db_con, const gchar *mbox_uri)
+tracker_db_email_reset_mbox_junk (TrackerDBInterface *iface, const gchar *mbox_uri)
{
- tracker_exec_proc (db_con, "SetJunkMbox", "0", mbox_uri, NULL);
+ tracker_db_exec_proc (iface, "SetJunkMbox", "0", mbox_uri, NULL);
}
TrackerDBResultSet *
-tracker_db_email_get_mboxes (DBConnection *db_con)
+tracker_db_email_get_mboxes (TrackerDBInterface *iface)
{
- return tracker_exec_proc (db_con, "GetMboxes", NULL);
+ return tracker_db_exec_proc (iface, "GetMboxes", NULL);
}
void
-tracker_db_email_insert_junk (DBConnection *db_con, const gchar *mbox_uri, guint32 uid)
+tracker_db_email_insert_junk (TrackerDBInterface *iface, const gchar *mbox_uri, guint32 uid)
{
- gint mbox_id = tracker_db_email_get_mbox_id (db_con, mbox_uri);
+ gint mbox_id = tracker_db_email_get_mbox_id (iface, mbox_uri);
if (mbox_id == -1) {
return;
@@ -106,9 +108,9 @@
gchar *str_mbox_id = tracker_int_to_string (mbox_id);
gchar *str_uid = tracker_uint_to_string (uid);
- if (!tracker_db_email_lookup_junk (db_con, str_mbox_id, uid)) {
+ if (!tracker_db_email_lookup_junk (iface, str_mbox_id, uid)) {
- tracker_exec_proc (db_con, "InsertJunk", str_uid, str_mbox_id, NULL);
+ tracker_db_exec_proc (iface, "InsertJunk", str_uid, str_mbox_id, NULL);
}
g_free (str_uid);
@@ -117,12 +119,12 @@
MailStore *
-tracker_db_email_get_mbox_details (DBConnection *db_con, const gchar *mbox_uri)
+tracker_db_email_get_mbox_details (TrackerDBInterface *iface, const gchar *mbox_uri)
{
TrackerDBResultSet *result_set;
MailStore *mail_store;
- result_set = tracker_exec_proc (db_con, "GetMBoxDetails", mbox_uri, NULL);
+ result_set = tracker_db_exec_proc (iface, "GetMBoxDetails", mbox_uri, NULL);
if (!result_set) {
return NULL;
@@ -157,12 +159,12 @@
gint
-tracker_db_email_get_mbox_id (DBConnection *db_con, const gchar *mbox_uri)
+tracker_db_email_get_mbox_id (TrackerDBInterface *iface, const gchar *mbox_uri)
{
TrackerDBResultSet *result_set;
gint id;
- result_set = tracker_exec_proc (db_con, "GetMboxID", mbox_uri, NULL);
+ result_set = tracker_db_exec_proc (iface, "GetMboxID", mbox_uri, NULL);
if (!result_set) {
return -1;
@@ -176,12 +178,12 @@
gchar *
-tracker_db_email_get_mbox_uri_prefix (DBConnection *db_con, const gchar *mbox_uri)
+tracker_db_email_get_mbox_uri_prefix (TrackerDBInterface *iface, const gchar *mbox_uri)
{
TrackerDBResultSet *result_set;
gchar *uri;
- result_set = tracker_exec_proc (db_con, "GetMBoxDetails", mbox_uri, NULL);
+ result_set = tracker_db_exec_proc (iface, "GetMBoxDetails", mbox_uri, NULL);
if (!result_set) {
return NULL;
@@ -195,12 +197,12 @@
gchar *
-tracker_db_email_get_mbox_path (DBConnection *db_con, const gchar *filename)
+tracker_db_email_get_mbox_path (TrackerDBInterface *iface, const gchar *filename)
{
TrackerDBResultSet *result_set;
gchar *path;
- result_set = tracker_exec_proc (db_con, "GetMBoxPath", filename, NULL);
+ result_set = tracker_db_exec_proc (iface, "GetMBoxPath", filename, NULL);
if (!result_set) {
return NULL;
@@ -214,7 +216,7 @@
void
-tracker_db_email_get_message_counts (DBConnection *db_con,
+tracker_db_email_get_message_counts (TrackerDBInterface *iface,
const gchar *mbox_file_path,
gint *mail_count,
gint *junk_count,
@@ -226,7 +228,7 @@
*junk_count = 0;
*delete_count = 0;
- result_set = tracker_exec_proc (db_con, "GetMBoxDetails", mbox_file_path, NULL);
+ result_set = tracker_db_exec_proc (iface, "GetMBoxDetails", mbox_file_path, NULL);
if (!result_set) {
return;
@@ -243,24 +245,24 @@
void
-tracker_db_email_set_message_counts (DBConnection *db_con,
+tracker_db_email_set_message_counts (TrackerDBInterface *iface,
const gchar *dir_path,
gint mail_count,
gint junk_count,
gint delete_count)
{
- g_return_if_fail (db_con);
+ g_return_if_fail (iface);
g_return_if_fail (dir_path);
/* make sure dir_path is registered in DB before doing an update */
- if (tracker_db_email_get_mbox_offset (db_con, dir_path) != -1) {
+ if (tracker_db_email_get_mbox_offset (iface, dir_path) != -1) {
gchar *str_mail_count, *str_junk_count, *str_delete_count;
str_mail_count = tracker_uint_to_string (mail_count);
str_junk_count = tracker_uint_to_string (junk_count);
str_delete_count = tracker_uint_to_string (delete_count);
- tracker_exec_proc (db_con, "UpdateMboxCounts", str_mail_count, str_junk_count, str_delete_count, dir_path, NULL);
+ tracker_db_exec_proc (iface, "UpdateMboxCounts", str_mail_count, str_junk_count, str_delete_count, dir_path, NULL);
g_free (str_mail_count);
g_free (str_junk_count);
@@ -273,14 +275,14 @@
off_t
-tracker_db_email_get_last_mbox_offset (DBConnection *db_con, const gchar *mbox_file_path)
+tracker_db_email_get_last_mbox_offset (TrackerDBInterface *iface, const gchar *mbox_file_path)
{
off_t offset;
- g_return_val_if_fail (db_con, 0);
+ g_return_val_if_fail (iface, 0);
g_return_val_if_fail (mbox_file_path, 0);
- offset = tracker_db_email_get_mbox_offset (db_con, mbox_file_path);
+ offset = tracker_db_email_get_mbox_offset (iface, mbox_file_path);
if (offset == -1) {
/* we need to add this mbox */
@@ -292,9 +294,9 @@
void
-tracker_db_email_update_mbox_offset (DBConnection *db_con, MailFile *mf)
+tracker_db_email_update_mbox_offset (TrackerDBInterface *iface, MailFile *mf)
{
- g_return_if_fail (db_con);
+ g_return_if_fail (iface);
g_return_if_fail (mf);
if (!mf->path) {
@@ -303,11 +305,11 @@
}
/* make sure mbox is registered in DB before doing an update */
- if (tracker_db_email_get_mbox_offset (db_con, mf->path) != -1) {
+ if (tracker_db_email_get_mbox_offset (iface, mf->path) != -1) {
gchar *str_offset;
str_offset = tracker_uint_to_string (mf->next_email_offset);
- tracker_exec_proc (db_con, "UpdateMboxOffset", str_offset, mf->path, NULL);
+ tracker_db_exec_proc (iface, "UpdateMboxOffset", str_offset, mf->path, NULL);
g_free (str_offset);
@@ -398,9 +400,17 @@
gboolean
-tracker_db_email_is_up_to_date (DBConnection *db_con, const gchar *uri, guint32 *id)
+tracker_db_email_is_up_to_date (const gchar *uri,
+ guint32 *id)
{
- return tracker_db_is_file_up_to_date (db_con->emails, uri, id);
+ TrackerDBInterface *iface;
+
+ g_return_val_if_fail (uri != NULL, FALSE);
+ g_return_val_if_fail (id != NULL, FALSE);
+
+ iface = tracker_db_manager_get_db_interface (TRACKER_DB_EMAIL_METADATA);
+
+ return tracker_db_file_is_up_to_date (iface, uri, id);
}
@@ -418,13 +428,13 @@
gboolean
-tracker_db_email_save_email (DBConnection *db_con, MailMessage *mm, MailApplication mail_app)
+tracker_db_email_save_email (TrackerDBInterface *iface, MailMessage *mm, MailApplication mail_app)
{
gint mbox_id, type_id, id, len;
gchar *service, *attachment_service, *mime;
gchar *array[MAX_ADDRESSES];
- g_return_val_if_fail (db_con, FALSE);
+ g_return_val_if_fail (iface, FALSE);
g_return_val_if_fail (mm, FALSE);
if (!mm->uri) {
@@ -450,7 +460,7 @@
if (mm->deleted || mm->junk) {
if (mm->parent_mail_file) {
- tracker_db_email_insert_junk (db_con, mm->parent_mail_file->path, mm->id);
+ tracker_db_email_insert_junk (iface, mm->parent_mail_file->path, mm->id);
}
if (mm->store) {
@@ -470,7 +480,7 @@
if (mm->parent_mail_file) {
if (mm->is_mbox) {
- mbox_id = tracker_db_email_get_mbox_id (db_con, mm->parent_mail_file->path);
+ mbox_id = tracker_db_email_get_mbox_id (iface, mm->parent_mail_file->path);
if (mbox_id == -1) {
g_critical ("no mbox is registered for email %s", mm->uri);
return TRUE;
@@ -504,7 +514,7 @@
info->aux_id = mbox_id;
info->mtime = mm->mtime;
- id = tracker_db_create_service (db_con, service, info);
+ id = tracker_db_service_create (iface, service, info);
tracker_db_file_info_free (info);
@@ -524,20 +534,20 @@
gchar *value = get_utf8 (mm->body);
if (value) {
- tracker_db_insert_single_embedded_metadata (db_con, service, str_id, "Email:Body", value, index_table);
+ tracker_db_metadata_insert_single_embedded (iface, service, str_id, "Email:Body", value, index_table);
g_free (value);
}
}
if (str_date) {
- tracker_db_insert_single_embedded_metadata (db_con, service, str_id, "Email:Date", str_date, index_table);
+ tracker_db_metadata_insert_single_embedded (iface, service, str_id, "Email:Date", str_date, index_table);
}
if (mm->from) {
gchar *value = get_utf8 (mm->from);
if (value) {
- tracker_db_insert_single_embedded_metadata (db_con, service, str_id, "Email:Sender", value, index_table);
+ tracker_db_metadata_insert_single_embedded (iface, service, str_id, "Email:Sender", value, index_table);
g_free (value);
}
}
@@ -546,7 +556,7 @@
gchar *value = get_utf8 (mm->subject);
if (value) {
- tracker_db_insert_single_embedded_metadata (db_con, service, str_id, "Email:Subject", value, index_table);
+ tracker_db_metadata_insert_single_embedded (iface, service, str_id, "Email:Subject", value, index_table);
g_free (value);
}
}
@@ -587,12 +597,15 @@
}
if (i > 0) {
- tracker_db_insert_embedded_metadata (db_con, service, str_id, "Email:SentTo", array, i, index_table);
+ tracker_db_metadata_insert_embedded (iface,
+ service,
+ str_id,
+ "Email:SentTo",
+ array,
+ index_table);
}
- for (i--; i>-1; i--) {
- g_free (array[i]);
- }
+ g_strfreev (array);
}
len = g_slist_length (mm->cc);
@@ -627,12 +640,15 @@
}
if (i > 0) {
- tracker_db_insert_embedded_metadata (db_con, service, str_id, "Email:CC", array, i, index_table);
+ tracker_db_metadata_insert_embedded (iface,
+ service,
+ str_id,
+ "Email:CC",
+ array,
+ index_table);
}
- for (i--; i > -1; i--) {
- g_free (array[i]);
- }
+ g_strfreev (array);
}
len = g_slist_length (mm->attachments);
@@ -657,12 +673,15 @@
}
if (i > 0) {
- tracker_db_insert_embedded_metadata (db_con, service, str_id, "Email:Attachments", array, i, index_table);
+ tracker_db_metadata_insert_embedded (iface,
+ service,
+ str_id,
+ "Email:Attachments",
+ array,
+ index_table);
}
- for (i--; i > -1; i--) {
- g_free (array[i]);
- }
+ g_strfreev (array);
}
tracker_parser_text_free (index_table);
@@ -692,7 +711,7 @@
uri = g_strconcat (mm->uri, "/", ma->attachment_name, NULL);
g_message ("Indexing attachment with uri:'%s' and mime:'%s'",
uri, attachment_info->mime);
- /* tracker_db_index_file (db_con, attachment_info, uri, attachment_service); */
+ /* tracker_db_index_file (iface, attachment_info, uri, attachment_service); */
g_free (uri);
tracker_db_file_info_unref (attachment_info);
@@ -720,19 +739,19 @@
gboolean
-tracker_db_email_is_saved_email_file (DBConnection *db_con, const gchar *uri)
+tracker_db_email_is_saved_email_file (TrackerDBInterface *iface, const gchar *uri)
{
- g_return_val_if_fail (db_con, FALSE);
+ g_return_val_if_fail (iface, FALSE);
g_return_val_if_fail (uri, FALSE);
- return tracker_db_get_file_id (db_con, uri) != 0 ;
+ return tracker_db_file_get_id (iface, uri) != 0 ;
}
void
-tracker_db_email_update_email (DBConnection *db_con, MailMessage *mm)
+tracker_db_email_update_email (TrackerDBInterface *iface, MailMessage *mm)
{
- g_return_if_fail (db_con);
+ g_return_if_fail (iface);
g_return_if_fail (mm);
g_message ("update email with uri \"%s\" and subject \"%s\" from \"%s\"", mm->uri, mm->subject, mm->from);
@@ -742,9 +761,9 @@
gboolean
-tracker_db_email_delete_emails_of_mbox (DBConnection *db_con, const gchar *mbox_file_path)
+tracker_db_email_delete_emails_of_mbox (TrackerDBInterface *iface, const gchar *mbox_file_path)
{
- g_return_val_if_fail (db_con, FALSE);
+ g_return_val_if_fail (iface, FALSE);
g_return_val_if_fail (mbox_file_path, FALSE);
/* FIXME: add code... */
@@ -753,12 +772,14 @@
gboolean
-tracker_db_email_delete_email (DBConnection *db_con, const gchar *uri)
+tracker_db_email_delete_email (TrackerDBInterface *iface, const gchar *uri)
{
- g_return_val_if_fail (db_con, FALSE);
+ gchar *id;
+
+ g_return_val_if_fail (iface, FALSE);
g_return_val_if_fail (uri, FALSE);
- gchar *id = tracker_db_get_id (db_con, "Emails", uri);
+ id = tracker_db_file_get_id_as_string (iface, "Emails", uri);
if (!id) {
return FALSE;
@@ -766,7 +787,7 @@
g_message ("Deleting email:'%s'", uri);
- tracker_db_delete_directory (db_con, atoi (id), uri);
+ tracker_db_directory_delete (iface, atoi (id), uri);
g_free (id);
@@ -775,7 +796,7 @@
gboolean
-tracker_db_email_lookup_junk (DBConnection *db_con, const gchar *mbox_id, gint uid)
+tracker_db_email_lookup_junk (TrackerDBInterface *iface, const gchar *mbox_id, gint uid)
{
TrackerDBResultSet *result_set;
gchar *str_uid;
@@ -783,7 +804,7 @@
str_uid = tracker_uint_to_string (uid);
- result_set = tracker_exec_proc (db_con, "LookupJunk", str_uid, mbox_id, NULL);
+ result_set = tracker_db_exec_proc (iface, "LookupJunk", str_uid, mbox_id, NULL);
g_free (str_uid);
Modified: branches/xesam-support/src/trackerd/tracker-db-email.h
==============================================================================
--- branches/xesam-support/src/trackerd/tracker-db-email.h (original)
+++ branches/xesam-support/src/trackerd/tracker-db-email.h Mon Jun 9 15:41:07 2008
@@ -24,62 +24,61 @@
#include "tracker-db.h"
#include "tracker-email-utils.h"
-off_t tracker_db_email_get_last_mbox_offset (DBConnection *db_con,
- const gchar *mail_file_path);
-void tracker_db_email_update_mbox_offset (DBConnection *db_con,
- MailFile *mf);
-gboolean tracker_db_email_is_up_to_date (DBConnection *db_con,
- const gchar *uri,
- guint32 *id);
-gboolean tracker_db_email_save_email (DBConnection *db_con,
- MailMessage *mm,
- MailApplication mail_app);
-gboolean tracker_db_email_is_saved_email_file (DBConnection *db_con,
- const gchar *uri);
-void tracker_db_email_update_email (DBConnection *db_con,
- MailMessage *mm);
-gboolean tracker_db_email_delete_email_file (DBConnection *db_con,
- const gchar *uri);
-gboolean tracker_db_email_delete_emails_of_mbox (DBConnection *db_con,
- const gchar *mbox_file_path);
-gboolean tracker_db_email_delete_email (DBConnection *db_con,
- const gchar *uri);
-gint tracker_db_email_get_mbox_id (DBConnection *db_con,
- const gchar *mbox_uri);
-void tracker_db_email_insert_junk (DBConnection *db_con,
- const gchar *mbox_uri,
- guint32 uid);
-void tracker_db_email_reset_mbox_junk (DBConnection *db_con,
- const gchar *mbox_uri);
-void tracker_db_email_flag_mbox_junk (DBConnection *db_con,
- const gchar *mbox_uri);
-void tracker_db_email_register_mbox (DBConnection *db_con,
- MailApplication mail_app,
- MailType mail_type,
- const gchar *path,
- const gchar *filename,
- const gchar *uri_prefix);
-gchar * tracker_db_email_get_mbox_path (DBConnection *db_con,
- const gchar *filename);
-void tracker_db_email_set_message_counts (DBConnection *db_con,
- const gchar *dir_path,
- gint mail_count,
- gint junk_count,
- gint delete_count);
-void tracker_db_email_get_message_counts (DBConnection *db_con,
- const gchar *mbox_file_path,
- gint *mail_count,
- gint *junk_count,
- gint *delete_count);
-gchar * tracker_db_email_get_mbox_uri_prefix (DBConnection *db_con,
- const gchar *mbox_uri);
-gboolean tracker_db_email_lookup_junk (DBConnection *db_con,
- const gchar *mbox_id,
- gint uid);
-void tracker_db_email_free_mail_store (MailStore *store);
-MailStore * tracker_db_email_get_mbox_details (DBConnection *db_con,
- const gchar *mbox_uri);
-TrackerDBResultSet *tracker_db_email_get_mboxes (DBConnection *db_con);
+off_t tracker_db_email_get_last_mbox_offset (TrackerDBInterface *iface,
+ const gchar *mail_file_path);
+void tracker_db_email_update_mbox_offset (TrackerDBInterface *iface,
+ MailFile *mf);
+gboolean tracker_db_email_is_up_to_date (const gchar *uri,
+ guint32 *id);
+gboolean tracker_db_email_save_email (TrackerDBInterface *iface,
+ MailMessage *mm,
+ MailApplication mail_app);
+gboolean tracker_db_email_is_saved_email_file (TrackerDBInterface *iface,
+ const gchar *uri);
+void tracker_db_email_update_email (TrackerDBInterface *iface,
+ MailMessage *mm);
+gboolean tracker_db_email_delete_email_file (TrackerDBInterface *iface,
+ const gchar *uri);
+gboolean tracker_db_email_delete_emails_of_mbox (TrackerDBInterface *iface,
+ const gchar *mbox_file_path);
+gboolean tracker_db_email_delete_email (TrackerDBInterface *iface,
+ const gchar *uri);
+gint tracker_db_email_get_mbox_id (TrackerDBInterface *iface,
+ const gchar *mbox_uri);
+void tracker_db_email_insert_junk (TrackerDBInterface *iface,
+ const gchar *mbox_uri,
+ guint32 uid);
+void tracker_db_email_reset_mbox_junk (TrackerDBInterface *iface,
+ const gchar *mbox_uri);
+void tracker_db_email_flag_mbox_junk (TrackerDBInterface *iface,
+ const gchar *mbox_uri);
+void tracker_db_email_register_mbox (TrackerDBInterface *iface,
+ MailApplication mail_app,
+ MailType mail_type,
+ const gchar *path,
+ const gchar *filename,
+ const gchar *uri_prefix);
+gchar * tracker_db_email_get_mbox_path (TrackerDBInterface *iface,
+ const gchar *filename);
+void tracker_db_email_set_message_counts (TrackerDBInterface *iface,
+ const gchar *dir_path,
+ gint mail_count,
+ gint junk_count,
+ gint delete_count);
+void tracker_db_email_get_message_counts (TrackerDBInterface *iface,
+ const gchar *mbox_file_path,
+ gint *mail_count,
+ gint *junk_count,
+ gint *delete_count);
+gchar * tracker_db_email_get_mbox_uri_prefix (TrackerDBInterface *iface,
+ const gchar *mbox_uri);
+gboolean tracker_db_email_lookup_junk (TrackerDBInterface *iface,
+ const gchar *mbox_id,
+ gint uid);
+void tracker_db_email_free_mail_store (MailStore *store);
+MailStore * tracker_db_email_get_mbox_details (TrackerDBInterface *iface,
+ const gchar *mbox_uri);
+TrackerDBResultSet *tracker_db_email_get_mboxes (TrackerDBInterface *iface);
#endif /* __TRACKERD_DB_EMAIL_BASE_H__ */
Modified: branches/xesam-support/src/trackerd/tracker-db.c
==============================================================================
--- branches/xesam-support/src/trackerd/tracker-db.c (original)
+++ branches/xesam-support/src/trackerd/tracker-db.c Mon Jun 9 15:41:07 2008
@@ -3,6 +3,7 @@
* Copyright (C) 2006, Mr Jamie McCracken (jamiemcc gnome org)
* Copyright (C) 2007, Jason Kivlighn (jkivlighn gmail com)
* Copyright (C) 2007, Creative Commons (http://creativecommons.org)
+ * Copyright (C) 2008, Nokia
*
* This library is free software; you can redistribute it and/or
* modify it under the terms of the GNU General Public
@@ -22,177 +23,589 @@
#include "config.h"
-#include <libtracker-common/tracker-file-utils.h>
-#include <libtracker-common/tracker-os-dependant.h>
+#include <string.h>
+#include <fcntl.h>
+#include <zlib.h>
+
+#include <glib/gstdio.h>
+
+#include <libtracker-common/tracker-file-utils.h>
+#include <libtracker-common/tracker-nfs-lock.h>
+#include <libtracker-common/tracker-type-utils.h>
+#include <libtracker-common/tracker-utils.h>
+
+#include <libtracker-db/tracker-db-interface-sqlite.h>
+#include <libtracker-db/tracker-db-manager.h>
#include "tracker-db.h"
#include "tracker-process-files.h"
-
-gboolean
-tracker_db_is_file_up_to_date (DBConnection *db_con,
- const gchar *uri,
- guint32 *id)
+#include "tracker-query-tree.h"
+#include "tracker-watcher.h"
+#include "tracker-xesam-manager.h"
+
+#define ZLIBBUFSIZ 8192
+
+extern Tracker *tracker;
+
+static gchar *
+compress_string (const gchar *ptr,
+ gint size,
+ gint *compressed_size)
{
- TrackerDBResultSet *result_set;
- gchar *path, *name;
- gint32 index_time;
+ z_stream zs;
+ gchar *buf, *swap;
+ unsigned char obuf[ZLIBBUFSIZ];
+ gint rv, asiz, bsiz, osiz;
- g_return_val_if_fail (db_con != NULL, FALSE);
- g_return_val_if_fail (uri != NULL, FALSE);
- g_return_val_if_fail (id != NULL, FALSE);
+ if (size < 0) {
+ size = strlen (ptr);
+ }
- if (uri[0] == G_DIR_SEPARATOR) {
- name = g_path_get_basename (uri);
- path = g_path_get_dirname (uri);
- } else {
- name = tracker_file_get_vfs_name (uri);
- path = tracker_file_get_vfs_path (uri);
+ zs.zalloc = Z_NULL;
+ zs.zfree = Z_NULL;
+ zs.opaque = Z_NULL;
+
+ if (deflateInit2 (&zs, 6, Z_DEFLATED, 15, 6, Z_DEFAULT_STRATEGY) != Z_OK) {
+ return NULL;
}
- result_set = tracker_exec_proc (db_con, "GetServiceID", path, name, NULL);
+ asiz = size + 16;
- g_free (path);
- g_free (name);
+ if (asiz < ZLIBBUFSIZ) {
+ asiz = ZLIBBUFSIZ;
+ }
- index_time = 0;
- *id = 0;
+ if (!(buf = malloc (asiz))) {
+ deflateEnd (&zs);
+ return NULL;
+ }
- if (result_set) {
- tracker_db_result_set_get (result_set,
- 0, id,
- 1, &index_time,
- -1);
+ bsiz = 0;
+ zs.next_in = (unsigned char *)ptr;
+ zs.avail_in = size;
+ zs.next_out = obuf;
+ zs.avail_out = ZLIBBUFSIZ;
+
+ while ((rv = deflate (&zs, Z_FINISH)) == Z_OK) {
+ osiz = ZLIBBUFSIZ - zs.avail_out;
+
+ if (bsiz + osiz > asiz) {
+ asiz = asiz * 2 + osiz;
+
+ if (!(swap = realloc (buf, asiz))) {
+ free (buf);
+ deflateEnd (&zs);
+ return NULL;
+ }
- g_object_unref (result_set);
- } else {
- return FALSE;
+ buf = swap;
+ }
+
+ memcpy (buf + bsiz, obuf, osiz);
+ bsiz += osiz;
+ zs.next_out = obuf;
+ zs.avail_out = ZLIBBUFSIZ;
}
- if (index_time < tracker_file_get_mtime (uri)) {
- return FALSE;
+ if (rv != Z_STREAM_END) {
+ free (buf);
+ deflateEnd (&zs);
+ return NULL;
}
- return TRUE;
+ osiz = ZLIBBUFSIZ - zs.avail_out;
+
+ if (bsiz + osiz + 1 > asiz) {
+ asiz = asiz * 2 + osiz;
+
+ if (!(swap = realloc (buf, asiz))) {
+ free (buf);
+ deflateEnd (&zs);
+ return NULL;
+ }
+
+ buf = swap;
+ }
+
+ memcpy (buf + bsiz, obuf, osiz);
+ bsiz += osiz;
+ buf[bsiz] = '\0';
+
+ *compressed_size = bsiz;
+
+ deflateEnd (&zs);
+
+ return buf;
}
-guint32
-tracker_db_get_file_id (DBConnection *db_con,
- const gchar *uri)
+static gboolean
+db_exec_proc_no_reply (TrackerDBInterface *iface,
+ const gchar *procedure,
+ ...)
{
TrackerDBResultSet *result_set;
- char *path, *name;
- guint32 id;
+ va_list args;
- g_return_val_if_fail (db_con != NULL, 0);
- g_return_val_if_fail (uri != NULL, 0);
+ g_return_val_if_fail (TRACKER_IS_DB_INTERFACE (iface), FALSE);
+ g_return_val_if_fail (procedure != NULL, FALSE);
- if (uri[0] == G_DIR_SEPARATOR) {
- name = g_path_get_basename (uri);
- path = g_path_get_dirname (uri);
+ va_start (args, procedure);
+ result_set = tracker_db_interface_execute_vprocedure (iface,
+ NULL,
+ procedure,
+ args);
+ va_end (args);
+
+ if (result_set) {
+ g_object_unref (result_set);
+ }
+
+ return TRUE;
+}
+
+static void
+db_save_full_text (TrackerDBInterface *iface,
+ const gchar *str_file_id,
+ const gchar *text,
+ gint length)
+{
+ gchar *compressed, *value = NULL;
+ gint bytes_compressed;
+ const gchar *field_id;
+
+ compressed = compress_string (text, length, &bytes_compressed);
+
+ if (compressed) {
+ g_debug ("Compressed full text size of %d to %d",
+ length, bytes_compressed);
+ value = compressed;
} else {
- name = tracker_file_get_vfs_name (uri);
- path = tracker_file_get_vfs_path (uri);
+ g_warning ("Could not compress text'%*s...', length:%d",
+ 16, text, length);
+ value = g_strdup (text);
+ bytes_compressed = length;
}
- result_set = tracker_exec_proc (db_con, "GetServiceID", path, name, NULL);
+ field_id = tracker_ontology_get_field_id ("File:Contents");
- g_free (path);
- g_free (name);
+ if (!field_id) {
+ g_warning ("Metadata not found for type:'File:Contents'");
+ g_free (value);
+ return;
+ }
- id = 0;
+ tracker_db_interface_execute_procedure_len (iface,
+ NULL,
+ "SaveServiceContents",
+ str_file_id,
+ -1,
+ field_id,
+ -1,
+ value,
+ bytes_compressed,
+ NULL);
+ g_free (value);
+}
+
+static void
+update_metadata_index (const gchar *id,
+ const gchar *service,
+ TrackerField *def,
+ const gchar *old_value,
+ const gchar *new_value)
+{
+ GHashTable *old_table;
+ GHashTable *new_table;
+ gint sid;
+
+ g_return_if_fail (TRACKER_IS_FIELD (def));
+
+ old_table = NULL;
+ new_table = NULL;
+
+ if (old_value) {
+ old_table = tracker_parser_text (old_table,
+ old_value,
+ tracker_field_get_weight (def),
+ tracker->language,
+ tracker_config_get_max_words_to_index (tracker->config),
+ tracker_config_get_max_word_length (tracker->config),
+ tracker_config_get_min_word_length (tracker->config),
+ tracker_field_get_filtered (def),
+ tracker_field_get_delimited (def));
+ }
+
+ /* Parse new metadata value */
+ if (new_value) {
+ new_table = tracker_parser_text (new_table,
+ new_value,
+ tracker_field_get_weight (def),
+ tracker->language,
+ tracker_config_get_max_words_to_index (tracker->config),
+ tracker_config_get_max_word_length (tracker->config),
+ tracker_config_get_min_word_length (tracker->config),
+ tracker_field_get_filtered (def),
+ tracker_field_get_delimited (def));
+ }
+
+ /* We only do differential updates so only changed words scores are updated */
+ sid = tracker_ontology_get_id_for_service_type (service);
+#if 0
+ tracker_db_update_differential_index (old_table, new_table, id, sid);
+#endif
+
+ tracker_parser_text_free (old_table);
+ tracker_parser_text_free (new_table);
+}
+
+static gchar *
+format_date (const gchar *avalue)
+{
+ gchar *dvalue;
+
+ dvalue = tracker_date_format (avalue);
+
+ if (dvalue) {
+ time_t time;
+
+ time = tracker_string_to_date (dvalue);
+ g_free (dvalue);
+
+ if (time != -1) {
+ return tracker_int_to_string (time);
+ }
+ }
+
+ return NULL;
+}
+
+static gchar *
+get_backup_id (TrackerDBInterface *iface,
+ const gchar *id)
+{
+ TrackerDBResultSet *result_set;
+ gchar *backup_id = NULL;
+
+ result_set = tracker_db_exec_proc (iface,
+ "GetBackupServiceByID",
+ id,
+ NULL);
if (result_set) {
- tracker_db_result_set_get (result_set, 0, &id, -1);
+ tracker_db_result_set_get (result_set, 0, &backup_id, -1);
g_object_unref (result_set);
}
- return id;
+ if (!backup_id) {
+ gint64 id;
+
+ tracker_db_exec_proc (iface,
+ "InsertBackupService",
+ id,
+ NULL);
+ id = tracker_db_interface_sqlite_get_last_insert_id (TRACKER_DB_INTERFACE_SQLITE (iface));
+ backup_id = tracker_int_to_string (id);
+ }
+
+ return backup_id;
}
-TrackerDBFileInfo *
-tracker_db_get_file_info (DBConnection *db_con,
- TrackerDBFileInfo *info)
+static inline void
+backup_non_embedded_metadata (TrackerDBInterface *iface,
+ const gchar *id,
+ const gchar *key_id,
+ const gchar *value)
{
- TrackerDBResultSet *result_set;
- gchar *path, *name;
+ gchar *backup_id;
+
+ backup_id = get_backup_id (iface, id);
+
+ if (backup_id) {
+ tracker_db_exec_proc (tracker_db_manager_get_db_interface (TRACKER_DB_COMMON),
+ "SetBackupMetadata",
+ backup_id,
+ key_id,
+ value,
+ NULL);
+ g_free (backup_id);
+ }
+}
- g_return_val_if_fail (db_con != NULL, info);
- g_return_val_if_fail (info != NULL, info);
+static inline void
+backup_delete_non_embedded_metadata_value (TrackerDBInterface *iface,
+ const gchar *id,
+ const gchar *key_id,
+ const gchar *value)
+{
+ gchar *backup_id;
- if (!tracker_db_file_info_is_valid (info)) {
+ backup_id = get_backup_id (iface, id);
+
+ if (backup_id) {
+ tracker_db_exec_proc (tracker_db_manager_get_db_interface (TRACKER_DB_COMMON),
+ "DeleteBackupMetadataValue",
+ backup_id,
+ key_id,
+ value,
+ NULL);
+ g_free (backup_id);
+ }
+}
+
+static inline void
+backup_delete_non_embedded_metadata (TrackerDBInterface *iface,
+ const gchar *id,
+ const gchar *key_id)
+{
+ gchar *backup_id;
+
+ backup_id = get_backup_id (iface, id);
+
+ if (backup_id) {
+ tracker_db_exec_proc (tracker_db_manager_get_db_interface (TRACKER_DB_COMMON),
+ "DeleteBackupMetadata",
+ backup_id,
+ key_id,
+ NULL);
+ g_free (backup_id);
+ }
+}
+
+static gchar *
+remove_value (const gchar *str,
+ const gchar *del_str)
+{
+ GString *s = NULL;
+ gchar **p;
+ gchar **strv;
+
+ strv = g_strsplit (str, "|", -1);
+
+ for (p = strv; *p; p++) {
+ if (tracker_is_empty_string (*p)) {
+ continue;
+ }
+
+ if (strcmp (del_str, *p) != 0) {
+ if (!s) {
+ s = g_string_new (*p);
+ } else {
+ g_string_append_printf (s, "%s%s", "|", *p);
+ }
+ }
+ }
+
+ g_strfreev (strv);
+
+ if (!s) {
return NULL;
}
- name = g_path_get_basename (info->uri);
- path = g_path_get_dirname (info->uri);
+ return g_string_free (s, FALSE);
+}
- result_set = tracker_exec_proc (db_con, "GetServiceID", path, name, NULL);
+/* Deprecated */
+static guint32
+db_create_event (TrackerDBInterface *iface,
+ const gchar *service_id_str,
+ const gchar *type)
+{
+ TrackerDBResultSet *result_set;
+ gchar *eid;
+ gint i;
+ guint32 id = 0;
+
+ g_return_val_if_fail (TRACKER_IS_DB_INTERFACE (iface), 0);
+
+ result_set = tracker_db_exec_proc (iface,
+ "GetNewEventID",
+ NULL);
+
+ if (!result_set) {
+ g_critical ("Could not create event, GetNewEventID failed");
+ return 0;
+ }
- g_free (name);
- g_free (path);
+ tracker_db_result_set_get (result_set, 0, &eid, -1);
+ i = atoi (eid);
+ g_free (eid);
+
+ i++;
+ eid = tracker_int_to_string (i);
+
+ result_set = tracker_db_exec_proc (iface,
+ "UpdateNewEventID",
+ eid,
+ NULL);
+ if (result_set)
+ g_object_unref (result_set);
+
+ /* Uses the Events table */
+ result_set = tracker_db_exec_proc (iface,
+ "CreateEvent",
+ eid,
+ service_id_str,
+ type,
+ NULL);
+
+ id = tracker_db_interface_sqlite_get_last_insert_id (TRACKER_DB_INTERFACE_SQLITE (iface));
if (result_set) {
- gint id, indextime, service_type_id;
- gboolean is_directory;
+ g_object_unref (result_set);
+ }
- tracker_db_result_set_get (result_set,
- 0, &id,
- 1, &indextime,
- 2, &is_directory,
- 3, &service_type_id,
- -1);
+ g_free (eid);
- if (id > 0) {
- info->file_id = id;
- info->is_new = FALSE;
- }
+ tracker_xesam_manager_wakeup (NULL);
- info->indextime = indextime;
- info->is_directory = is_directory;
- info->service_type_id = service_type_id;
+ return id;
+}
- g_object_unref (result_set);
+static void
+delete_index_for_service (TrackerDBInterface *iface,
+ guint32 id)
+{
+ gchar *str_file_id;
+
+ str_file_id = tracker_uint_to_string (id);
+
+ tracker_db_exec_proc (tracker_db_manager_get_db_interface_content (iface),
+ "DeleteAllContents",
+ str_file_id,
+ NULL);
+
+ g_free (str_file_id);
+}
+
+static void
+dec_stat (gint id)
+{
+ TrackerDBInterface *iface;
+ gchar *service;
+ gchar *parent;
+
+ service = tracker_ontology_get_service_type_by_id (id);
+
+ if (!service) {
+ return;
}
- return info;
+ iface = tracker_db_manager_get_db_interface (TRACKER_DB_COMMON);
+
+ tracker_db_exec_proc (iface, "DecStat", service, NULL);
+
+ parent = tracker_ontology_get_parent_service (service);
+
+ if (parent) {
+ tracker_db_exec_proc (iface, "DecStat", parent, NULL);
+ g_free (parent);
+ }
+
+ g_free (service);
}
-gchar **
-tracker_db_get_files_in_folder (DBConnection *db_con,
- const gchar *uri)
+/* Update all non-dirs in a dir for a file move */
+static void
+directory_move_files (TrackerDBInterface *iface,
+ const gchar *moved_from_uri,
+ const gchar *moved_to_uri)
{
TrackerDBResultSet *result_set;
- GPtrArray *array;
- g_return_val_if_fail (db_con != NULL, NULL);
- g_return_val_if_fail (uri != NULL, NULL);
-
- result_set = tracker_exec_proc (db_con, "SelectFileChild", uri, NULL);
- array = g_ptr_array_new ();
+ /* Get all sub files (excluding folders) that were moved and add watches */
+ result_set = tracker_db_exec_proc (iface,
+ "SelectFileChildWithoutDirs",
+ moved_from_uri,
+ NULL);
if (result_set) {
- gchar *name, *prefix;
+ gchar *prefix;
+ gchar *name;
+ gchar *file_name;
+ gchar *moved_file_name;
gboolean valid = TRUE;
while (valid) {
tracker_db_result_set_get (result_set,
- 1, &prefix,
- 2, &name,
+ 0, &prefix,
+ 1, &name,
-1);
- g_ptr_array_add (array, g_build_filename (prefix, name, NULL));
+ if (prefix && name) {
+ file_name = g_build_filename (prefix, name, NULL);
+ moved_file_name = g_build_filename (moved_to_uri, name, NULL);
+
+ tracker_db_file_move (iface, file_name, moved_file_name);
+
+ g_free (moved_file_name);
+ g_free (file_name);
+ g_free (prefix);
+ g_free (name);
+ }
- g_free (prefix);
- g_free (name);
valid = tracker_db_result_set_iter_next (result_set);
}
g_object_unref (result_set);
}
+}
- g_ptr_array_add (array, NULL);
+static inline void
+directory_move (TrackerDBInterface *iface,
+ const gchar *moved_from_uri,
+ const gchar *moved_to_uri)
+{
+ /* Stop watching old dir, start watching new dir */
+ tracker_watcher_remove_dir (moved_from_uri, TRUE, iface);
+
+ tracker_db_file_move (iface, moved_from_uri, moved_to_uri);
+ directory_move_files (iface, moved_from_uri, moved_to_uri);
- return (gchar**) g_ptr_array_free (array, FALSE);
+ tracker_watcher_add_dir (moved_to_uri, iface);
+}
+
+static gint
+get_memory_usage (void)
+{
+#if defined(__linux__)
+ gint fd, length, mem = 0;
+ gchar buffer[8192];
+ gchar *stat_file;
+ gchar **terms;
+
+ stat_file = g_strdup_printf ("/proc/%d/stat", tracker->pid);
+ fd = g_open (stat_file, O_RDONLY);
+ g_free (stat_file);
+
+ if (fd ==-1) {
+ return 0;
+ }
+
+ length = read (fd, buffer, 8192);
+ buffer[length] = 0;
+ close (fd);
+
+ terms = g_strsplit (buffer, " ", -1);
+
+ if (terms) {
+ gint i;
+
+ for (i = 0; i < 24; i++) {
+ if (!terms[i]) {
+ break;
+ }
+
+ if (i == 23) {
+ mem = 4 * atoi (terms[23]);
+ }
+ }
+ }
+
+ g_strfreev (terms);
+
+ return mem;
+#endif
+ return 0;
}
void
@@ -206,3 +619,2852 @@
{
/* Nothing to do? */
}
+
+void
+tracker_db_close (TrackerDBInterface *iface)
+{
+ if (iface) {
+ g_object_unref (iface);
+ }
+
+ g_message ("Closed database");
+}
+
+void
+tracker_db_refresh_all (TrackerDBInterface *iface)
+{
+#if 0
+ gboolean cache_trans = FALSE;
+ DBConnection *cache = db_con->cache;
+ DBConnection *emails = db_con->emails;
+
+ if (cache && tracker_db_interface_end_transaction (cache->db)) {
+ cache_trans = TRUE;
+ }
+
+ /* close and reopen all databases */
+ tracker_db_close (db_con->db);
+ tracker_db_close (db_con->blob->db);
+
+ tracker_db_close (emails->blob->db);
+ tracker_db_close (emails->common->db);
+ tracker_db_close (emails->db);
+
+ db_con->db = open_db_interface (TRACKER_DB_FILE_METADATA);
+
+ emails->common->db = open_db_interface (TRACKER_DB_COMMON);
+
+ open_email_db (emails);
+
+ if (cache_trans) {
+ tracker_db_interface_start_transaction (cache->db);
+ }
+
+#endif
+}
+
+gboolean
+tracker_db_exec_no_reply (TrackerDBInterface *iface,
+ const gchar *query,
+ ...)
+{
+ TrackerDBResultSet *result_set;
+ va_list args;
+
+ g_return_val_if_fail (TRACKER_IS_DB_INTERFACE (iface), FALSE);
+ g_return_val_if_fail (query != NULL, FALSE);
+
+ tracker_nfs_lock_obtain ();
+
+ va_start (args, query);
+ result_set = tracker_db_interface_execute_vquery (iface, NULL, query, args);
+ va_end (args);
+
+ if (result_set) {
+ g_object_unref (result_set);
+ }
+
+ tracker_nfs_lock_release ();
+
+ return TRUE;
+}
+
+TrackerDBResultSet *
+tracker_db_exec (TrackerDBInterface *iface,
+ const gchar *query,
+ ...)
+{
+ TrackerDBResultSet *result_set;
+ va_list args;
+
+ g_return_val_if_fail (TRACKER_IS_DB_INTERFACE (iface), NULL);
+ g_return_val_if_fail (query != NULL, NULL);
+
+ tracker_nfs_lock_obtain ();
+
+ va_start (args, query);
+ result_set = tracker_db_interface_execute_vquery (iface,
+ NULL,
+ query,
+ args);
+ va_end (args);
+
+ tracker_nfs_lock_release ();
+
+ return result_set;
+}
+
+TrackerDBResultSet *
+tracker_db_exec_proc (TrackerDBInterface *iface,
+ const gchar *procedure,
+ ...)
+{
+ TrackerDBResultSet *result_set;
+ va_list args;
+
+ g_return_val_if_fail (TRACKER_IS_DB_INTERFACE (iface), NULL);
+ g_return_val_if_fail (procedure != NULL, NULL);
+
+ va_start (args, procedure);
+ result_set = tracker_db_interface_execute_vprocedure (iface,
+ NULL,
+ procedure,
+ args);
+ va_end (args);
+
+ return result_set;
+}
+
+gchar *
+tracker_db_get_field_name (const gchar *service,
+ const gchar *meta_name)
+{
+ gint key_field;
+
+ /* Replace with tracker_ontology_get_field_column_in_services */
+ key_field = tracker_ontology_metadata_key_in_service (service, meta_name);
+
+ if (key_field > 0) {
+ return g_strdup_printf ("KeyMetadata%d", key_field);
+ }
+
+ if (strcasecmp (meta_name, "File:Path") == 0) return g_strdup ("Path");
+ if (strcasecmp (meta_name, "File:Name") == 0) return g_strdup ("Name");
+ if (strcasecmp (meta_name, "File:Mime") == 0) return g_strdup ("Mime");
+ if (strcasecmp (meta_name, "File:Size") == 0) return g_strdup ("Size");
+ if (strcasecmp (meta_name, "File:Rank") == 0) return g_strdup ("Rank");
+ if (strcasecmp (meta_name, "File:Modified") == 0) return g_strdup ("IndexTime");
+
+ return NULL;
+}
+
+TrackerDBResultSet *
+tracker_db_search_text (TrackerDBInterface *iface,
+ const gchar *service,
+ const gchar *search_string,
+ gint offset,
+ gint limit,
+ gboolean save_results,
+ gboolean detailed)
+{
+ TrackerQueryTree *tree;
+ TrackerDBResultSet *result_set, *result;
+ gchar **array;
+ GArray *hits;
+ gint count;
+ gboolean detailed_emails = FALSE, detailed_apps = FALSE;
+ gint service_array[255];
+ const gchar *procedure;
+ GArray *services = NULL;
+ GSList *duds = NULL;
+ guint i = 0;
+
+ g_return_val_if_fail (TRACKER_IS_DB_INTERFACE (iface), NULL);
+ g_return_val_if_fail (service != NULL, NULL);
+ g_return_val_if_fail (search_string != NULL, NULL);
+ g_return_val_if_fail (offset >= 0, NULL);
+
+ array = tracker_parser_text_into_array (search_string,
+ tracker->language,
+ tracker_config_get_max_word_length (tracker->config),
+ tracker_config_get_min_word_length (tracker->config));
+
+ result_set = tracker_db_exec_proc (iface,
+ "GetRelatedServiceIDs",
+ service,
+ service,
+ NULL);
+
+ if (result_set) {
+ gboolean valid = TRUE;
+ gint type_id;
+
+ while (valid) {
+ tracker_db_result_set_get (result_set, 0, &type_id, -1);
+ service_array[i] = type_id;
+ i++;
+
+ valid = tracker_db_result_set_iter_next (result_set);
+ }
+
+ service_array[i] = 0;
+ services = g_array_new (TRUE, TRUE, sizeof (gint));
+ g_array_append_vals (services, service_array, i);
+ g_object_unref (result_set);
+ }
+
+ tree = tracker_query_tree_new (search_string,
+ tracker->file_index,
+ tracker->config,
+ tracker->language,
+ services);
+ hits = tracker_query_tree_get_hits (tree, offset, limit);
+ result = NULL;
+
+ if (save_results) {
+ tracker_db_interface_start_transaction (iface);
+ tracker_db_exec_proc (iface,
+ "DeleteSearchResults1",
+ NULL);
+ }
+
+ count = 0;
+
+ for (i = 0; i < hits->len; i++) {
+ TrackerSearchHit hit;
+ char *str_id;
+
+ if (count >= limit) {
+ break;
+ }
+
+ hit = g_array_index (hits, TrackerSearchHit, i);
+ str_id = tracker_uint_to_string (hit.service_id);
+
+ /* We save results into SearchResults table instead of
+ * returing an array of array of strings
+ */
+ if (save_results) {
+ gchar *str_score;
+
+ str_score = tracker_int_to_string (hit.score);
+ tracker_db_exec_proc (iface,
+ "InsertSearchResult1",
+ str_id,
+ str_score,
+ NULL);
+ g_free (str_id);
+ g_free (str_score);
+
+ continue;
+ }
+
+ if (detailed) {
+ if (strcmp (service, "Emails") == 0) {
+ detailed_emails = TRUE;
+ procedure = "GetEmailByID";
+ } else if (strcmp (service, "Applications") == 0) {
+ detailed_apps = TRUE;
+ procedure = "GetApplicationByID";
+ } else {
+ procedure = "GetFileByID2";
+ }
+ } else {
+ procedure = "GetFileByID";
+ }
+
+ result_set = tracker_db_exec_proc (iface,
+ procedure,
+ str_id,
+ NULL);
+ g_free (str_id);
+
+ if (result_set) {
+ gchar *path;
+
+ tracker_db_result_set_get (result_set, 0, &path, -1);
+
+ if (!detailed || detailed_emails || detailed_apps ||
+ (detailed && g_file_test (path, G_FILE_TEST_EXISTS))) {
+ guint columns, i;
+
+ columns = tracker_db_result_set_get_n_columns (result_set);
+
+ if (G_UNLIKELY (!result)) {
+ guint columns;
+
+ columns = tracker_db_result_set_get_n_columns (result_set);
+ result = _tracker_db_result_set_new (columns);
+ }
+
+ _tracker_db_result_set_append (result);
+
+ for (i = 0; i < columns; i++) {
+ GValue value = { 0, };
+
+ _tracker_db_result_set_get_value (result_set, i, &value);
+ _tracker_db_result_set_set_value (result, i, &value);
+ g_value_unset (&value);
+ }
+ }
+
+ g_free (path);
+ g_object_unref (result_set);
+ } else {
+ g_warning ("Dud hit for search detected");
+ duds = g_slist_prepend (duds, &hit);
+ }
+ }
+
+ if (save_results) {
+ tracker_db_interface_end_transaction (iface);
+ }
+
+ /* Delete duds */
+ if (duds) {
+ GSList *words, *w;
+ Indexer *indexer;
+
+ words = tracker_query_tree_get_words (tree);
+ indexer = tracker_query_tree_get_indexer (tree);
+
+ for (w = words; w; w = w->next) {
+ tracker_remove_dud_hits (indexer, (const gchar *) w->data, duds);
+ }
+
+ g_slist_free (words);
+ }
+
+ g_object_unref (tree);
+ g_array_free (hits, TRUE);
+ g_array_free (services, TRUE);
+
+ if (!result) {
+ return NULL;
+ }
+
+ if (tracker_db_result_set_get_n_rows (result) == 0) {
+ g_object_unref (result);
+ return NULL;
+ }
+
+ tracker_db_result_set_rewind (result);
+
+ return result;
+}
+
+TrackerDBResultSet *
+tracker_db_metadata_get (TrackerDBInterface *iface,
+ const gchar *id,
+ const gchar *key)
+{
+ TrackerField *def;
+ const gchar *proc = NULL;
+
+ g_return_val_if_fail (TRACKER_IS_DB_INTERFACE (iface), NULL);
+ g_return_val_if_fail (id, NULL);
+ g_return_val_if_fail (key, NULL);
+
+ def = tracker_ontology_get_field_def (key);
+
+ if (!def) {
+ g_warning ("Metadata not found for id:'%s' and type:'%s'", id, key);
+ return NULL;
+ }
+
+ switch (tracker_field_get_data_type (def)) {
+ case TRACKER_FIELD_TYPE_INDEX:
+ case TRACKER_FIELD_TYPE_STRING:
+ case TRACKER_FIELD_TYPE_DOUBLE:
+ proc = "GetMetadata";
+ break;
+
+ case TRACKER_FIELD_TYPE_INTEGER:
+ case TRACKER_FIELD_TYPE_DATE:
+ proc = "GetMetadataNumeric";
+ break;
+
+ case TRACKER_FIELD_TYPE_FULLTEXT:
+ proc = "GetContents";
+ break;
+
+ case TRACKER_FIELD_TYPE_KEYWORD:
+ proc = "GetMetadataKeyword";
+ break;
+
+ default:
+ g_warning ("Metadata could not be retrieved as type:%d is not supported",
+ tracker_field_get_data_type (def));
+ return NULL;
+ }
+
+ return tracker_db_exec_proc (iface,
+ proc,
+ id,
+ tracker_field_get_id (def),
+ NULL);
+}
+
+/* Gets specified metadata value as a single row (multple values for a
+ * metadata type are returned delimited by "|" )
+ */
+gchar *
+tracker_db_metadata_get_delimited (TrackerDBInterface *iface,
+ const gchar *id,
+ const gchar *key)
+{
+ TrackerDBResultSet *result_set;
+ GString *s = NULL;
+
+ g_return_val_if_fail (TRACKER_IS_DB_INTERFACE (iface), NULL);
+ g_return_val_if_fail (id != NULL, NULL);
+ g_return_val_if_fail (key != NULL, NULL);
+
+ result_set = tracker_db_metadata_get (iface, id, key);
+
+ if (result_set) {
+ gchar *str;
+ gboolean valid = TRUE;
+
+ while (valid) {
+ tracker_db_result_set_get (result_set, 0, &str, -1);
+
+ if (s) {
+ g_string_append_printf (s, "|%s", str);
+ } else {
+ s = g_string_new (str);
+ }
+
+ g_free (str);
+ valid = tracker_db_result_set_iter_next (result_set);
+ }
+
+ g_object_unref (result_set);
+ }
+
+ if (s) {
+ return g_string_free (s, FALSE);
+ } else {
+ return NULL;
+ }
+}
+
+gchar *
+tracker_db_metadata_get_related_names (TrackerDBInterface *iface,
+ const gchar *name)
+{
+ TrackerDBResultSet *result_set;
+
+ g_return_val_if_fail (TRACKER_IS_DB_INTERFACE (iface), NULL);
+ g_return_val_if_fail (name != NULL, NULL);
+
+ result_set = tracker_db_exec_proc (iface,
+ "GetMetadataAliasesForName",
+ name,
+ name,
+ NULL);
+
+ if (result_set) {
+ GString *s = NULL;
+ gboolean valid = TRUE;
+ gint id;
+
+ while (valid) {
+ tracker_db_result_set_get (result_set, 1, &id, -1);
+
+ if (s) {
+ g_string_append_printf (s, ", %d", id);
+ } else {
+ s = g_string_new ("");
+ g_string_append_printf (s, "%d", id);
+ }
+
+ valid = tracker_db_result_set_iter_next (result_set);
+ }
+
+ g_object_unref (result_set);
+
+ return g_string_free (s, FALSE);
+ }
+
+ return NULL;
+}
+
+TrackerDBResultSet *
+tracker_db_xesam_get_metadata_names (TrackerDBInterface *iface,
+ const gchar *name)
+{
+ TrackerDBResultSet *result_set;
+
+ g_return_val_if_fail (TRACKER_IS_DB_INTERFACE (iface), NULL);
+ g_return_val_if_fail (name != NULL, NULL);
+
+ result_set = tracker_db_exec_proc (iface,
+ "GetXesamMetaDataLookups",
+ name,
+ NULL);
+
+ return result_set;
+}
+
+TrackerDBResultSet *
+tracker_db_xesam_get_service_names (TrackerDBInterface *iface,
+ const gchar *name)
+{
+ TrackerDBResultSet *result_set;
+
+ g_return_val_if_fail (TRACKER_IS_DB_INTERFACE (iface), NULL);
+ g_return_val_if_fail (name != NULL, NULL);
+
+ result_set = tracker_db_exec_proc (iface,
+ "GetXesamServiceLookups",
+ name,
+ NULL);
+
+ return result_set;
+}
+
+const gchar *
+tracker_db_metadata_get_table (TrackerFieldType type)
+{
+ switch (type) {
+ case TRACKER_FIELD_TYPE_INDEX:
+ case TRACKER_FIELD_TYPE_STRING:
+ case TRACKER_FIELD_TYPE_DOUBLE:
+ return "ServiceMetaData";
+
+ case TRACKER_FIELD_TYPE_INTEGER:
+ case TRACKER_FIELD_TYPE_DATE:
+ return "ServiceNumericMetaData";
+
+ case TRACKER_FIELD_TYPE_BLOB:
+ return "ServiceBlobMetaData";
+
+ case TRACKER_FIELD_TYPE_KEYWORD:
+ return "ServiceKeywordMetaData";
+
+ default:
+ break;
+ }
+
+ return NULL;
+}
+
+/* Fast insert of embedded metadata. Table parameter is used to build
+ * up a unique word list of indexable contents.
+ */
+void
+tracker_db_metadata_insert_single_embedded (TrackerDBInterface *iface,
+ const gchar *service,
+ const gchar *id,
+ const gchar *key,
+ const gchar *value,
+ GHashTable *hash_table)
+{
+ gchar *array[1];
+
+ 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 (key != NULL);
+ g_return_if_fail (value != NULL);
+ g_return_if_fail (hash_table != NULL);
+
+ array[0] = (gchar*) value;
+
+ tracker_db_metadata_insert_embedded (iface, service, id, key, array, hash_table);
+}
+
+void
+tracker_db_metadata_insert_embedded (TrackerDBInterface *iface,
+ const gchar *service,
+ const gchar *id,
+ const gchar *key,
+ gchar **values,
+ GHashTable *hash_table)
+{
+ TrackerField *def;
+ gint key_field = 0;
+ guint i;
+
+ 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 (key != NULL);
+ g_return_if_fail (values != NULL);
+ g_return_if_fail (hash_table != NULL);
+
+ def = tracker_ontology_get_field_def (key);
+
+ if (!def) {
+ g_warning ("Metadata with key:'%s' not found", key);
+ return;
+ }
+
+ g_return_if_fail (tracker_field_get_embedded (def));
+
+ key_field = tracker_ontology_metadata_key_in_service (service, key);
+
+ switch (tracker_field_get_data_type (def)) {
+ case TRACKER_FIELD_TYPE_KEYWORD:
+ for (i = 0; i < g_strv_length (values); i++) {
+ if (!values[i] || !values[i][0]) {
+ continue;
+ }
+
+ if (hash_table) {
+ gchar *mvalue;
+
+ mvalue = tracker_parser_text_to_string (values[i],
+ tracker->language,
+ tracker_config_get_max_word_length (tracker->config),
+ tracker_config_get_min_word_length (tracker->config),
+ FALSE,
+ FALSE,
+ FALSE);
+
+ hash_table = tracker_parser_text_fast (hash_table,
+ mvalue,
+ tracker_field_get_weight (def));
+
+ g_free (mvalue);
+ }
+
+ tracker_db_exec_proc (iface,
+ "SetMetadataKeyword",
+ id,
+ tracker_field_get_id (def),
+ values[i],
+ NULL);
+ }
+ break;
+
+ case TRACKER_FIELD_TYPE_INDEX:
+ for (i = 0; i < g_strv_length (values); i++) {
+ gchar *mvalue;
+
+ if (!values[i] || !values[i][0]) {
+ continue;
+ }
+
+ mvalue = tracker_parser_text_to_string (values[i],
+ tracker->language,
+ tracker_config_get_max_word_length (tracker->config),
+ tracker_config_get_min_word_length (tracker->config),
+ tracker_field_get_filtered (def),
+ tracker_field_get_filtered (def),
+ tracker_field_get_delimited (def));
+
+ hash_table = tracker_parser_text_fast (hash_table,
+ mvalue,
+ tracker_field_get_weight (def));
+
+ tracker_db_exec_proc (iface,
+ "SetMetadata",
+ id,
+ tracker_field_get_id (def),
+ mvalue,
+ values[i],
+ NULL);
+
+ g_free (mvalue);
+ }
+ break;
+
+ case TRACKER_FIELD_TYPE_FULLTEXT:
+ for (i = 0; i < g_strv_length (values); i++) {
+ if (!values[i] || !values[i][0]) {
+ continue;
+ }
+
+ if (hash_table) {
+ hash_table = tracker_parser_text (hash_table,
+ values[i],
+ tracker_field_get_weight (def),
+ tracker->language,
+ tracker_config_get_max_words_to_index (tracker->config),
+ tracker_config_get_max_word_length (tracker->config),
+ tracker_config_get_min_word_length (tracker->config),
+ tracker_field_get_filtered (def),
+ tracker_field_get_delimited (def));
+ }
+
+ db_save_full_text (tracker_db_manager_get_db_interface_content (iface),
+ id,
+ values[i],
+ strlen (values[i]));
+ }
+ break;
+
+ case TRACKER_FIELD_TYPE_DOUBLE:
+ for (i = 0; i < g_strv_length (values); i++) {
+ if (!values[i]) {
+ continue;
+ }
+
+ tracker_db_exec_proc (iface,
+ "SetMetadata",
+ id,
+ tracker_field_get_id (def),
+ " ",
+ values[i],
+ NULL);
+ }
+ break;
+
+ case TRACKER_FIELD_TYPE_STRING:
+ for (i = 0; i < g_strv_length (values); i++) {
+ gchar *mvalue;
+
+ if (!values[i]) {
+ continue;
+ }
+
+ mvalue = tracker_parser_text_to_string (values[i],
+ tracker->language,
+ tracker_config_get_max_word_length (tracker->config),
+ tracker_config_get_min_word_length (tracker->config),
+ tracker_field_get_filtered (def),
+ tracker_field_get_filtered (def),
+ tracker_field_get_delimited (def));
+ tracker_db_exec_proc (iface,
+ "SetMetadata",
+ id,
+ tracker_field_get_id (def),
+ mvalue,
+ values[i],
+ NULL);
+
+ g_free (mvalue);
+ }
+ break;
+
+ case TRACKER_FIELD_TYPE_INTEGER:
+ for (i = 0; i < g_strv_length (values); i++) {
+ if (!values[i]) {
+ continue;
+ }
+
+ tracker_db_exec_proc (iface,
+ "SetMetadataNumeric",
+ id,
+ tracker_field_get_id (def),
+ values[i],
+ NULL);
+ }
+ break;
+
+ case TRACKER_FIELD_TYPE_DATE:
+ for (i = 0; i < g_strv_length (values); i++) {
+ gchar *mvalue;
+
+ if (!values[i]) {
+ continue;
+ }
+
+ mvalue = format_date (values[i]);
+
+ if (!mvalue) {
+ g_warning ("Could not format date:'%s'", values[i]);
+ continue;
+ }
+
+ tracker_db_exec_proc (iface,
+ "SetMetadataNumeric",
+ id,
+ tracker_field_get_id (def),
+ mvalue,
+ NULL);
+
+ g_free (mvalue);
+ }
+ break;
+
+ default:
+ g_warning ("Metadata could not be set as type:%d for "
+ "metadata:'%s' is not supported",
+ tracker_field_get_data_type (def),
+ key);
+ break;
+ }
+
+ if (key_field > 0 && values[0]) {
+ gchar *esc_value = NULL;
+
+ if (tracker_field_get_data_type (def) == TRACKER_FIELD_TYPE_DATE) {
+ esc_value = format_date (values[0]);
+ } else {
+ gchar *str;
+
+ str = tracker_string_list_to_string (values, g_strv_length (values), '|');
+ esc_value = tracker_escape_string (str);
+ g_free (str);
+ }
+
+ if (esc_value) {
+ tracker_db_exec_no_reply (iface,
+ "update Services set KeyMetadata%d = '%s' where id = %s",
+ key_field,
+ esc_value,
+ id);
+
+ g_free (esc_value);
+ }
+ }
+}
+
+void
+tracker_db_metadata_set_single (TrackerDBInterface *iface,
+ const gchar *service,
+ const gchar *id,
+ const gchar *key,
+ const gchar *value,
+ gboolean do_backup)
+{
+ gchar *array[1];
+
+ 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 (key != NULL);
+ g_return_if_fail (value != NULL);
+
+ array[0] = (gchar*) value;
+
+ tracker_db_metadata_set (iface, service, id, key, array, do_backup);
+}
+
+gchar *
+tracker_db_metadata_set (TrackerDBInterface *iface,
+ const gchar *service,
+ const gchar *id,
+ const gchar *key,
+ gchar **values,
+ gboolean do_backup)
+{
+ TrackerField *def;
+ gchar *old_value = NULL;
+ gchar *new_value = NULL;
+ gchar *res_service;
+ gboolean update_index;
+ gint key_field = 0;
+ guint i;
+ guint length;
+ 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 (key != NULL, NULL);
+ g_return_val_if_fail (values != NULL, NULL);
+
+ if (strcmp (id, "0") == 0) {
+ return NULL;
+ }
+
+ def = tracker_ontology_get_field_def (key);
+
+ if (!def) {
+ g_warning ("Metadata type:'%s' not found", key);
+ return NULL;
+ }
+
+ res_service = tracker_db_service_get_by_entity (iface, id);
+
+ if (!res_service) {
+ g_warning ("Service not found for id:'%s'", id);
+ return NULL;
+ }
+
+ length = g_strv_length (values);
+
+ if (tracker_field_get_multiple_values (def) && length > 1) {
+ str = g_string_new ("");
+ }
+
+ key_field = tracker_ontology_metadata_key_in_service (res_service, key);
+
+ update_index =
+ tracker_field_get_data_type (def) == TRACKER_FIELD_TYPE_INDEX ||
+ tracker_field_get_data_type (def) == TRACKER_FIELD_TYPE_KEYWORD ||
+ tracker_field_get_data_type (def) == TRACKER_FIELD_TYPE_FULLTEXT;
+
+ if (update_index) {
+ old_value = tracker_db_metadata_get_delimited (iface, 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);
+ }
+
+ switch (tracker_field_get_data_type (def)) {
+ case TRACKER_FIELD_TYPE_KEYWORD:
+ for (i = 0; i < length; i++) {
+ if (!values[i] || !values[i][0]) {
+ continue;
+ }
+
+ tracker_db_exec_proc (iface,
+ "SetMetadataKeyword",
+ id,
+ tracker_field_get_id (def),
+ values[i],
+ NULL);
+
+ /* 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]);
+ }
+
+ if (str) {
+ g_string_append_printf (str, " %s ", values[i]);
+ } else {
+ new_value = values[i];
+ }
+
+ g_message ("Saving keyword:'%s'", values[i]);
+ }
+ break;
+
+ case TRACKER_FIELD_TYPE_INDEX:
+ for (i = 0; i < length; i++) {
+ gchar *mvalue;
+
+ if (!values[i] || !values[i][0]) {
+ continue;
+ }
+
+ if (str) {
+ g_string_append_printf (str, " %s ", values[i]);
+ } else {
+ new_value = values[i];
+ }
+
+ /* 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]);
+ }
+
+ mvalue = tracker_parser_text_to_string (values[i],
+ tracker->language,
+ tracker_config_get_max_word_length (tracker->config),
+ tracker_config_get_min_word_length (tracker->config),
+ tracker_field_get_filtered (def),
+ tracker_field_get_filtered (def),
+ tracker_field_get_delimited (def));
+ tracker_db_exec_proc (iface,
+ "SetMetadata",
+ id,
+ tracker_field_get_id (def),
+ mvalue,
+ values[i],
+ NULL);
+ g_free (mvalue);
+ }
+ break;
+
+ case TRACKER_FIELD_TYPE_FULLTEXT:
+ /* We do not support multiple values for fulltext clobs */
+ if (values[0]) {
+ /* FIXME: is the blog the metadata blob/email
+ * blob or something else?
+ */
+ db_save_full_text (tracker_db_manager_get_db_interface_content (iface),
+ id,
+ values[0],
+ strlen (values[0]));
+ new_value = values[0];
+ }
+ break;
+
+ case TRACKER_FIELD_TYPE_STRING:
+ for (i = 0; i < length; i++) {
+ gchar *mvalue;
+
+ if (!values[i] || !values[i][0]) {
+ continue;
+ }
+
+ /* 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]);
+ }
+
+ mvalue = tracker_parser_text_to_string (values[i],
+ tracker->language,
+ tracker_config_get_max_word_length (tracker->config),
+ tracker_config_get_min_word_length (tracker->config),
+ tracker_field_get_filtered (def),
+ tracker_field_get_filtered (def),
+ tracker_field_get_delimited (def));
+ tracker_db_exec_proc (iface,
+ "SetMetadata",
+ id,
+ tracker_field_get_id (def),
+ mvalue,
+ values[i],
+ NULL);
+ g_free (mvalue);
+ }
+ break;
+
+ case TRACKER_FIELD_TYPE_DOUBLE:
+ for (i = 0; i < length; i++) {
+ if (!values[i] || !values[i][0]) {
+ continue;
+ }
+
+ /* 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_db_exec_proc (iface,
+ "SetMetadata",
+ id,
+ tracker_field_get_id (def),
+ " ",
+ values[i],
+ NULL);
+ }
+ break;
+
+ case TRACKER_FIELD_TYPE_INTEGER:
+ for (i = 0; i < length; i++) {
+ if (!values[i] || !values[i][0]) {
+ continue;
+ }
+
+ /* 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_db_exec_proc (iface,
+ "SetMetadataNumeric",
+ id,
+ tracker_field_get_id (def),
+ values[i],
+ NULL);
+ }
+ break;
+
+ case TRACKER_FIELD_TYPE_DATE:
+ for (i = 0; i < length; i++) {
+ gchar *mvalue;
+
+ if (!values[i] || !values[i][0]) {
+ continue;
+ }
+
+ mvalue = format_date (values[i]);
+
+ if (!mvalue) {
+ g_warning ("Could not format date:'%s'", values[i]);
+ continue;
+ }
+
+ tracker_db_exec_proc (iface,
+ "SetMetadataNumeric",
+ id,
+ tracker_field_get_id (def),
+ mvalue,
+ NULL);
+
+ /* 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),
+ mvalue);
+ }
+
+
+ g_free (mvalue);
+ }
+ break;
+
+ default:
+ g_warning ("Metadata could not be set as type:%d for "
+ "metadata:'%s' is not supported",
+ tracker_field_get_data_type (def),
+ key);
+ break;
+ }
+
+ if (key_field > 0) {
+ if (values[0]) {
+ gchar *esc_value = NULL;
+
+ if (tracker_field_get_data_type (def) == TRACKER_FIELD_TYPE_DATE) {
+ esc_value = format_date (values[0]);
+
+ if (!esc_value) {
+ return NULL;
+ }
+ } else {
+ gchar *str;
+
+ str = tracker_string_list_to_string (values, length, '|');
+ esc_value = tracker_escape_string (str);
+ g_free (str);
+ }
+
+ tracker_db_exec_no_reply (iface,
+ "update Services set KeyMetadata%d = '%s' where id = %s",
+ key_field,
+ esc_value,
+ id);
+
+ g_free (esc_value);
+ }
+
+ }
+
+ /* Update fulltext index differentially with current and new
+ * values.
+ */
+ if (update_index) {
+ if (str) {
+ update_metadata_index (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);
+ }
+ }
+
+ g_free (old_value);
+ g_free (res_service);
+
+ return NULL;
+}
+
+void
+tracker_db_metadata_delete_value (TrackerDBInterface *iface,
+ const gchar *service,
+ const gchar *id,
+ const gchar *key,
+ const gchar *value)
+{
+ TrackerField *def;
+ gchar *old_value = NULL;
+ gchar *new_value = NULL;
+ gchar *mvalue;
+ gchar *res_service;
+ gboolean update_index;
+ gint key_field;
+
+ 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 (key != NULL);
+
+ /* Get type details */
+ def = tracker_ontology_get_field_def (key);
+
+ if (!def) {
+ return;
+ }
+
+ if (!tracker_field_get_embedded (def) &&
+ tracker_ontology_service_type_has_embedded (service)) {
+ backup_delete_non_embedded_metadata_value (iface,
+ id,
+ tracker_field_get_id (def),
+ value);
+ }
+
+ res_service = tracker_db_service_get_by_entity (iface, id);
+
+ if (!res_service) {
+ g_warning ("Entity not found");
+ return;
+ }
+
+ key_field = tracker_ontology_metadata_key_in_service (res_service, key);
+
+ update_index =
+ tracker_field_get_data_type (def) == TRACKER_FIELD_TYPE_INDEX ||
+ tracker_field_get_data_type (def) == TRACKER_FIELD_TYPE_KEYWORD;
+
+ if (update_index) {
+ /* Get current value and claculate the new value */
+ old_value = tracker_db_metadata_get_delimited (iface, id, key);
+
+ if (old_value) {
+ new_value = remove_value (old_value, value);
+ } else {
+ g_free (res_service);
+ return;
+ }
+ }
+
+ /* Perform deletion */
+ switch (tracker_field_get_data_type (def)) {
+ case TRACKER_FIELD_TYPE_INDEX:
+ case TRACKER_FIELD_TYPE_STRING:
+ mvalue = tracker_parser_text_to_string (value,
+ tracker->language,
+ tracker_config_get_max_word_length (tracker->config),
+ tracker_config_get_min_word_length (tracker->config),
+ tracker_field_get_filtered (def),
+ tracker_field_get_filtered (def),
+ tracker_field_get_delimited (def));
+ tracker_db_exec_proc (iface,
+ "DeleteMetadataValue",
+ id,
+ tracker_field_get_id (def),
+ mvalue,
+ NULL);
+ g_free (mvalue);
+ break;
+
+ case TRACKER_FIELD_TYPE_DOUBLE:
+ tracker_db_exec_proc (iface,
+ "DeleteMetadataValue",
+ id,
+ tracker_field_get_id (def),
+ value,
+ NULL);
+ break;
+
+ case TRACKER_FIELD_TYPE_INTEGER:
+ case TRACKER_FIELD_TYPE_DATE:
+ tracker_db_exec_proc (iface,
+ "DeleteMetadataNumericValue",
+ id,
+ tracker_field_get_id (def),
+ value,
+ NULL);
+ break;
+
+ case TRACKER_FIELD_TYPE_KEYWORD:
+ tracker_db_exec_proc (iface,
+ "DeleteMetadataKeywordValue",
+ id,
+ tracker_field_get_id (def),
+ value,
+ NULL);
+ break;
+
+ default:
+ g_warning ("Metadata could not be deleted as type:%d for "
+ "metadata:'%s' is not supported",
+ tracker_field_get_data_type (def),
+ key);
+ break;
+ }
+
+ if (key_field > 0) {
+ TrackerDBResultSet *result_set;
+ gchar *value;
+
+ result_set = tracker_db_metadata_get (iface, id, key);
+
+ if (result_set) {
+ tracker_db_result_set_get (result_set, 0, &value, -1);
+
+ if (value) {
+ gchar *esc_value;
+
+ esc_value = tracker_escape_string (value);
+ tracker_db_exec_no_reply (iface,
+ "update Services set KeyMetadata%d = '%s' where id = %s",
+ key_field,
+ esc_value,
+ id);
+
+ g_free (esc_value);
+ g_free (value);
+ } else {
+ tracker_db_exec_no_reply (iface,
+ "update Services set KeyMetadata%d = NULL where id = %s",
+ key_field,
+ id);
+ }
+
+ g_object_unref (result_set);
+ } else {
+ tracker_db_exec_no_reply (iface,
+ "update Services set KeyMetadata%d = NULL where id = %s",
+ key_field,
+ id);
+ }
+ }
+
+ /* Update fulltext index differentially with old and new values */
+ if (update_index) {
+ update_metadata_index (id,
+ service,
+ def,
+ old_value,
+ new_value);
+ }
+
+ g_free (new_value);
+ g_free (old_value);
+ g_free (res_service);
+}
+
+void
+tracker_db_metadata_delete (TrackerDBInterface *iface,
+ const gchar *service,
+ const gchar *id,
+ const gchar *key,
+ gboolean update_indexes)
+{
+ TrackerField *def;
+ gchar *old_value = NULL;
+ gchar *res_service;
+ gboolean update_index;
+ gint key_field;
+
+ 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 (key != NULL);
+
+ /* Get type details */
+ def = tracker_ontology_get_field_def(key);
+
+ if (!def) {
+ return;
+ }
+
+ if (!tracker_field_get_embedded (def) &&
+ tracker_ontology_service_type_has_embedded (service)) {
+ backup_delete_non_embedded_metadata (iface,
+ id,
+ tracker_field_get_id (def));
+ }
+
+ res_service = tracker_db_service_get_by_entity (iface, id);
+
+ if (!res_service) {
+ g_warning ("Entity not found");
+ return;
+ }
+
+ key_field = tracker_ontology_metadata_key_in_service (res_service, key);
+
+ update_index =
+ update_indexes &&
+ (tracker_field_get_data_type (def) == TRACKER_FIELD_TYPE_INDEX ||
+ tracker_field_get_data_type (def) == TRACKER_FIELD_TYPE_KEYWORD);
+
+ if (update_index) {
+ /* Get current value */
+ old_value = tracker_db_metadata_get_delimited (iface, id, key);
+ }
+
+ if (key_field > 0) {
+ tracker_db_exec_no_reply (iface,
+ "update Services set KeyMetadata%d = NULL where id = %s",
+ key_field, id);
+ }
+
+ /* Perform deletion */
+ switch (tracker_field_get_data_type (def)) {
+ case TRACKER_FIELD_TYPE_INDEX:
+ case TRACKER_FIELD_TYPE_STRING:
+ case TRACKER_FIELD_TYPE_DOUBLE:
+ tracker_db_exec_proc (iface,
+ "DeleteMetadata",
+ id,
+ tracker_field_get_id (def),
+ NULL);
+ break;
+
+ case TRACKER_FIELD_TYPE_INTEGER:
+ case TRACKER_FIELD_TYPE_DATE:
+ tracker_db_exec_proc (iface,
+ "DeleteMetadataNumeric",
+ id,
+ tracker_field_get_id (def),
+ NULL);
+ break;
+
+ case TRACKER_FIELD_TYPE_KEYWORD:
+ tracker_db_exec_proc (iface,
+ "DeleteMetadataKeyword",
+ id,
+ tracker_field_get_id (def),
+ NULL);
+ break;
+
+ case TRACKER_FIELD_TYPE_FULLTEXT:
+ tracker_db_exec_proc (iface,
+ "DeleteContent",
+ id,
+ tracker_field_get_id (def),
+ NULL);
+ break;
+
+ default:
+ g_warning ("Metadata could not be deleted as this "
+ "operation is not supported by type:%d "
+ "for metadata:'%s'",
+ tracker_field_get_data_type (def),
+ key);
+ break;
+ }
+
+
+ /* Update fulltext index differentially with old values and NULL */
+ if (update_index && old_value) {
+ update_metadata_index (id, service, def, old_value, " ");
+ }
+
+ g_free (old_value);
+ g_free (res_service);
+}
+
+TrackerDBResultSet *
+tracker_db_live_search_get_hit_count (TrackerDBInterface *iface,
+ const gchar *search_id)
+{
+ /* SELECT count(*)
+ * FROM LiveSearches
+ * WHERE SearchID = ? */
+
+ g_return_val_if_fail (TRACKER_IS_DB_INTERFACE (iface), NULL);
+ g_return_val_if_fail (search_id != NULL, NULL);
+
+ return tracker_db_exec_proc (iface,
+ "GetLiveSearchHitCount",
+ search_id,
+ NULL);
+}
+
+void
+tracker_db_live_search_start (TrackerDBInterface *iface,
+ const gchar *from_query,
+ const gchar *join_query,
+ const gchar *where_query,
+ const gchar *search_id)
+{
+ /* INSERT
+ * INTO LiveSearches
+ * SELECT ID, SEARCH_ID FROM_QUERY WHERE_QUERY */
+
+ g_return_if_fail (TRACKER_IS_DB_INTERFACE (iface));
+ g_return_if_fail (from_query != NULL);
+ g_return_if_fail (join_query != NULL);
+ g_return_if_fail (where_query != NULL);
+ g_return_if_fail (search_id != NULL);
+
+ tracker_db_exec_no_reply (iface,
+ "INSERT INTO LiveSearches SELECT S.ID, '%s' %s %s %s",
+ search_id,
+ from_query,
+ join_query,
+ where_query);
+}
+
+void
+tracker_db_live_search_stop (TrackerDBInterface *iface,
+ const gchar *search_id)
+{
+ /* DELETE
+ * FROM LiveSearches as X
+ * WHERE E.SearchID = ? */
+
+ g_return_if_fail (TRACKER_IS_DB_INTERFACE (iface));
+ g_return_if_fail (search_id != NULL);
+
+ db_exec_proc_no_reply (iface,
+ "LiveSearchStopSearch",
+ search_id,
+ NULL);
+}
+
+TrackerDBResultSet *
+tracker_db_live_search_get_all_ids (TrackerDBInterface *iface,
+ const gchar *search_id)
+{
+ /* Contract, in @result:
+ * ServiceID is #1 */
+
+ /*
+ * SELECT X.ServiceID
+ * FROM LiveSearches as X
+ * WHERE X.SearchID = SEARCH_ID
+ */
+
+ g_return_val_if_fail (TRACKER_IS_DB_INTERFACE (iface), NULL);
+ g_return_val_if_fail (search_id != NULL, NULL);
+
+ return tracker_db_exec_proc (iface,
+ "GetLiveSearchAllIDs",
+ search_id,
+ NULL);
+}
+
+TrackerDBResultSet *
+tracker_db_live_search_get_new_ids (TrackerDBInterface *iface,
+ const gchar *search_id,
+ const gchar *from_query,
+ const gchar *query_joins,
+ const gchar *where_query)
+{
+ TrackerDBResultSet *result_set;
+
+ /* Contract, in @result:
+ * ServiceID is #1
+ * EventType is #2 */
+
+ /*
+ * SELECT E.ServiceID, E.EventType
+ * FROM_QUERY, LiveSearches as X, Events as E
+ * QUERY_JOINS
+ * WHERE_QUERY
+ * AND X.ServiceID = E.ServiceID
+ * AND X.SearchID = 'SEARCH_ID'
+ * AND E.EventType = 'Update'
+ * UNION
+ * SELECT E.ServiceID, E.EventType
+ * FROM_QUERY, Events as E
+ * QUERY_JOINS
+ * WHERE_QUERY
+ * AND E.ServiceID = S.ID
+ * AND E.EventType = 'Create'
+ */
+
+ /*
+ * INSERT INTO LiveSearches
+ * SELECT E.ServiceID, 'SEARCH_ID'
+ * FROM_QUERY, Events as E
+ * QUERY_JOINS
+ * WHERE_QUERY
+ * AND E.ServiceID = S.ID
+ * AND E.EventType = 'Create'
+ */
+
+ g_return_val_if_fail (TRACKER_IS_DB_INTERFACE (iface), NULL);
+ g_return_val_if_fail (search_id != NULL, NULL);
+ g_return_val_if_fail (from_query != NULL, NULL);
+ g_return_val_if_fail (query_joins != NULL, NULL);
+ g_return_val_if_fail (where_query != NULL, NULL);
+
+ result_set = tracker_db_exec (iface,
+ "SELECT E.ServiceID, E.EventType "
+ "%s%s LiveSearches as X, Events as E " /* FROM A1 */
+ "%s" /* JOINS A2 */
+ "%s" /* WHERE A3 */
+ "%sX.ServiceID = E.ServiceID "
+ "AND X.SearchID = '%s' " /* A4 */
+ "AND E.EventType = 'Update' "
+ "UNION "
+ "SELECT E.ServiceID, E.EventType "
+ "%s%s Events as E " /* FROM B1 */
+ "%s" /* JOINS B2 */
+ "%s" /* WHERE B3 */
+ "%sE.ServiceID = S.ID "
+ "AND E.EventType = 'Create' ",
+ from_query ? from_query : "FROM", /* A1 */
+ from_query ? "," : "", /* A1 */
+ query_joins, /* A2 */
+ where_query ? where_query : "WHERE", /* A3 */
+ where_query ? "AND " : "", /* A3 */
+ search_id, /* A4 */
+ from_query ? from_query : "FROM", /* B1 */
+ from_query ? "," : "", /* B1 */
+ query_joins, /* B2 */
+ where_query ? where_query : "WHERE", /* B3 */
+ where_query ? "AND " : ""); /* B3 */
+
+ tracker_db_exec_no_reply (iface,
+ "INSERT INTO LiveSearches "
+ "SELECT E.ServiceID, '%s' " /* B0 */
+ "%s%s Events as E " /* FROM B1 */
+ "%s" /* JOINS B2 */
+ "%s" /* WHERE B3 */
+ "%sE.ServiceID = S.ID"
+ "AND E.EventType = 'Create' ",
+ search_id, /* B0 */
+ from_query ? from_query : "FROM", /* B1 */
+ from_query ? "," : "", /* B1 */
+ query_joins, /* B2 */
+ where_query ? where_query : "WHERE", /* B3 */
+ where_query ? "AND " : ""); /* B3 */
+
+ return result_set;
+}
+
+TrackerDBResultSet*
+tracker_db_live_search_get_deleted_ids (TrackerDBInterface *iface,
+ const gchar *search_id)
+{
+ /* SELECT E.ServiceID
+ * FROM Events as E, LiveSearches as X
+ * WHERE E.ServiceID = X.ServiceID
+ * AND X.SearchID = ?
+ * AND E.EventType IS 'Delete' */
+
+ /* DELETE FROM LiveSearches AS Y WHERE Y.ServiceID IN
+ * SELECT ServiceID FROM Events as E, LiveSearches as X
+ * WHERE E.ServiceID = X.ServiceID
+ * AND X.SearchID = ?
+ * AND E.EventType IS 'Delete' */
+
+ TrackerDBResultSet *result_set;
+
+ g_return_val_if_fail (TRACKER_IS_DB_INTERFACE (iface), NULL);
+ g_return_val_if_fail (search_id != NULL, NULL);
+
+ result_set = tracker_db_exec_proc (iface,
+ "GetLiveSearchDeletedIDs",
+ search_id,
+ NULL);
+
+ db_exec_proc_no_reply (iface,
+ "DeleteLiveSearchDeletedIDs",
+ search_id,
+ NULL);
+ return result_set;
+}
+
+TrackerDBResultSet *
+tracker_db_live_search_get_hit_data (TrackerDBInterface *iface,
+ const gchar *search_id,
+ GStrv fields)
+{
+ g_return_val_if_fail (TRACKER_IS_DB_INTERFACE (iface), NULL);
+ g_return_val_if_fail (search_id != NULL, NULL);
+
+ return tracker_db_exec (iface,
+ "SELECT * FROM LiveSearches as X "
+ "WHERE X.SearchID = '%s'",
+ search_id);
+}
+
+void
+tracker_db_xesam_delete_handled_events (TrackerDBInterface *iface)
+{
+ g_return_if_fail (TRACKER_IS_DB_INTERFACE (iface));
+
+ db_exec_proc_no_reply (iface,
+ "DeleteHandledEvents",
+ NULL);
+}
+
+/* Deprecated */
+guint32
+tracker_db_service_create (TrackerDBInterface *iface,
+ const gchar *service,
+ TrackerDBFileInfo *info)
+{
+ TrackerDBResultSet *result_set;
+ TrackerDBResultSet *result_set_proc;
+ TrackerDBInterface *iface_common;
+ gint i;
+ guint32 id = 0;
+ gchar *sid;
+ gchar *str_mtime;
+ const gchar *str_is_dir;
+ const gchar *str_is_link;
+ gchar *str_filesize;
+ gchar *str_offset;
+ gchar *str_aux;
+ gint service_type_id;
+ gchar *str_service_type_id;
+ gchar *path;
+ gchar *name;
+
+ g_return_val_if_fail (TRACKER_IS_DB_INTERFACE (iface), 0);
+ g_return_val_if_fail (info, 0);
+ g_return_val_if_fail (info->uri, 0);
+ g_return_val_if_fail (info->uri[0], 0);
+ g_return_val_if_fail (service, 0);
+
+ if (info->uri[0] == G_DIR_SEPARATOR) {
+ name = g_path_get_basename (info->uri);
+ path = g_path_get_dirname (info->uri);
+ } else {
+ name = tracker_file_get_vfs_name (info->uri);
+ path = tracker_file_get_vfs_path (info->uri);
+ }
+
+ iface_common = tracker_db_manager_get_db_interface (TRACKER_DB_COMMON);
+
+ /* Get a new unique ID for the service - use mutex to prevent race conditions */
+ result_set = tracker_db_exec_proc (iface_common, "GetNewID", NULL);
+
+ if (!result_set) {
+ g_critical ("Could not create service, GetNewID failed");
+ return 0;
+ }
+
+ tracker_db_result_set_get (result_set, 0, &sid, -1);
+ i = atoi (sid);
+ g_free (sid);
+ i++;
+
+ sid = tracker_int_to_string (i);
+ result_set_proc = tracker_db_exec_proc (iface_common, "UpdateNewID", sid, NULL);
+
+ if (result_set_proc) {
+ g_object_unref (result_set_proc);
+ }
+
+ if (result_set) {
+ g_object_unref (result_set);
+ }
+
+ if (info->is_directory) {
+ str_is_dir = "1";
+ } else {
+ str_is_dir = "0";
+ }
+
+ if (info->is_link) {
+ str_is_link = "1";
+ } else {
+ str_is_link = "0";
+ }
+
+ str_filesize = tracker_guint32_to_string (info->file_size);
+ str_mtime = tracker_gint32_to_string (info->mtime);
+ str_offset = tracker_gint32_to_string (info->offset);
+
+ service_type_id = tracker_ontology_get_id_for_service_type (service);
+
+ if (info->mime) {
+ g_debug ("service id for %s is %d and sid is %s with mime %s",
+ service, service_type_id, sid, info->mime);
+ } else {
+ g_debug ("service id for %s is %d and sid is %s",
+ service, service_type_id, sid);
+ }
+
+ str_service_type_id = tracker_int_to_string (service_type_id);
+
+ str_aux = tracker_int_to_string (info->aux_id);
+
+ if (service_type_id != -1) {
+ gchar *parent;
+
+ result_set_proc = tracker_db_exec_proc (iface,
+ "CreateService",
+ sid,
+ path,
+ name,
+ str_service_type_id,
+ info->mime,
+ str_filesize,
+ str_is_dir,
+ str_is_link,
+ str_offset,
+ str_mtime,
+ str_aux,
+ NULL);
+
+ if (result_set_proc) {
+ g_object_unref (result_set_proc);
+ }
+
+ /*
+ Undetectable error
+ tracker_error ("ERROR: CreateService uri is %s/%s", path, name);
+ g_free (name);
+ g_free (path);
+ g_free (str_aux);
+ g_free (str_service_type_id);
+ g_free (sid);
+ g_free (str_filesize);
+ g_free (str_mtime);
+ g_free (str_offset);
+ g_static_rec_mutex_unlock (&events_table_lock);
+ return 0;
+ */
+
+ id = tracker_db_interface_sqlite_get_last_insert_id (TRACKER_DB_INTERFACE_SQLITE (iface));
+
+ if (info->is_hidden) {
+ tracker_db_exec_no_reply (iface,
+ "Update services set Enabled = 0 where ID = %d",
+ (int) id);
+ }
+
+ result_set_proc = tracker_db_exec_proc (iface_common,
+ "IncStat",
+ service,
+ NULL);
+
+ if (result_set_proc) {
+ g_object_unref (result_set_proc);
+ }
+
+ parent = tracker_ontology_get_parent_service (service);
+
+ if (parent) {
+ result_set_proc = tracker_db_exec_proc (iface_common,
+ "IncStat",
+ parent,
+ NULL);
+ if (result_set_proc) {
+ g_object_unref (result_set_proc);
+ }
+
+ g_free (parent);
+ }
+
+ if (tracker_config_get_enable_xesam (tracker->config)) {
+ /* FIXME: Shouldn't this be the common interface? */
+ db_create_event (iface, sid, "Create");
+ }
+ }
+
+ g_free (name);
+ g_free (path);
+ g_free (str_aux);
+ g_free (str_service_type_id);
+ g_free (sid);
+ g_free (str_filesize);
+ g_free (str_mtime);
+ g_free (str_offset);
+
+ return id;
+}
+
+gchar *
+tracker_db_service_get_by_entity (TrackerDBInterface *iface,
+ const gchar *id)
+{
+ TrackerDBResultSet *result_set;
+ 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",
+ id,
+ NULL);
+
+ if (result_set) {
+ tracker_db_result_set_get (result_set, 1, &result, -1);
+ g_object_unref (result_set);
+ }
+
+ return result;
+}
+
+guint32
+tracker_db_file_get_id (TrackerDBInterface *iface,
+ const gchar *uri)
+{
+ TrackerDBResultSet *result_set;
+ gchar *path, *name;
+ guint32 id;
+
+ g_return_val_if_fail (TRACKER_IS_DB_INTERFACE (iface), 0);
+ g_return_val_if_fail (uri != NULL, 0);
+
+ if (uri[0] == G_DIR_SEPARATOR) {
+ name = g_path_get_basename (uri);
+ path = g_path_get_dirname (uri);
+ } else {
+ name = tracker_file_get_vfs_name (uri);
+ path = tracker_file_get_vfs_path (uri);
+ }
+
+ result_set = tracker_db_exec_proc (iface,
+ "GetServiceID",
+ path,
+ name,
+ NULL);
+
+ g_free (path);
+ g_free (name);
+
+ id = 0;
+
+ if (result_set) {
+ tracker_db_result_set_get (result_set, 0, &id, -1);
+ g_object_unref (result_set);
+ }
+
+ return id;
+}
+
+gchar *
+tracker_db_file_get_id_as_string (TrackerDBInterface *iface,
+ const gchar *service,
+ const gchar *uri)
+{
+ gint service_id;
+ guint32 id;
+
+ g_return_val_if_fail (TRACKER_IS_DB_INTERFACE (iface), NULL);
+ g_return_val_if_fail (service != NULL, NULL);
+
+ /* Do we really need service here? */
+ service_id = tracker_ontology_get_id_for_service_type (service);
+
+ if (service_id == -1) {
+ return NULL;
+ }
+
+ id = tracker_db_file_get_id (iface, uri);
+
+ if (id > 0) {
+ return tracker_uint_to_string (id);
+ }
+
+ return NULL;
+}
+
+TrackerDBFileInfo *
+tracker_db_file_get_info (TrackerDBInterface *iface,
+ TrackerDBFileInfo *info)
+{
+ TrackerDBResultSet *result_set;
+ gchar *path, *name;
+
+ g_return_val_if_fail (TRACKER_IS_DB_INTERFACE (iface), info);
+ g_return_val_if_fail (info != NULL, info);
+
+ if (!tracker_db_file_info_is_valid (info)) {
+ return NULL;
+ }
+
+ name = g_path_get_basename (info->uri);
+ path = g_path_get_dirname (info->uri);
+
+ result_set = tracker_db_exec_proc (iface,
+ "GetServiceID",
+ path,
+ name,
+ NULL);
+
+ g_free (name);
+ g_free (path);
+
+ if (result_set) {
+ gint id, indextime, service_type_id;
+ gboolean is_directory;
+
+ tracker_db_result_set_get (result_set,
+ 0, &id,
+ 1, &indextime,
+ 2, &is_directory,
+ 3, &service_type_id,
+ -1);
+
+ if (id > 0) {
+ info->file_id = id;
+ info->is_new = FALSE;
+ }
+
+ info->indextime = indextime;
+ info->is_directory = is_directory;
+ info->service_type_id = service_type_id;
+
+ g_object_unref (result_set);
+ }
+
+ return info;
+}
+
+gboolean
+tracker_db_file_is_up_to_date (TrackerDBInterface *iface,
+ const gchar *uri,
+ guint32 *id)
+{
+ TrackerDBResultSet *result_set;
+ gchar *path, *name;
+ gint32 index_time;
+
+ g_return_val_if_fail (TRACKER_IS_DB_INTERFACE (iface), FALSE);
+ g_return_val_if_fail (uri != NULL, FALSE);
+ g_return_val_if_fail (id != NULL, FALSE);
+
+ if (uri[0] == G_DIR_SEPARATOR) {
+ name = g_path_get_basename (uri);
+ path = g_path_get_dirname (uri);
+ } else {
+ name = tracker_file_get_vfs_name (uri);
+ path = tracker_file_get_vfs_path (uri);
+ }
+
+ result_set = tracker_db_exec_proc (iface,
+ "GetServiceID",
+ path,
+ name,
+ NULL);
+
+ g_free (path);
+ g_free (name);
+
+ index_time = 0;
+ *id = 0;
+
+ if (result_set) {
+ tracker_db_result_set_get (result_set,
+ 0, id,
+ 1, &index_time,
+ -1);
+
+ g_object_unref (result_set);
+ } else {
+ return FALSE;
+ }
+
+ if (index_time < tracker_file_get_mtime (uri)) {
+ return FALSE;
+ }
+
+ return TRUE;
+}
+
+void
+tracker_db_file_delete (TrackerDBInterface *iface,
+ guint32 file_id)
+{
+ TrackerDBResultSet *result_set;
+ TrackerDBInterface *iface_common;
+ gchar *str_file_id;
+ gchar *name = NULL;
+ gchar *path;
+ gint id;
+
+ iface_common = tracker_db_manager_get_db_interface (TRACKER_DB_COMMON);
+
+ g_return_if_fail (TRACKER_IS_DB_INTERFACE (iface));
+ g_return_if_fail (TRACKER_IS_DB_INTERFACE (iface_common));
+
+ delete_index_for_service (iface, file_id);
+
+ str_file_id = tracker_uint_to_string (file_id);
+
+ result_set = tracker_db_exec_proc (iface, "GetFileByID3", str_file_id, NULL);
+
+ if (result_set) {
+ tracker_db_result_set_get (result_set,
+ 0, &name,
+ 1, &path,
+ 3, &id,
+ -1);
+
+ if (name && path) {
+ dec_stat (id);
+
+ tracker_db_exec_proc (iface, "DeleteService1", str_file_id, NULL);
+ tracker_db_exec_proc (iface_common, "DeleteService6", path, name, NULL);
+ tracker_db_exec_proc (iface_common, "DeleteService7", path, name, NULL);
+ tracker_db_exec_proc (iface_common, "DeleteService9", path, name, NULL);
+
+ db_create_event (iface_common, str_file_id, "Delete");
+
+ g_free (name);
+ g_free (path);
+ }
+
+ g_object_unref (result_set);
+ }
+
+ g_free (str_file_id);
+}
+
+void
+tracker_db_directory_delete (TrackerDBInterface *iface,
+ guint32 file_id,
+ const gchar *uri)
+{
+ TrackerDBResultSet *result_set;
+ gchar *str_file_id;
+ gchar *uri_prefix;
+
+ g_return_if_fail (TRACKER_DB_INTERFACE (iface));
+ g_return_if_fail (uri != NULL);
+
+ str_file_id = tracker_uint_to_string (file_id);
+ uri_prefix = g_strconcat (uri, G_DIR_SEPARATOR_S, "*", NULL);
+ delete_index_for_service (iface, file_id);
+
+ /* Get all file id's for all files recursively under directory amd delete them */
+ result_set = tracker_db_exec_proc (iface,
+ "SelectSubFileIDs",
+ uri,
+ uri_prefix,
+ NULL);
+
+ if (result_set) {
+ gboolean valid = TRUE;
+ gint id;
+
+ while (valid) {
+ tracker_db_result_set_get (result_set, 0, &id, -1);
+ tracker_db_file_delete (iface, id);
+
+ valid = tracker_db_result_set_iter_next (result_set);
+ }
+
+ g_object_unref (result_set);
+ }
+
+ /* Delete directory */
+ tracker_db_file_delete (iface, file_id);
+
+ g_free (uri_prefix);
+ g_free (str_file_id);
+}
+
+void
+tracker_db_uri_insert_pending (const gchar *id,
+ const gchar *action,
+ const gchar *counter,
+ const gchar *uri,
+ const gchar *mime,
+ gboolean is_dir,
+ gboolean is_new,
+ gint service_type_id)
+{
+ TrackerDBInterface *iface;
+ const gchar *str_new;
+ gchar *str_service_type_id;
+ gchar *time_str;
+ time_t time_now;
+ gint i;
+
+ g_return_if_fail (id != NULL);
+ g_return_if_fail (action != NULL);
+ g_return_if_fail (counter != NULL);
+ g_return_if_fail (uri != NULL);
+ g_return_if_fail (mime != NULL);
+
+ iface = tracker_db_manager_get_db_interface (TRACKER_DB_CACHE);
+
+ time (&time_now);
+
+ i = atoi (counter);
+
+ if (i == 0) {
+ time_str = tracker_int_to_string (i);
+ } else {
+ time_str = tracker_int_to_string (time_now + i);
+ }
+
+ if (is_new) {
+ str_new = "1";
+ } else {
+ str_new = "0";
+ }
+
+ str_service_type_id = tracker_int_to_string (service_type_id);
+
+ tracker_db_exec_proc (iface,
+ "InsertPendingFile",
+ id,
+ action,
+ time_str,
+ uri,
+ mime,
+ is_dir ? "1" : "0",
+ str_new,
+ "1",
+ "1",
+ str_service_type_id,
+ NULL);
+
+ g_free (str_service_type_id);
+ g_free (time_str);
+}
+
+void
+tracker_db_uri_update_pending (const gchar *counter,
+ const gchar *action,
+ const gchar *uri)
+{
+ TrackerDBInterface *iface;
+ gchar *time_str;
+ time_t time_now;
+ gint i;
+
+ g_return_if_fail (counter != NULL);
+ g_return_if_fail (action != NULL);
+ g_return_if_fail (uri != NULL);
+
+ iface = tracker_db_manager_get_db_interface (TRACKER_DB_CACHE);
+
+ time (&time_now);
+
+ i = atoi (counter);
+
+ time_str = tracker_int_to_string (time_now + i);
+
+ tracker_db_exec_proc (iface,
+ "UpdatePendingFile",
+ time_str,
+ action,
+ uri,
+ NULL);
+
+ g_free (time_str);
+}
+
+gchar **
+tracker_db_files_get (TrackerDBInterface *iface,
+ const gchar *uri)
+{
+ TrackerDBResultSet *result_set;
+ GPtrArray *array;
+
+ g_return_val_if_fail (TRACKER_IS_DB_INTERFACE (iface), NULL);
+ g_return_val_if_fail (uri != NULL, NULL);
+
+ result_set = tracker_db_exec_proc (iface,
+ "SelectFileChild",
+ uri,
+ NULL);
+ array = g_ptr_array_new ();
+
+ if (result_set) {
+ gchar *name, *prefix;
+ gboolean valid = TRUE;
+
+ while (valid) {
+ tracker_db_result_set_get (result_set,
+ 1, &prefix,
+ 2, &name,
+ -1);
+
+ g_ptr_array_add (array, g_build_filename (prefix, name, NULL));
+
+ g_free (prefix);
+ g_free (name);
+ valid = tracker_db_result_set_iter_next (result_set);
+ }
+
+ g_object_unref (result_set);
+ }
+
+ g_ptr_array_add (array, NULL);
+
+ return (gchar**) g_ptr_array_free (array, FALSE);
+}
+
+TrackerDBResultSet *
+tracker_db_files_get_by_service (TrackerDBInterface *iface,
+ const gchar *service,
+ gint offset,
+ gint limit)
+{
+ TrackerDBResultSet *result_set;
+ gchar *str_limit;
+ gchar *str_offset;
+
+ g_return_val_if_fail (TRACKER_IS_DB_INTERFACE (iface), NULL);
+ g_return_val_if_fail (service != NULL, NULL);
+
+ str_limit = tracker_int_to_string (limit);
+ str_offset = tracker_int_to_string (offset);
+
+ result_set = tracker_db_exec_proc (iface,
+ "GetByServiceType",
+ service,
+ service,
+ str_offset,
+ str_limit,
+ NULL);
+
+ g_free (str_offset);
+ g_free (str_limit);
+
+ return result_set;
+}
+
+TrackerDBResultSet *
+tracker_db_files_get_by_mime (TrackerDBInterface *iface,
+ gchar **mimes,
+ gint n,
+ gint offset,
+ gint limit,
+ gboolean vfs)
+{
+ TrackerDBResultSet *result_set;
+ gint i;
+ gchar *service;
+ gchar *query;
+ GString *str;
+
+ g_return_val_if_fail (TRACKER_IS_DB_INTERFACE (iface), NULL);
+ g_return_val_if_fail (mimes != NULL, NULL);
+ g_return_val_if_fail (offset >= 0, NULL);
+
+ if (vfs) {
+ service = "VFS";
+ } else {
+ service = "Files";
+ }
+
+ str = g_string_new ("SELECT DISTINCT F.Path || '/' || F.Name AS uri FROM Services F INNER JOIN ServiceKeywordMetaData M ON F.ID = M.ServiceID WHERE M.MetaDataID = (SELECT ID FROM MetaDataTypes WHERE MetaName ='File:Mime') AND (M.MetaDataValue IN ");
+
+ g_string_append_printf (str, "('%s'", mimes[0]);
+
+ for (i = 1; i < n; i++) {
+ g_string_append_printf (str, ", '%s'", mimes[i]);
+ }
+
+ g_string_append_printf (str,
+ ")) AND (F.ServiceTypeID in (select TypeId from ServiceTypes where TypeName = '%s' or Parent = '%s')) LIMIT %d,%d",
+ service,
+ service,
+ offset,
+ limit);
+
+ query = g_string_free (str, FALSE);
+ result_set = tracker_db_interface_execute_query (iface, NULL, query);
+ g_free (query);
+
+ return result_set;
+}
+
+TrackerDBResultSet *
+tracker_db_metadata_get_types (TrackerDBInterface *iface,
+ const gchar *class,
+ gboolean writeable)
+{
+ g_return_val_if_fail (TRACKER_IS_DB_INTERFACE (iface), NULL);
+ g_return_val_if_fail (class != NULL, NULL);
+
+ if (strcmp (class, "*") == 0) {
+ if (writeable) {
+ return tracker_db_exec_proc (iface,
+ "GetWriteableMetadataTypes",
+ NULL);
+ } else {
+ return tracker_db_exec_proc (iface,
+ "GetMetadataTypes",
+ NULL);
+ }
+ } else {
+ if (writeable) {
+ return tracker_db_exec_proc (iface,
+ "GetWriteableMetadataTypesLike",
+ class,
+ NULL);
+ } else {
+ return tracker_db_exec_proc (iface,
+ "GetMetadataTypesLike",
+ class,
+ NULL);
+ }
+ }
+}
+
+TrackerDBResultSet *
+tracker_db_uri_sub_watches_get (const gchar *dir)
+{
+ TrackerDBInterface *iface;
+ TrackerDBResultSet *result_set;
+ gchar *folder;
+
+ g_return_val_if_fail (dir != NULL, NULL);
+
+ iface = tracker_db_manager_get_db_interface (TRACKER_DB_CACHE);
+
+ folder = g_build_filename (dir, "*", NULL);
+ result_set = tracker_db_exec_proc (iface,
+ "GetSubWatches",
+ folder,
+ NULL);
+ g_free (folder);
+
+ return result_set;
+}
+
+TrackerDBResultSet *
+tracker_db_uri_sub_watches_delete (const gchar *dir)
+{
+ TrackerDBInterface *iface;
+ TrackerDBResultSet *result_set;
+ gchar *folder;
+
+ g_return_val_if_fail (dir != NULL, NULL);
+
+ iface = tracker_db_manager_get_db_interface (TRACKER_DB_CACHE);
+
+ folder = g_build_filename (dir, "*", NULL);
+ result_set = tracker_db_exec_proc (iface,
+ "DeleteSubWatches",
+ folder,
+ NULL);
+
+ g_free (folder);
+
+ return result_set;
+}
+
+void
+tracker_db_file_move (TrackerDBInterface *iface,
+ const gchar *moved_from_uri,
+ const gchar *moved_to_uri)
+{
+ TrackerDBInterface *iface_common;
+ gchar *str_file_id;
+ gchar *name;
+ gchar *path;
+ gchar *old_name;
+ gchar *old_path;
+ gchar *ext;
+ guint32 id;
+
+ g_return_if_fail (TRACKER_IS_DB_INTERFACE (iface));
+ g_return_if_fail (moved_from_uri != NULL);
+ g_return_if_fail (moved_to_uri != NULL);
+
+ g_message ("Moving file:'%s' to:'%s'",
+ moved_from_uri,
+ moved_to_uri);
+
+ /* If orig file not in DB, treat it asa create action */
+ id = tracker_db_file_get_id (iface, moved_from_uri);
+
+ if (id == 0) {
+ g_warning ("Original file:'%s' not found in database",
+ moved_from_uri);
+ tracker_db_interface_end_transaction (iface);
+ return;
+ }
+
+ str_file_id = tracker_uint_to_string (id);
+ name = g_path_get_basename (moved_to_uri);
+ path = g_path_get_dirname (moved_to_uri);
+ old_name = g_path_get_basename (moved_from_uri);
+ old_path = g_path_get_dirname (moved_from_uri);
+
+ /* Update db so that fileID reflects new uri */
+ tracker_db_exec_proc (iface,
+ "UpdateFileMove",
+ path,
+ name,
+ str_file_id,
+ NULL);
+
+ iface_common = tracker_db_manager_get_db_interface (TRACKER_DB_COMMON);
+ db_create_event (iface_common, str_file_id, "Update");
+
+ /* update File:Path and File:Filename metadata */
+ tracker_db_metadata_set_single (iface,
+ "Files", str_file_id,
+ "File:Path", path,
+ FALSE);
+ tracker_db_metadata_set_single (iface,
+ "Files", str_file_id,
+ "File:Name", name,
+ FALSE);
+
+ ext = strrchr (moved_to_uri, '.');
+ if (ext) {
+ ext++;
+ tracker_db_metadata_set_single (iface,
+ "Files", str_file_id,
+ "File:Ext", ext,
+ FALSE);
+ }
+
+ /* Update backup service if necessary */
+ tracker_db_exec_proc (iface_common,
+ "UpdateBackupService",
+ path,
+ name,
+ old_path,
+ old_name,
+ NULL);
+
+ g_free (str_file_id);
+ g_free (name);
+ g_free (path);
+ g_free (old_name);
+ g_free (old_path);
+}
+
+void
+tracker_db_directory_move (TrackerDBInterface *iface,
+ const gchar *moved_from_uri,
+ const gchar *moved_to_uri)
+{
+ TrackerDBResultSet *result_set;
+ gchar *old_path;
+
+ g_return_if_fail (TRACKER_IS_DB_INTERFACE (iface));
+ g_return_if_fail (moved_from_uri != NULL);
+ g_return_if_fail (moved_to_uri != NULL);
+
+ old_path = g_strconcat (moved_from_uri, G_DIR_SEPARATOR_S, NULL);
+
+ /* Get all sub folders that were moved and add watches */
+ result_set = tracker_db_uri_get_subfolders (iface, moved_from_uri);
+
+ if (result_set) {
+ gboolean valid = TRUE;
+
+ while (valid) {
+ gchar *prefix, *name;
+ gchar *dir_name, *sep, *new_path;
+
+ tracker_db_result_set_get (result_set,
+ 1, &prefix,
+ 2, &name,
+ -1);
+
+ dir_name = g_build_filename (prefix, name, NULL);
+
+ /* Get string after prefix */
+ if (!old_path) {
+ sep = g_strdup (dir_name);
+ } else {
+ gchar *prefix_start;
+
+ prefix_start = strstr (dir_name, old_path);
+
+ if (!prefix_start) {
+ sep = NULL;
+ } else {
+ gchar *str;
+
+ str = prefix_start + strlen (old_path);
+ sep = g_strdup (str);
+ }
+ }
+
+ if (!sep) {
+ g_free (dir_name);
+ continue;
+ }
+
+ new_path = g_build_filename (moved_to_uri, sep, NULL);
+ g_free (sep);
+
+ g_message ("Moving subfolder:'%s' to:'%s'",
+ dir_name,
+ new_path);
+
+ directory_move (iface, dir_name, new_path);
+
+ /* FIXME: Why? */
+ g_usleep (1000);
+
+ g_free (prefix);
+ g_free (name);
+ g_free (new_path);
+ g_free (dir_name);
+
+ valid = tracker_db_result_set_iter_next (result_set);
+ }
+
+ g_object_unref (result_set);
+ }
+
+ directory_move (iface, moved_from_uri, moved_to_uri);
+
+ g_free (old_path);
+}
+
+TrackerDBResultSet *
+tracker_db_uri_get_subfolders (TrackerDBInterface *iface,
+ const gchar *uri)
+{
+ TrackerDBResultSet *result_set;
+ gchar *folder;
+
+ g_return_val_if_fail (TRACKER_IS_DB_INTERFACE (iface), NULL);
+ g_return_val_if_fail (uri != NULL, NULL);
+
+ folder = g_strconcat (uri, G_DIR_SEPARATOR_S, "*", NULL);
+ result_set = tracker_db_exec_proc (iface,
+ "SelectFileSubFolders",
+ uri,
+ folder,
+ NULL);
+ g_free (folder);
+
+ return result_set;
+}
+
+TrackerDBResultSet *
+tracker_db_keywords_get_list (TrackerDBInterface *iface,
+ const gchar *service)
+{
+ g_return_val_if_fail (TRACKER_IS_DB_INTERFACE (iface), NULL);
+ g_return_val_if_fail (service != NULL, NULL);
+
+ return tracker_db_exec_proc (iface,
+ "GetKeywordList",
+ service,
+ service,
+ NULL);
+}
+
+GSList *
+tracker_db_mime_query (TrackerDBInterface *iface,
+ const gchar *stored_proc,
+ gint service_id)
+{
+ TrackerDBResultSet *result_set;
+ GSList *result = NULL;
+ gchar *service_id_str;
+
+ g_return_val_if_fail (TRACKER_IS_DB_INTERFACE (iface), NULL);
+ g_return_val_if_fail (stored_proc != NULL, NULL);
+
+ service_id_str = g_strdup_printf ("%d", service_id);
+ result_set = tracker_db_exec_proc (iface, stored_proc, service_id_str, NULL);
+ g_free (service_id_str);
+
+ if (result_set) {
+ gchar *str;
+ gboolean valid = TRUE;
+
+ while (valid) {
+ tracker_db_result_set_get (result_set, 0, &str, -1);
+ result = g_slist_prepend (result, str);
+ valid = tracker_db_result_set_iter_next (result_set);
+ }
+
+ g_object_unref (result_set);
+ }
+
+ return result;
+}
+
+GSList *
+tracker_db_get_mimes_for_service_id (TrackerDBInterface *iface,
+ gint service_id)
+{
+ g_return_val_if_fail (TRACKER_IS_DB_INTERFACE (iface), NULL);
+
+ return tracker_db_mime_query (iface,
+ "GetMimeForServiceId",
+ service_id);
+}
+
+GSList *
+tracker_db_get_mime_prefixes_for_service_id (TrackerDBInterface *iface,
+ gint service_id)
+{
+ g_return_val_if_fail (TRACKER_IS_DB_INTERFACE (iface), NULL);
+
+ return tracker_db_mime_query (iface,
+ "GetMimePrefixForServiceId",
+ service_id);
+}
+
+TrackerFieldData *
+tracker_db_get_metadata_field (TrackerDBInterface *iface,
+ const gchar *service,
+ const gchar *field_name,
+ gint field_count,
+ gboolean is_select,
+ gboolean is_condition)
+{
+ TrackerFieldData *field_data = NULL;
+ TrackerField *def;
+
+ g_return_val_if_fail (TRACKER_IS_DB_INTERFACE (iface), NULL);
+ g_return_val_if_fail (service != NULL, NULL);
+ g_return_val_if_fail (field_name != NULL, NULL);
+
+ def = tracker_ontology_get_field_def (field_name);
+
+ if (def) {
+ gchar *alias;
+ const gchar *table_name;
+ gchar *this_field_name;
+ gchar *where_field;
+
+ field_data = g_object_new (TRACKER_TYPE_FIELD_DATA,
+ "is-select", is_select,
+ "is-condition", is_condition,
+ "field-name", field_name,
+ NULL);
+
+ alias = g_strdup_printf ("M%d", field_count);
+ table_name = tracker_db_metadata_get_table (tracker_field_get_data_type (def));
+
+ g_debug ("Field_name: %s :table_name is: %s for data_type: %i",
+ field_name,
+ table_name,
+ tracker_field_get_data_type(def));
+
+ tracker_field_data_set_alias (field_data, alias);
+ tracker_field_data_set_table_name (field_data, table_name);
+ tracker_field_data_set_id_field (field_data, tracker_field_get_id (def));
+ tracker_field_data_set_data_type (field_data, tracker_field_get_data_type (def));
+ tracker_field_data_set_multiple_values (field_data, tracker_field_get_multiple_values (def));
+
+ this_field_name = tracker_db_get_field_name (service, field_name);
+
+ if (this_field_name) {
+ gchar *str;
+
+ str = g_strdup_printf (" S.%s ", this_field_name);
+ tracker_field_data_set_select_field (field_data, str);
+ tracker_field_data_set_needs_join (field_data, FALSE);
+ g_free (str);
+ g_free (this_field_name);
+ } else {
+ gchar *str;
+ gchar *display_field;
+
+ display_field = tracker_ontology_get_display_field (def);
+ str = g_strdup_printf ("M%d.%s", field_count, display_field);
+ tracker_field_data_set_select_field (field_data, str);
+ tracker_field_data_set_needs_join (field_data, TRUE);
+ g_free (str);
+ g_free (display_field);
+ }
+
+ if (tracker_field_get_data_type (def) == TRACKER_FIELD_TYPE_DOUBLE) {
+ where_field = g_strdup_printf ("M%d.MetaDataDisplay", field_count);
+ } else {
+ where_field = g_strdup_printf ("M%d.MetaDataValue", field_count);
+ }
+
+ tracker_field_data_set_where_field (field_data, where_field);
+ g_free (where_field);
+ }
+
+ return field_data;
+}
+
+gchar *
+tracker_db_get_option_string (const gchar *option)
+{
+ TrackerDBInterface *iface;
+ TrackerDBResultSet *result_set;
+ gchar *value = NULL;
+
+ g_return_val_if_fail (option != NULL, NULL);
+
+ iface = tracker_db_manager_get_db_interface (TRACKER_DB_COMMON);
+ result_set = tracker_db_exec_proc (iface, "GetOption", option, NULL);
+
+ if (result_set) {
+ tracker_db_result_set_get (result_set, 0, &value, -1);
+ g_object_unref (result_set);
+ }
+
+ return value;
+}
+
+void
+tracker_db_set_option_string (const gchar *option,
+ const gchar *value)
+{
+ TrackerDBInterface *iface;
+ TrackerDBResultSet *result_set;
+
+ g_return_if_fail (option != NULL);
+ g_return_if_fail (value != NULL);
+
+ iface = tracker_db_manager_get_db_interface (TRACKER_DB_COMMON);
+ result_set = tracker_db_exec_proc (iface, "SetOption", value, option, NULL);
+
+ if (result_set) {
+ g_object_unref (result_set);
+ }
+}
+
+gint
+tracker_db_get_option_int (const gchar *option)
+{
+ TrackerDBInterface *iface;
+ TrackerDBResultSet *result_set;
+ gchar *str;
+ gint value = 0;
+
+ g_return_val_if_fail (option != NULL, 0);
+
+ iface = tracker_db_manager_get_db_interface (TRACKER_DB_COMMON);
+ result_set = tracker_db_exec_proc (iface, "GetOption", option, NULL);
+
+ if (result_set) {
+ tracker_db_result_set_get (result_set, 0, &str, -1);
+
+ if (str) {
+ value = atoi (str);
+ g_free (str);
+ }
+
+ g_object_unref (result_set);
+ }
+
+ return value;
+}
+
+void
+tracker_db_set_option_int (const gchar *option,
+ gint value)
+{
+ TrackerDBInterface *iface;
+ TrackerDBResultSet *result_set;
+ gchar *str;
+
+ g_return_if_fail (option != NULL);
+
+ iface = tracker_db_manager_get_db_interface (TRACKER_DB_COMMON);
+
+ str = tracker_int_to_string (value);
+ result_set = tracker_db_exec_proc (iface, "SetOption", str, option, NULL);
+ g_free (str);
+
+ if (result_set) {
+ g_object_unref (result_set);
+ }
+}
+
+gboolean
+tracker_db_regulate_transactions (TrackerDBInterface *iface,
+ gint interval)
+{
+ g_return_val_if_fail (TRACKER_IS_DB_INTERFACE (iface), FALSE);
+
+ tracker->index_count++;
+
+ if ((tracker->index_count == 1 ||
+ tracker->index_count == interval ||
+ (tracker->index_count >= interval &&
+ tracker->index_count % interval == 0))) {
+ if (tracker->index_count > 1) {
+ tracker_db_interface_end_transaction (iface);
+ tracker_db_interface_start_transaction (iface);
+
+ g_message ("Current memory usage is %d, word count %d and hits %d",
+ get_memory_usage (),
+ 0, /* was tracker->word_count, */
+ 0); /* was tracker->word_detail_count */
+ }
+
+ return TRUE;
+ }
+
+ return FALSE;
+}
Modified: branches/xesam-support/src/trackerd/tracker-db.h
==============================================================================
--- branches/xesam-support/src/trackerd/tracker-db.h (original)
+++ branches/xesam-support/src/trackerd/tracker-db.h Mon Jun 9 15:41:07 2008
@@ -1,6 +1,9 @@
/* -*- Mode: C; tab-width: 8; indent-tabs-mode: t; c-basic-offset: 8 -*- */
/*
* Copyright (C) 2006, Mr Jamie McCracken (jamiemcc gnome org)
+ * Copyright (C) 2007, Jason Kivlighn (jkivlighn gmail com)
+ * Copyright (C) 2007, Creative Commons (http://creativecommons.org)
+ * Copyright (C) 2008, Nokia
*
* This library is free software; you can redistribute it and/or
* modify it under the terms of the GNU General Public
@@ -23,24 +26,209 @@
#include <glib.h>
+#include <libtracker-common/tracker-field.h>
+#include <libtracker-common/tracker-field-data.h>
+#include <libtracker-common/tracker-ontology.h>
+
+#include <libtracker-db/tracker-db-interface.h>
#include <libtracker-db/tracker-db-file-info.h>
-#include "tracker-db-sqlite.h"
+#include "tracker-indexer.h"
+#include "tracker-utils.h"
G_BEGIN_DECLS
-void tracker_db_init (void);
-void tracker_db_shutdown (void);
-gboolean tracker_db_is_file_up_to_date (DBConnection *db_con,
- const gchar *uri,
- guint32 *id);
-TrackerDBFileInfo *tracker_db_get_file_info (DBConnection *db_con,
- TrackerDBFileInfo *info);
-gchar * tracker_db_get_id (DBConnection *db_con,
- const gchar *service,
- const gchar *uri);
-gchar ** tracker_db_get_files_in_folder (DBConnection *db_con,
- const gchar *folder_uri);
+void tracker_db_init (void);
+void tracker_db_shutdown (void);
+void tracker_db_refresh_all (TrackerDBInterface *iface);
+
+
+/* Operations for TrackerDBInterface */
+void tracker_db_close (TrackerDBInterface *iface);
+TrackerDBResultSet *tracker_db_exec_proc (TrackerDBInterface *iface,
+ const gchar *procedure,
+ ...);
+gboolean tracker_db_exec_no_reply (TrackerDBInterface *iface,
+ const gchar *query,
+ ...);
+TrackerDBResultSet *tracker_db_exec (TrackerDBInterface *iface,
+ const char *query,
+ ...);
+gchar * tracker_db_get_option_string (const gchar *option);
+void tracker_db_set_option_string (const gchar *option,
+ const gchar *value);
+gint tracker_db_get_option_int (const gchar *option);
+void tracker_db_set_option_int (const gchar *option,
+ gint value);
+
+/* High level transactions things */
+gboolean tracker_db_regulate_transactions (TrackerDBInterface *iface,
+ gint interval);
+
+/* Metadata API */
+gchar * tracker_db_metadata_get_related_names (TrackerDBInterface *iface,
+ const gchar *name);
+const gchar * tracker_db_metadata_get_table (TrackerFieldType type);
+TrackerDBResultSet *tracker_db_metadata_get (TrackerDBInterface *iface,
+ const gchar *id,
+ const gchar *key);
+gchar * tracker_db_metadata_get_delimited (TrackerDBInterface *iface,
+ const gchar *id,
+ const gchar *key);
+gchar * tracker_db_metadata_set (TrackerDBInterface *iface,
+ const gchar *service,
+ const gchar *id,
+ const gchar *key,
+ gchar **values,
+ gboolean do_backup);
+void tracker_db_metadata_set_single (TrackerDBInterface *iface,
+ const gchar *service,
+ const gchar *id,
+ const gchar *key,
+ const gchar *value,
+ gboolean do_backup);
+void tracker_db_metadata_insert_embedded (TrackerDBInterface *iface,
+ const gchar *service,
+ const gchar *id,
+ const gchar *key,
+ gchar **values,
+ GHashTable *table);
+void tracker_db_metadata_insert_single_embedded (TrackerDBInterface *iface,
+ const gchar *service,
+ const gchar *id,
+ const gchar *key,
+ const gchar *value,
+ GHashTable *table);
+void tracker_db_metadata_delete_value (TrackerDBInterface *iface,
+ const gchar *service,
+ const gchar *id,
+ const gchar *key,
+ const gchar *value);
+void tracker_db_metadata_delete (TrackerDBInterface *iface,
+ const gchar *service,
+ const gchar *id,
+ const gchar *key,
+ gboolean update_indexes);
+TrackerDBResultSet *tracker_db_metadata_get_types (TrackerDBInterface *iface,
+ const gchar *class,
+ gboolean writeable);
+
+/* Search API */
+TrackerDBResultSet *tracker_db_search_text (TrackerDBInterface *iface,
+ const gchar *service,
+ const gchar *search_string,
+ gint offset,
+ gint limit,
+ gboolean save_results,
+ gboolean detailed);
+
+/* Service API */
+guint32 tracker_db_service_create (TrackerDBInterface *iface,
+ const gchar *service,
+ TrackerDBFileInfo *info);
+gchar * tracker_db_service_get_by_entity (TrackerDBInterface *iface,
+ const gchar *id);
+
+/* Files API */
+gchar ** tracker_db_files_get (TrackerDBInterface *iface,
+ const gchar *folder_uri);
+TrackerDBResultSet *tracker_db_files_get_by_service (TrackerDBInterface *iface,
+ const gchar *service,
+ gint offset,
+ gint limit);
+TrackerDBResultSet *tracker_db_files_get_by_mime (TrackerDBInterface *iface,
+ gchar **mimes,
+ gint n,
+ gint offset,
+ gint limit,
+ gboolean vfs);
+guint32 tracker_db_file_get_id (TrackerDBInterface *iface,
+ const gchar *uri);
+gchar * tracker_db_file_get_id_as_string (TrackerDBInterface *iface,
+ const gchar *service,
+ const gchar *uri);
+TrackerDBFileInfo * tracker_db_file_get_info (TrackerDBInterface *iface,
+ TrackerDBFileInfo *info);
+gboolean tracker_db_file_is_up_to_date (TrackerDBInterface *iface,
+ const gchar *uri,
+ guint32 *id);
+void tracker_db_file_delete (TrackerDBInterface *iface,
+ guint32 file_id);
+void tracker_db_file_move (TrackerDBInterface *iface,
+ const gchar *moved_from_uri,
+ const gchar *moved_to_uri);
+void tracker_db_directory_delete (TrackerDBInterface *iface,
+ guint32 file_id,
+ const gchar *uri);
+void tracker_db_directory_move (TrackerDBInterface *iface,
+ const gchar *moved_from_uri,
+ const gchar *moved_to_uri);
+void tracker_db_uri_insert_pending (const gchar *id,
+ const gchar *action,
+ const gchar *counter,
+ const gchar *uri,
+ const gchar *mime,
+ gboolean is_dir,
+ gboolean is_new,
+ gint service_type_id);
+void tracker_db_uri_update_pending (const gchar *counter,
+ const gchar *action,
+ const gchar *uri);
+TrackerDBResultSet *tracker_db_uri_get_subfolders (TrackerDBInterface *iface,
+ const gchar *uri);
+TrackerDBResultSet *tracker_db_uri_sub_watches_get (const gchar *dir);
+TrackerDBResultSet *tracker_db_uri_sub_watches_delete (const gchar *dir);
+
+/* Keywords API */
+TrackerDBResultSet *tracker_db_keywords_get_list (TrackerDBInterface *iface,
+ const gchar *service);
+
+/* Miscellaneous API */
+GHashTable * tracker_db_get_file_contents_words (TrackerDBInterface *iface,
+ guint32 id,
+ GHashTable *old_table);
+GHashTable * tracker_db_get_indexable_content_words (TrackerDBInterface *iface,
+ guint32 id,
+ GHashTable *table,
+ gboolean embedded_only);
+gchar * tracker_db_get_field_name (const gchar *service,
+ const gchar *meta_name);
+TrackerFieldData * tracker_db_get_metadata_field (TrackerDBInterface *iface,
+ const gchar *service,
+ const gchar *field_name,
+ gint field_count,
+ gboolean is_select,
+ gboolean is_condition);
+
+/* Live Search API */
+void tracker_db_live_search_start (TrackerDBInterface *iface,
+ const gchar *from_query,
+ const gchar *join_query,
+ const gchar *where_query,
+ const gchar *search_id);
+void tracker_db_live_search_stop (TrackerDBInterface *iface,
+ const gchar *search_id);
+TrackerDBResultSet *tracker_db_live_search_get_all_ids (TrackerDBInterface *iface,
+ const gchar *search_id);
+TrackerDBResultSet *tracker_db_live_search_get_new_ids (TrackerDBInterface *iface,
+ const gchar *search_id,
+ const gchar *from_query,
+ const gchar *query_joins,
+ const gchar *where_query);
+TrackerDBResultSet *tracker_db_live_search_get_deleted_ids (TrackerDBInterface *iface,
+ const gchar *search_id);
+TrackerDBResultSet *tracker_db_live_search_get_hit_data (TrackerDBInterface *iface,
+ const gchar *search_id,
+ GStrv fields);
+TrackerDBResultSet *tracker_db_live_search_get_hit_count (TrackerDBInterface *iface,
+ const gchar *search_id);
+
+/* XESAM API */
+void tracker_db_xesam_delete_handled_events (TrackerDBInterface *iface);
+TrackerDBResultSet *tracker_db_xesam_get_metadata_names (TrackerDBInterface *iface,
+ const char *name);
+TrackerDBResultSet *tracker_db_xesam_get_service_names (TrackerDBInterface *iface,
+ const char *name);
G_END_DECLS
Modified: branches/xesam-support/src/trackerd/tracker-dbus.c
==============================================================================
--- branches/xesam-support/src/trackerd/tracker-dbus.c (original)
+++ branches/xesam-support/src/trackerd/tracker-dbus.c Mon Jun 9 15:41:07 2008
@@ -23,7 +23,9 @@
#include <libtracker-common/tracker-config.h>
#include <libtracker-common/tracker-utils.h>
-#include "tracker-db-sqlite.h"
+#include <libtracker-db/tracker-db-manager.h>
+
+#include "tracker-db.h"
#include "tracker-dbus.h"
#include "tracker-daemon.h"
#include "tracker-daemon-glue.h"
@@ -197,8 +199,7 @@
gboolean
tracker_dbus_register_objects (Tracker *tracker)
{
- GObject *object;
- DBConnection *db_connection;
+ GObject *object;
g_return_val_if_fail (tracker != NULL, FALSE);
@@ -216,9 +217,6 @@
return FALSE;
}
- db_connection = tracker_db_connect_all ();
-
- g_object_set (object, "db-connection", db_connection, NULL);
g_object_set (object, "config", tracker->config, NULL);
g_object_set (object, "tracker", tracker, NULL);
objects = g_slist_prepend (objects, object);
@@ -232,7 +230,6 @@
return FALSE;
}
- g_object_set (object, "db-connection", db_connection, NULL);
objects = g_slist_prepend (objects, object);
/* Add org.freedesktop.Tracker.Keywords */
@@ -244,7 +241,6 @@
return FALSE;
}
- g_object_set (object, "db-connection", db_connection, NULL);
objects = g_slist_prepend (objects, object);
/* Add org.freedesktop.Tracker.Metadata */
@@ -256,7 +252,6 @@
return FALSE;
}
- g_object_set (object, "db-connection", db_connection, NULL);
objects = g_slist_prepend (objects, object);
/* Add org.freedesktop.Tracker.Search */
@@ -268,7 +263,6 @@
return FALSE;
}
- g_object_set (object, "db-connection", db_connection, NULL);
g_object_set (object, "config", tracker->config, NULL);
g_object_set (object, "language", tracker->language, NULL);
g_object_set (object, "file-index", tracker->file_index, NULL);
@@ -286,9 +280,6 @@
return FALSE;
}
- db_connection = tracker_db_connect_xesam ();
- g_object_set (object, "db-connection", db_connection, NULL);
-
dbus_g_proxy_add_signal (proxy, "NameOwnerChanged",
G_TYPE_STRING, G_TYPE_STRING,
G_TYPE_STRING, G_TYPE_INVALID);
Modified: branches/xesam-support/src/trackerd/tracker-email-evolution.c
==============================================================================
--- branches/xesam-support/src/trackerd/tracker-email-evolution.c (original)
+++ branches/xesam-support/src/trackerd/tracker-email-evolution.c Mon Jun 9 15:41:07 2008
@@ -163,9 +163,9 @@
typedef gboolean (* LoadSummaryFileMetaHeaderFct) (SummaryFile *summary, SummaryFileHeader *header);
typedef gboolean (* LoadMailMessageFct) (SummaryFile *summary, MailMessage **mail_msg);
typedef gboolean (* SkipMailMessageFct) (SummaryFile *summary);
-typedef gboolean (* SaveOnDiskMailMessageFct) (DBConnection *db_con, MailMessage *msg);
+typedef gboolean (* SaveOnDiskMailMessageFct) (TrackerDBInterface *iface, MailMessage *msg);
-static void index_mail_messages_by_summary_file (DBConnection *db_con, MailType mail_type,
+static void index_mail_messages_by_summary_file (TrackerDBInterface *iface, MailType mail_type,
const gchar *summary_file_path,
LoadSummaryFileMetaHeaderFct load_meta_header,
LoadMailMessageFct load_mail,
@@ -200,11 +200,11 @@
static gboolean skip_loading_content_info (SummaryFile *summary);
static gboolean do_skip_loading_content_info (SummaryFile *summary);
-static gboolean save_ondisk_email_message_for_imap (DBConnection *db_con, MailMessage *mail_msg);
-static gboolean save_ondisk_email_message_for_imap4 (DBConnection *db_con, MailMessage *mail_msg);
-static gboolean do_save_ondisk_email_message_for_imap (DBConnection *db_con, MailMessage *mail_msg);
-static gboolean do_save_ondisk_email_message (DBConnection *db_con, MailMessage *mail_msg);
-static gboolean index_mail_parts (DBConnection *db_con, MailMessage *mail_msg, const gchar *mail_part_radix);
+static gboolean save_ondisk_email_message_for_imap (TrackerDBInterface *iface, MailMessage *mail_msg);
+static gboolean save_ondisk_email_message_for_imap4 (TrackerDBInterface *iface, MailMessage *mail_msg);
+static gboolean do_save_ondisk_email_message_for_imap (TrackerDBInterface *iface, MailMessage *mail_msg);
+static gboolean do_save_ondisk_email_message (TrackerDBInterface *iface, MailMessage *mail_msg);
+static gboolean index_mail_parts (TrackerDBInterface *iface, MailMessage *mail_msg, const gchar *mail_part_radix);
static GSList * add_persons_from_internet_address_list_string_parsing (GSList *list, const gchar *s);
@@ -223,7 +223,7 @@
static inline gboolean skip_token_decoding (FILE *f);
static gchar * g_unescape_uri_string (const gchar *escaped, const gchar *illegal_characters);
-static void check_summary_file (DBConnection *db_con, const gchar *filename, MailStore *store);
+static void check_summary_file (TrackerDBInterface *iface, const gchar *filename, MailStore *store);
static gboolean
evolution_module_is_running (void)
@@ -269,20 +269,20 @@
void
-tracker_email_plugin_watch_emails (DBConnection *db_con)
+tracker_email_plugin_watch_emails (TrackerDBInterface *iface)
{
TrackerDBResultSet *result_set;
/* if initial indexing has not finished reset mtime on all email stuff so they are rechecked */
- if (tracker_db_get_option_int (db_con->common, "InitialIndex") == 1) {
+ if (tracker_db_get_option_int ("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, NULL, sql);
+ tracker_db_interface_execute_query (iface, NULL, sql);
g_free (sql);
}
/* check all registered mbox/paths for deletions */
- result_set = tracker_db_email_get_mboxes (db_con);
+ result_set = tracker_db_email_get_mboxes (iface);
if (result_set) {
gboolean valid = TRUE;
@@ -295,10 +295,10 @@
3, &path,
-1);
- store = tracker_db_email_get_mbox_details (db_con, path);
+ store = tracker_db_email_get_mbox_details (iface, path);
if (store) {
- check_summary_file (db_con, filename, store);
+ check_summary_file (iface, filename, store);
tracker_db_email_free_mail_store (store);
}
@@ -373,11 +373,11 @@
gboolean
-tracker_email_plugin_index_file (DBConnection *db_con, TrackerDBFileInfo *info)
+tracker_email_plugin_index_file (TrackerDBInterface *iface, TrackerDBFileInfo *info)
{
gchar *file_name;
- g_return_val_if_fail (db_con, FALSE);
+ g_return_val_if_fail (iface, FALSE);
g_return_val_if_fail (info, FALSE);
if (!tracker_email_plugin_file_is_interesting (info))
@@ -402,7 +402,7 @@
g_debug ("summary %s is an mbox", info->uri);
/* check mbox is registered */
- if (tracker_db_email_get_mbox_id (db_con, mbox_file) == -1) {
+ if (tracker_db_email_get_mbox_id (iface, mbox_file) == -1) {
gchar *uri_prefix, *mail_path1, *mail_path2;
gchar *mbox_dir = g_strconcat (evolution_config->dir_local, "/", NULL);
@@ -417,13 +417,13 @@
g_free (mail_path1);
g_free (mail_path2);
- tracker_db_email_register_mbox (db_con, MAIL_APP_EVOLUTION, MAIL_TYPE_MBOX ,mbox_file, info->uri, uri_prefix);
+ tracker_db_email_register_mbox (iface, MAIL_APP_EVOLUTION, MAIL_TYPE_MBOX ,mbox_file, info->uri, uri_prefix);
g_free (uri_prefix);
}
- MailStore *store = tracker_db_email_get_mbox_details (db_con, mbox_file);
+ MailStore *store = tracker_db_email_get_mbox_details (iface, mbox_file);
summary = NULL;
@@ -446,15 +446,15 @@
}
- if (!email_parse_mail_file_and_save_new_emails (db_con, MAIL_APP_EVOLUTION, mbox_file,
+ if (!email_parse_mail_file_and_save_new_emails (iface, MAIL_APP_EVOLUTION, mbox_file,
load_uri_and_status_of_mbox_mail_message, NULL,
NULL, NULL,
store)) {
g_message ("Setting junk status on email file:'%s'",
mbox_file);
- tracker_db_email_flag_mbox_junk (db_con, mbox_file);
+ tracker_db_email_flag_mbox_junk (iface, mbox_file);
} else {
- tracker_db_email_set_message_counts (db_con, mbox_file, store->mail_count, store->junk_count, store->delete_count);
+ tracker_db_email_set_message_counts (iface, mbox_file, store->mail_count, store->junk_count, store->delete_count);
g_debug ("Number of existing messages in %s are %d, %d junk, %d deleted and header totals are %d, %d, %d", mbox_file,
store->mail_count, store->junk_count, store->delete_count, header->saved_count, header->junk_count, header->deleted_count);
}
@@ -477,13 +477,13 @@
if (strcmp (file_name, "summary") == 0) {
if (is_in_dir_imap4 (info->uri)) {
- index_mail_messages_by_summary_file (db_con, MAIL_TYPE_IMAP4, info->uri,
+ index_mail_messages_by_summary_file (iface, MAIL_TYPE_IMAP4, info->uri,
load_summary_file_meta_header_for_imap,
load_mail_message_for_imap4,
skip_mail_message_for_imap4,
save_ondisk_email_message_for_imap4);
} else {
- index_mail_messages_by_summary_file (db_con, MAIL_TYPE_IMAP, info->uri,
+ index_mail_messages_by_summary_file (iface, MAIL_TYPE_IMAP, info->uri,
load_summary_file_meta_header_for_imap,
load_mail_message_for_imap,
skip_mail_message_for_imap,
@@ -500,7 +500,7 @@
ondisk_msg = email_parse_mail_message_by_path (MAIL_APP_EVOLUTION, info->uri, NULL);
if (ondisk_msg) {
- tracker_db_email_update_email (db_con, ondisk_msg);
+ tracker_db_email_update_email (iface, ondisk_msg);
email_free_mail_message (ondisk_msg);
}
@@ -508,7 +508,7 @@
} else if (is_in_dir_maildir (info->uri)) {
if (g_str_has_suffix (info->uri, ".ev-summary")) {
- index_mail_messages_by_summary_file (db_con, info->uri, MAIL_TYPE_MAILDIR,
+ index_mail_messages_by_summary_file (iface, info->uri, MAIL_TYPE_MAILDIR,
load_summary_file_meta_header_for_maildir,
load_mail_message_for_maildir,
skip_mail_message_for_maildir);
@@ -518,7 +518,7 @@
ondisk_msg = email_parse_mail_message_by_path (MAIL_APP_EVOLUTION, info->uri, NULL);
if (ondisk_msg) {
- tracker_db_email_update_email (db_con, ondisk_msg);
+ tracker_db_email_update_email (iface, ondisk_msg);
email_free_mail_message (ondisk_msg);
}
}
@@ -528,7 +528,7 @@
if (email_mh_is_in_a_mh_dir (info->uri)) {
- try_to_save_ondisk_email_message (db_con, info->uri, NULL);
+ try_to_save_ondisk_email_message (iface, info->uri, NULL);
}
*/
@@ -628,7 +628,7 @@
static void
-check_summary_file (DBConnection *db_con, const gchar *filename, MailStore *store)
+check_summary_file (TrackerDBInterface *iface, const gchar *filename, MailStore *store)
{
SummaryFile *summary = NULL;
@@ -672,11 +672,11 @@
}
- path = tracker_db_email_get_mbox_path (db_con, filename);
+ path = tracker_db_email_get_mbox_path (iface, filename);
if ((header->junk_count > store->junk_count) || (header->deleted_count > store->delete_count)) {
- gchar *mbox_id = tracker_int_to_string (tracker_db_email_get_mbox_id (db_con, path));
+ gchar *mbox_id = tracker_int_to_string (tracker_db_email_get_mbox_id (iface, path));
gint i;
for (i = 0; i < header->saved_count ; i++) {
@@ -688,11 +688,11 @@
str_uid = tracker_uint_to_string (uid);
- tracker_db_email_insert_junk (db_con, path, uid);
+ tracker_db_email_insert_junk (iface, path, uid);
uri = g_strconcat (store->uri_prefix, str_uid, NULL);
- tracker_db_email_delete_email (db_con, uri);
+ tracker_db_email_delete_email (iface, uri);
g_free (uri);
g_free (str_uid);
@@ -706,8 +706,8 @@
}
g_free (mbox_id);
}
- tracker_db_email_reset_mbox_junk (db_con, path);
- tracker_db_email_set_message_counts (db_con, path, store->mail_count, header->junk_count, header->deleted_count);
+ tracker_db_email_reset_mbox_junk (iface, path);
+ tracker_db_email_set_message_counts (iface, path, store->mail_count, header->junk_count, header->deleted_count);
g_free (path);
@@ -1266,7 +1266,7 @@
static void
-index_mail_messages_by_summary_file (DBConnection *db_con,
+index_mail_messages_by_summary_file (TrackerDBInterface *iface,
MailType mail_type,
const gchar *summary_file_path,
LoadSummaryFileMetaHeaderFct load_meta_header,
@@ -1308,7 +1308,7 @@
dir = g_path_get_dirname (summary->path);
/* check summary file is registered */
- if (tracker_db_email_get_mbox_id (db_con, dir) == -1) {
+ if (tracker_db_email_get_mbox_id (iface, dir) == -1) {
const gchar *pos_folders = strstr (dir, G_DIR_SEPARATOR_S "folders" G_DIR_SEPARATOR_S);
if (pos_folders) {
@@ -1344,14 +1344,14 @@
g_free (uri_dir);
- tracker_db_email_register_mbox (db_con, MAIL_APP_EVOLUTION, mail_type, dir, summary_file_path, uri_prefix);
+ tracker_db_email_register_mbox (iface, MAIL_APP_EVOLUTION, mail_type, dir, summary_file_path, uri_prefix);
g_free (uri_prefix);
}
}
}
- MailStore *store = tracker_db_email_get_mbox_details (db_con, dir);
+ MailStore *store = tracker_db_email_get_mbox_details (iface, dir);
if (!store) {
g_critical ("could not retrieve store for file %s", dir);
@@ -1425,10 +1425,10 @@
mail_msg->store = store;
- if (!(*save_ondisk_mail) (db_con, mail_msg)) {
+ if (!(*save_ondisk_mail) (iface, mail_msg)) {
g_message ("WARNING: Message, or message parts, could not be found locally - if you are using IMAP make sure you have selected the \"copy folder content locally for offline operation\" option in Evolution");
/* we do not have all infos but we still save them */
- if (!tracker_db_email_save_email (db_con, mail_msg, MAIL_APP_EVOLUTION)) {
+ if (!tracker_db_email_save_email (iface, mail_msg, MAIL_APP_EVOLUTION)) {
g_message ("Failed to save email");
}
}
@@ -1445,7 +1445,7 @@
email_free_mail_message (mail_msg);
#if 0
- if (!tracker_cache_process_events (db_con->data, TRUE)) {
+ if (!tracker_cache_process_events (iface->data, TRUE)) {
tracker->shutdown = TRUE;
tracker_status_set_and_signal (TRACKER_STATUS_SHUTDOWN,
tracker->first_time_index,
@@ -1458,15 +1458,15 @@
}
#endif
- if (tracker_db_regulate_transactions (db_con->data, 500)) {
+ if (tracker_db_regulate_transactions (iface, 500)) {
if (tracker_config_get_verbosity (tracker->config) == 1) {
g_message ("indexing #%d - Emails in %s", tracker->index_count, dir);
}
if (tracker->index_count % 1000 == 0) {
- tracker_db_end_index_transaction (db_con->data);
- tracker_db_refresh_all (db_con->data);
- tracker_db_start_index_transaction (db_con->data);
+ tracker_db_interface_end_transaction (iface);
+ tracker_db_refresh_all (iface);
+ tracker_db_interface_start_transaction (iface);
}
/* Signal progress */
@@ -1484,11 +1484,11 @@
g_message ("No. of new emails indexed in summary file %s is %d, %d junk, %d deleted", dir, mail_count, junk_count, delete_count);
- tracker_db_email_set_message_counts (db_con, dir, store->mail_count, store->junk_count, store->delete_count);
+ tracker_db_email_set_message_counts (iface, dir, store->mail_count, store->junk_count, store->delete_count);
} else {
/* schedule check for junk */
- tracker_db_email_flag_mbox_junk (db_con, dir);
+ tracker_db_email_flag_mbox_junk (iface, dir);
}
tracker->mbox_processed++;
@@ -2305,28 +2305,28 @@
static gboolean
-save_ondisk_email_message_for_imap (DBConnection *db_con, MailMessage *mail_msg)
+save_ondisk_email_message_for_imap (TrackerDBInterface *iface, MailMessage *mail_msg)
{
- return do_save_ondisk_email_message_for_imap (db_con, mail_msg);
+ return do_save_ondisk_email_message_for_imap (iface, mail_msg);
}
static gboolean
-save_ondisk_email_message_for_imap4 (DBConnection *db_con, MailMessage *mail_msg)
+save_ondisk_email_message_for_imap4 (TrackerDBInterface *iface, MailMessage *mail_msg)
{
- return do_save_ondisk_email_message_for_imap (db_con, mail_msg);
+ return do_save_ondisk_email_message_for_imap (iface, mail_msg);
}
static gboolean
-do_save_ondisk_email_message_for_imap (DBConnection *db_con, MailMessage *mail_msg)
+do_save_ondisk_email_message_for_imap (TrackerDBInterface *iface, MailMessage *mail_msg)
{
- g_return_val_if_fail (db_con, FALSE);
+ g_return_val_if_fail (iface, FALSE);
g_return_val_if_fail (mail_msg, FALSE);
g_message ("Trying to index mail \"%s\"", mail_msg->uri);
- if (!do_save_ondisk_email_message (db_con, mail_msg)) {
+ if (!do_save_ondisk_email_message (iface, mail_msg)) {
/* Mail not found... So two cases:
* 1/ mail naming uses this schema:
* - id.HEADER
@@ -2351,11 +2351,11 @@
if (tracker_file_is_indexable (header_file)) {
/* email is on disk */
g_message ("... Indexing mail parts of email \"%s\"", mail_msg->uri);
- ret = index_mail_parts (db_con, mail_msg, mail_msg->path);
+ ret = index_mail_parts (iface, mail_msg, mail_msg->path);
g_message ("... Treatment of mail parts of \"%s\" finished", mail_msg->uri);
if (ret) {
- tracker_db_email_save_email (db_con, mail_msg, MAIL_APP_EVOLUTION);
+ tracker_db_email_save_email (iface, mail_msg, MAIL_APP_EVOLUTION);
}
} else {
g_message ("...Indexing of mail parts failed");
@@ -2373,9 +2373,9 @@
static gboolean
-do_save_ondisk_email_message (DBConnection *db_con, MailMessage *mail_msg)
+do_save_ondisk_email_message (TrackerDBInterface *iface, MailMessage *mail_msg)
{
- g_return_val_if_fail (db_con, FALSE);
+ g_return_val_if_fail (iface, FALSE);
g_return_val_if_fail (mail_msg, FALSE);
g_return_val_if_fail (mail_msg->path, FALSE);
@@ -2392,7 +2392,7 @@
mail_msg_on_disk->uri = g_strdup (mail_msg->uri);
mail_msg_on_disk->store = mail_msg->store;
- tracker_db_email_save_email (db_con, mail_msg_on_disk, MAIL_APP_EVOLUTION);
+ tracker_db_email_save_email (iface, mail_msg_on_disk, MAIL_APP_EVOLUTION);
email_free_mail_file (mail_msg_on_disk->parent_mail_file);
email_free_mail_message (mail_msg_on_disk);
@@ -2406,7 +2406,7 @@
static gboolean
-index_mail_parts (DBConnection *db_con, MailMessage *mail_msg, const gchar *mail_part_radix)
+index_mail_parts (TrackerDBInterface *iface, MailMessage *mail_msg, const gchar *mail_part_radix)
{
GQueue *mail_parts;
gint i, num_parts;
@@ -2423,7 +2423,7 @@
email_free_mime_infos (x->mime_infos); \
g_slice_free (MailPart, x);
- g_return_val_if_fail (db_con, FALSE);
+ g_return_val_if_fail (iface, FALSE);
g_return_val_if_fail (mail_msg, FALSE);
g_return_val_if_fail (mail_part_radix, FALSE);
Modified: branches/xesam-support/src/trackerd/tracker-email-kmail.c
==============================================================================
--- branches/xesam-support/src/trackerd/tracker-email-kmail.c (original)
+++ branches/xesam-support/src/trackerd/tracker-email-kmail.c Mon Jun 9 15:41:07 2008
@@ -79,12 +79,12 @@
static FileAndImapPaths ** find_dir_and_imap_path_pairs (GKeyFile *key_file, gchar **groups, const gchar *imap_id);
static void free_file_and_imap_path_pair (FileAndImapPaths *pair);
static void free_kmail_account (KMailAccount *account);
-static GSList * get_dirs_to_watch (DBConnection *db_con, const gchar *dir_path, gboolean in_imap_dir);
+static GSList * get_dirs_to_watch (TrackerDBInterface *iface, const gchar *dir_path, gboolean in_imap_dir);
static gboolean ignore_email (const gchar *uri);
static KMailMailProtocol find_mail_protocol (const gchar *mail_path);
-static gboolean index_mail_file_in_maildir_dir (DBConnection *db_con, const gchar *dir, TrackerDBFileInfo *info, MailType mail_type);
-//static void watch_imap_cache (DBConnection *db_con, const gchar *imap_dir_path);
-//static void watch_local_maildir_dir (DBConnection *db_con, const gchar *dir_path);
+static gboolean index_mail_file_in_maildir_dir (TrackerDBInterface *iface, const gchar *dir, TrackerDBFileInfo *info, MailType mail_type);
+//static void watch_imap_cache (TrackerDBInterface *iface, const gchar *imap_dir_path);
+//static void watch_local_maildir_dir (TrackerDBInterface *iface, const gchar *dir_path);
static void load_uri_of_mbox_mail_message (GMimeMessage *g_m_message, MailMessage *mail_msg, gpointer user_data);
static gchar * forward_uri_for_mbox_email (MailMessage *mail_msg, gpointer user_data);
@@ -139,13 +139,13 @@
void
-tracker_email_plugin_watch_emails (DBConnection *db_con)
+tracker_email_plugin_watch_emails (TrackerDBInterface *iface)
{
g_return_if_fail (kmail_config);
#define WATCH_DIRS(root_dir, in_imap_dir) \
{ \
- GSList *dirs = get_dirs_to_watch (db_con, root_dir, in_imap_dir); \
+ GSList *dirs = get_dirs_to_watch (iface, root_dir, in_imap_dir); \
email_watch_directories (dirs, "KMailEmails"); \
g_slist_foreach (dirs, (GFunc) g_free, NULL); \
g_slist_free (dirs); \
@@ -186,11 +186,11 @@
gboolean
-tracker_email_plugin_index_file (DBConnection *db_con, TrackerDBFileInfo *info)
+tracker_email_plugin_index_file (TrackerDBInterface *iface, TrackerDBFileInfo *info)
{
KMailMailProtocol mail_protocol;
- g_return_val_if_fail (db_con, FALSE);
+ g_return_val_if_fail (iface, FALSE);
g_return_val_if_fail (info, FALSE);
if (!tracker_email_plugin_file_is_interesting (info))
@@ -204,7 +204,7 @@
if (email_is_in_a_maildir_dir (info->uri)) {
/* check directory is registered */
gchar *dir = g_path_get_dirname (info->uri);
- index_mail_file_in_maildir_dir (db_con, dir, info,
+ index_mail_file_in_maildir_dir (iface, dir, info,
(mail_protocol == KMAIL_MAIL_PROTOCOL_MBOX ? MAIL_TYPE_MBOX : MAIL_TYPE_IMAP));
g_free (dir);
@@ -220,11 +220,11 @@
}
/* check mbox is registered */
- if (tracker_db_email_get_mbox_id (db_con, info->uri) == -1) {
+ if (tracker_db_email_get_mbox_id (iface, info->uri) == -1) {
gchar *mbox_name = g_path_get_basename (info->uri);
gchar *uri_prefix = g_path_get_dirname (info->uri);
- tracker_db_email_register_mbox (db_con, MAIL_APP_KMAIL,
+ tracker_db_email_register_mbox (iface, MAIL_APP_KMAIL,
(mail_protocol == KMAIL_MAIL_PROTOCOL_MBOX ? MAIL_TYPE_MBOX : MAIL_TYPE_IMAP),
info->uri, mbox_name, uri_prefix);
@@ -232,19 +232,19 @@
g_free (uri_prefix);
}
- MailStore *store = tracker_db_email_get_mbox_details (db_con, info->uri);
+ MailStore *store = tracker_db_email_get_mbox_details (iface, info->uri);
if (!store) {
g_critical ("Could not retrieve store for file:'%s'", info->uri);
return FALSE;
}
if (mail_protocol == KMAIL_MAIL_PROTOCOL_MBOX) {
- email_parse_mail_file_and_save_new_emails (db_con, MAIL_APP_KMAIL, info->uri,
+ email_parse_mail_file_and_save_new_emails (iface, MAIL_APP_KMAIL, info->uri,
load_uri_of_mbox_mail_message, NULL,
forward_uri_for_mbox_email, NULL,
store);
} else {
- email_parse_mail_file_and_save_new_emails (db_con, MAIL_APP_KMAIL, info->uri,
+ email_parse_mail_file_and_save_new_emails (iface, MAIL_APP_KMAIL, info->uri,
fill_uri_with_uid_for_imap, NULL,
make_imap_email_uri, kmail_config->accounts,
store);
@@ -256,8 +256,8 @@
}
case KMAIL_MAIL_PROTOCOL_CACHED_IMAP: {
gchar *dir = g_path_get_dirname (info->uri) ;
- //tracker_db_index_file (db_con, info, NULL, NULL);
- index_mail_file_in_maildir_dir (db_con, dir, info, MAIL_TYPE_IMAP);
+ //tracker_db_index_file (iface, info, NULL, NULL);
+ index_mail_file_in_maildir_dir (iface, dir, info, MAIL_TYPE_IMAP);
g_free (dir);
break;
}
@@ -638,12 +638,12 @@
static GSList *
-get_dirs_to_watch (DBConnection *db_con, const gchar *dir_path, gboolean in_imap_dir)
+get_dirs_to_watch (TrackerDBInterface *iface, const gchar *dir_path, gboolean in_imap_dir)
{
GSList *tmp_dirs, *dirs;
const GSList *dir;
- g_return_val_if_fail (db_con, NULL);
+ g_return_val_if_fail (iface, NULL);
g_return_val_if_fail (dir_path, NULL);
if (!tracker_process_files_should_be_watched (tracker->config, dir_path)) {
@@ -663,7 +663,7 @@
(( in_imap_dir && dir_name[0] == '.' && g_str_has_suffix (dir_name, ".directory")) ||
!in_imap_dir )
) {
- if (!tracker_watcher_is_dir_watched (dir_path, db_con)) {
+ if (!tracker_watcher_is_dir_watched (dir_path, iface)) {
/* if we are in a maildir directory, we will only index emails in directory "cur" */
gchar *dir_cur = g_build_filename (dir_path, "cur", NULL);
@@ -704,21 +704,21 @@
static gboolean
-index_mail_file_in_maildir_dir (DBConnection *db_con, const gchar *dir, TrackerDBFileInfo *info, MailType mail_type)
+index_mail_file_in_maildir_dir (TrackerDBInterface *iface, const gchar *dir, TrackerDBFileInfo *info, MailType mail_type)
{
MailStore *store;
- if (tracker_db_email_get_mbox_id (db_con, dir) == -1) {
+ if (tracker_db_email_get_mbox_id (iface, dir) == -1) {
gchar *filename = g_path_get_basename (info->uri);
gchar *uri_prefix = g_path_get_dirname (info->uri);
- tracker_db_email_register_mbox (db_con, MAIL_APP_KMAIL, mail_type, dir, filename, uri_prefix);
+ tracker_db_email_register_mbox (iface, MAIL_APP_KMAIL, mail_type, dir, filename, uri_prefix);
g_free (filename);
g_free (uri_prefix);
}
- store = tracker_db_email_get_mbox_details (db_con, dir);
+ store = tracker_db_email_get_mbox_details (iface, dir);
if (!store) {
g_warning ("Could not retrieve store for directory:'%s'", dir);
return FALSE;
@@ -726,7 +726,7 @@
g_message ("Looking for email file:'%s'", info->uri);
- if (!tracker_db_email_is_saved_email_file (db_con, info->uri)) {
+ if (!tracker_db_email_is_saved_email_file (iface, info->uri)) {
MailMessage *mail_msg = email_parse_mail_message_by_path (MAIL_APP_KMAIL, info->uri, NULL, NULL, NULL);
if (!mail_msg) {
@@ -742,7 +742,7 @@
mail_msg->uri = g_strdup (mail_msg->path);
mail_msg->store = store;
mail_msg->mtime = tracker_file_get_mtime (mail_msg->path);
- tracker_db_email_save_email (db_con, mail_msg, MAIL_APP_KMAIL);
+ tracker_db_email_save_email (iface, mail_msg, MAIL_APP_KMAIL);
email_free_mail_file (mail_msg->parent_mail_file);
email_free_mail_message (mail_msg);
@@ -765,19 +765,19 @@
/*
static void
-watch_local_maildir_dir (DBConnection *db_con, const gchar *dir_path)
+watch_local_maildir_dir (TrackerDBInterface *iface, const gchar *dir_path)
{
gchar *dir_names[] = {"inbox", "sent-mail", "drafts", NULL};
gchar **dir_name;
- g_return_if_fail (db_con);
+ g_return_if_fail (iface);
g_return_if_fail (dir_path);
for (dir_name = dir_names; *dir_name; dir_name++) {
gchar *dir_path = g_build_filename (dir_path, *dir_name, NULL);
if (tracker_is_directory (dir_path)) {
- email_maildir_watch_mail_messages (db_con, dir_path);
+ email_maildir_watch_mail_messages (iface, dir_path);
}
g_free (dir_path);
Modified: branches/xesam-support/src/trackerd/tracker-email-modest.c
==============================================================================
--- branches/xesam-support/src/trackerd/tracker-email-modest.c (original)
+++ branches/xesam-support/src/trackerd/tracker-email-modest.c Mon Jun 9 15:41:07 2008
@@ -107,9 +107,9 @@
typedef gboolean (* LoadSummaryFileMetaHeaderFct) (SummaryFile *summary, SummaryFileHeader *header);
typedef gboolean (* LoadMailMessageFct) (SummaryFile *summary, MailMessage **mail_msg);
typedef gboolean (* SkipMailMessageFct) (SummaryFile *summary);
-typedef gboolean (* SaveOnDiskMailMessageFct) (DBConnection *db_con, MailMessage *msg);
+typedef gboolean (* SaveOnDiskMailMessageFct) (TrackerDBInterface *iface, MailMessage *msg);
-static void index_mail_messages_by_summary_file (DBConnection *db_con, MailType mail_type,
+static void index_mail_messages_by_summary_file (TrackerDBInterface *iface, MailType mail_type,
const gchar *summary_file_path,
LoadSummaryFileMetaHeaderFct load_meta_header,
LoadMailMessageFct load_mail,
@@ -147,11 +147,11 @@
static gboolean skip_loading_content_info (SummaryFile *summary);
static gboolean do_skip_loading_content_info (SummaryFile *summary);
-static gboolean save_ondisk_email_message_for_imap (DBConnection *db_con, MailMessage *mail_msg);
-static gboolean save_ondisk_email_message_for_pop (DBConnection *db_con, MailMessage *mail_msg);
-static gboolean save_ondisk_email_message_for_maildir (DBConnection *db_con, MailMessage *mail_msg);
-static gboolean do_save_ondisk_email_message_generic (DBConnection *db_con, MailMessage *mail_msg);
-static gboolean do_save_ondisk_email_message (DBConnection *db_con, MailMessage *mail_msg);
+static gboolean save_ondisk_email_message_for_imap (TrackerDBInterface *iface, MailMessage *mail_msg);
+static gboolean save_ondisk_email_message_for_pop (TrackerDBInterface *iface, MailMessage *mail_msg);
+static gboolean save_ondisk_email_message_for_maildir (TrackerDBInterface *iface, MailMessage *mail_msg);
+static gboolean do_save_ondisk_email_message_generic (TrackerDBInterface *iface, MailMessage *mail_msg);
+static gboolean do_save_ondisk_email_message (TrackerDBInterface *iface, MailMessage *mail_msg);
static GSList * add_persons_from_internet_address_list_string_parsing (GSList *list, const gchar *s);
@@ -167,7 +167,7 @@
static inline gboolean skip_string_decoding (FILE *f);
static inline gboolean skip_token_decoding (FILE *f);
-static void check_summary_file (DBConnection *db_con, const gchar *filename, MailStore *store);
+static void check_summary_file (TrackerDBInterface *iface, const gchar *filename, MailStore *store);
static void
load_current_dynamic_folders (ModestConfig *modest_config)
@@ -217,7 +217,7 @@
*********************************************************************************************/
gboolean
-tracker_email_plugin_init (void)
+tracker_email_plugin_init (TrackerConfig *config)
{
ModestConfig *conf;
@@ -272,20 +272,20 @@
}
void
-tracker_email_plugin_watch_emails (DBConnection *db_con)
+tracker_email_plugin_watch_emails (TrackerDBInterface *iface)
{
TrackerDBResultSet *result_set;
/* if initial indexing has not finished reset mtime on all email stuff so they are rechecked */
- if (tracker_db_get_option_int (db_con->common, "InitialIndex") == 1) {
+ if (tracker_db_get_option_int ("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, NULL, sql);
+ tracker_db_interface_execute_query (iface, NULL, sql);
g_free (sql);
}
/* check all registered mbox/paths for deletions */
- result_set = tracker_db_email_get_mboxes (db_con);
+ result_set = tracker_db_email_get_mboxes (iface);
if (result_set) {
gboolean valid = TRUE;
@@ -298,10 +298,10 @@
3, &path,
-1);
- store = tracker_db_email_get_mbox_details (db_con, path);
+ store = tracker_db_email_get_mbox_details (iface, path);
if (store) {
- check_summary_file (db_con, filename, store);
+ check_summary_file (iface, filename, store);
tracker_db_email_free_mail_store (store);
}
@@ -335,11 +335,11 @@
gboolean
-tracker_email_plugin_index_file (DBConnection *db_con, TrackerDBFileInfo *info)
+tracker_email_plugin_index_file (TrackerDBInterface *iface, TrackerDBFileInfo *info)
{
gchar *file_name;
- g_return_val_if_fail (db_con, FALSE);
+ g_return_val_if_fail (iface, FALSE);
g_return_val_if_fail (info, FALSE);
if (!tracker_email_plugin_file_is_interesting (info))
@@ -351,7 +351,7 @@
if (is_in_dir_imap (info->uri)) {
if (strcmp (file_name, "summary.mmap") == 0) {
- index_mail_messages_by_summary_file (db_con, MAIL_TYPE_IMAP, info->uri,
+ index_mail_messages_by_summary_file (iface, MAIL_TYPE_IMAP, info->uri,
load_summary_file_meta_header_for_imap,
load_mail_message_for_imap,
skip_mail_message_for_imap,
@@ -361,7 +361,7 @@
if (is_in_dir_pop (info->uri)) {
if (strcmp (file_name, "summary.mmap") == 0) {
- index_mail_messages_by_summary_file (db_con, MAIL_TYPE_POP, info->uri,
+ index_mail_messages_by_summary_file (iface, MAIL_TYPE_POP, info->uri,
load_summary_file_meta_header_for_pop,
load_mail_message_for_pop,
skip_mail_message_for_pop,
@@ -371,7 +371,7 @@
if (is_in_dir_maildir (info->uri)) {
if (strcmp (file_name, "summary.mmap") || g_str_has_suffix (info->uri, "summary.mmap")) {
- index_mail_messages_by_summary_file (db_con, MAIL_TYPE_MAILDIR, info->uri,
+ index_mail_messages_by_summary_file (iface, MAIL_TYPE_MAILDIR, info->uri,
load_summary_file_meta_header_for_maildir,
load_mail_message_for_maildir,
skip_mail_message_for_maildir,
@@ -397,7 +397,7 @@
static void
-check_summary_file (DBConnection *db_con, const gchar *filename, MailStore *store)
+check_summary_file (TrackerDBInterface *iface, const gchar *filename, MailStore *store)
{
SummaryFile *summary = NULL;
@@ -448,8 +448,8 @@
}
- path = tracker_db_email_get_mbox_path (db_con, filename);
- tracker_db_email_set_message_counts (db_con, path, store->mail_count, header->junk_count, header->deleted_count);
+ path = tracker_db_email_get_mbox_path (iface, filename);
+ tracker_db_email_set_message_counts (iface, path, store->mail_count, header->junk_count, header->deleted_count);
g_free (path);
free_summary_file_header (header);
@@ -694,7 +694,7 @@
}
static void
-index_mail_messages_by_summary_file (DBConnection *db_con,
+index_mail_messages_by_summary_file (TrackerDBInterface *iface,
MailType mail_type,
const gchar *summary_file_path,
LoadSummaryFileMetaHeaderFct load_meta_header,
@@ -751,7 +751,7 @@
}
/* check summary file is registered */
- if (tracker_db_email_get_mbox_id (db_con, dir) == -1) {
+ if (tracker_db_email_get_mbox_id (iface, dir) == -1) {
char *uri_prefix = NULL;
if (mail_type == MAIL_TYPE_IMAP || mail_type == MAIL_TYPE_POP) {
@@ -822,12 +822,12 @@
else
uri_prefix = g_strdup ("unknown://location/");
- tracker_db_email_register_mbox (db_con, MAIL_APP_MODEST, mail_type, dir, summary_file_path, uri_prefix);
+ tracker_db_email_register_mbox (iface, MAIL_APP_MODEST, mail_type, dir, summary_file_path, uri_prefix);
g_free (uri_prefix);
}
- MailStore *store = tracker_db_email_get_mbox_details (db_con, dir);
+ MailStore *store = tracker_db_email_get_mbox_details (iface, dir);
if (!store) {
g_critical ("could not retrieve store for file %s", dir);
@@ -910,10 +910,10 @@
mail_msg->store = store;
- if (!(*save_ondisk_mail) (db_con, mail_msg)) {
+ if (!(*save_ondisk_mail) (iface, mail_msg)) {
g_message ("WARNING: Message, or message parts, could not be found locally - if you are using IMAP make sure you have selected the \"copy folder content locally for offline operation\" option in Modest");
/* we do not have all infos but we still save them */
- if (!tracker_db_email_save_email (db_con, mail_msg, MAIL_APP_MODEST)) {
+ if (!tracker_db_email_save_email (iface, mail_msg, MAIL_APP_MODEST)) {
g_message ("Failed to save email");
}
}
@@ -938,7 +938,7 @@
*
* -Martyn
*/
- if (!tracker_cache_process_events (db_con->data, TRUE)) {
+ if (!tracker_cache_process_events (iface->data, TRUE)) {
tracker->shutdown = TRUE;
tracker_status_set_and_signal (TRACKER_STATUS_SHUTDOWN,
tracker->first_time_index,
@@ -951,12 +951,12 @@
}
#endif
- if (tracker_db_regulate_transactions (db_con->data, 500)) {
+ if (tracker_db_regulate_transactions (iface, 500)) {
if (tracker->index_count % 1000 == 0) {
- tracker_db_end_index_transaction (db_con->data);
- tracker_db_refresh_all (db_con->data);
- tracker_db_start_index_transaction (db_con->data);
+ tracker_db_interface_end_transaction (iface);
+ tracker_db_refresh_all (iface);
+ tracker_db_interface_start_transaction (iface);
}
/* Signal progress */
@@ -974,11 +974,11 @@
g_message ("No. of new emails indexed in summary file %s is %d, %d junk, %d deleted", dir, mail_count, junk_count, delete_count);
- tracker_db_email_set_message_counts (db_con, dir, store->mail_count, store->junk_count, store->delete_count);
+ tracker_db_email_set_message_counts (iface, dir, store->mail_count, store->junk_count, store->delete_count);
} else {
/* schedule check for junk */
- tracker_db_email_flag_mbox_junk (db_con, dir);
+ tracker_db_email_flag_mbox_junk (iface, dir);
}
tracker->mbox_processed++;
@@ -1710,35 +1710,35 @@
static gboolean
-save_ondisk_email_message_for_imap (DBConnection *db_con, MailMessage *mail_msg)
+save_ondisk_email_message_for_imap (TrackerDBInterface *iface, MailMessage *mail_msg)
{
- return do_save_ondisk_email_message_generic (db_con, mail_msg);
+ return do_save_ondisk_email_message_generic (iface, mail_msg);
}
static gboolean
-save_ondisk_email_message_for_pop (DBConnection *db_con, MailMessage *mail_msg)
+save_ondisk_email_message_for_pop (TrackerDBInterface *iface, MailMessage *mail_msg)
{
- return do_save_ondisk_email_message_generic (db_con, mail_msg);
+ return do_save_ondisk_email_message_generic (iface, mail_msg);
}
static gboolean
-save_ondisk_email_message_for_maildir (DBConnection *db_con, MailMessage *mail_msg)
+save_ondisk_email_message_for_maildir (TrackerDBInterface *iface, MailMessage *mail_msg)
{
- return do_save_ondisk_email_message_generic (db_con, mail_msg);
+ return do_save_ondisk_email_message_generic (iface, mail_msg);
}
static gboolean
-do_save_ondisk_email_message_generic (DBConnection *db_con, MailMessage *mail_msg)
+do_save_ondisk_email_message_generic (TrackerDBInterface *iface, MailMessage *mail_msg)
{
- g_return_val_if_fail (db_con, FALSE);
+ g_return_val_if_fail (iface, FALSE);
g_return_val_if_fail (mail_msg, FALSE);
g_message ("Trying to index mail \"%s\"", mail_msg->uri);
- if (!do_save_ondisk_email_message (db_con, mail_msg)) {
+ if (!do_save_ondisk_email_message (iface, mail_msg)) {
g_message ("Indexing mail without body nor attachment parsing \"%s\"", mail_msg->uri);
- tracker_db_email_save_email (db_con, mail_msg, MAIL_APP_MODEST);
+ tracker_db_email_save_email (iface, mail_msg, MAIL_APP_MODEST);
} else {
g_message ("Simple index of mail \"%s\" finished", mail_msg->uri);
}
@@ -1756,9 +1756,9 @@
}
static gboolean
-do_save_ondisk_email_message (DBConnection *db_con, MailMessage *mail_msg)
+do_save_ondisk_email_message (TrackerDBInterface *iface, MailMessage *mail_msg)
{
- g_return_val_if_fail (db_con, FALSE);
+ g_return_val_if_fail (iface, FALSE);
g_return_val_if_fail (mail_msg, FALSE);
if (mail_msg->path && g_file_test (mail_msg->path, G_FILE_TEST_EXISTS) && tracker_file_is_indexable (mail_msg->path)) {
@@ -1777,7 +1777,7 @@
mail_msg_on_disk->uri = g_strdup (mail_msg->uri);
mail_msg_on_disk->store = mail_msg->store;
- tracker_db_email_save_email (db_con, mail_msg_on_disk, MAIL_APP_MODEST);
+ tracker_db_email_save_email (iface, mail_msg_on_disk, MAIL_APP_MODEST);
email_free_mail_file (mail_msg_on_disk->parent_mail_file);
email_free_mail_message (mail_msg_on_disk);
Modified: branches/xesam-support/src/trackerd/tracker-email-plugin.h
==============================================================================
--- branches/xesam-support/src/trackerd/tracker-email-plugin.h (original)
+++ branches/xesam-support/src/trackerd/tracker-email-plugin.h Mon Jun 9 15:41:07 2008
@@ -1,17 +1,20 @@
#ifndef __TRACKER_EMAIL_PLUGIN_H__
#define __TRACKER_EMAIL_PLUGIN_H__
-#include "tracker-db-sqlite.h"
+#include <libtracker-common/tracker-config.h>
+
+#include <libtracker-db/tracker-db-interface.h>
+#include <libtracker-db/tracker-db-file-info.h>
G_BEGIN_DECLS
gboolean tracker_email_plugin_init (void);
gboolean tracker_email_plugin_finalize (void);
const gchar *tracker_email_plugin_get_name (void);
-void tracker_email_plugin_watch_emails (DBConnection *db_con);
-gboolean tracker_email_plugin_index_file (DBConnection *db_con,
- TrackerDBFileInfo *info);
-gboolean tracker_email_plugin_file_is_interesting (TrackerDBFileInfo *info);
+void tracker_email_plugin_watch_emails (TrackerDBInterface *iface);
+gboolean tracker_email_plugin_index_file (TrackerDBInterface *iface,
+ TrackerDBFileInfo *info);
+gboolean tracker_email_plugin_file_is_interesting (TrackerDBFileInfo *info);
G_END_DECLS
Modified: branches/xesam-support/src/trackerd/tracker-email-thunderbird.c
==============================================================================
--- branches/xesam-support/src/trackerd/tracker-email-thunderbird.c (original)
+++ branches/xesam-support/src/trackerd/tracker-email-thunderbird.c Mon Jun 9 15:41:07 2008
@@ -70,7 +70,7 @@
static GSList * add_persons_from_internet_address_list_string_parsing (GSList *list, const gchar *s);
-static gboolean email_parse_mail_tms_file_and_save_new_emails (DBConnection *db_con, MailApplication mail_app,
+static gboolean email_parse_mail_tms_file_and_save_new_emails (TrackerDBInterface *iface, MailApplication mail_app,
const gchar *path);
static MailMessage * email_parse_mail_tms_file_by_path (MailApplication mail_app, const gchar *path);
static void text_handler (GMarkupParseContext *context, const gchar *text,
@@ -125,7 +125,7 @@
void
-tracker_email_plugin_watch_emails (DBConnection *db_con)
+tracker_email_plugin_watch_emails (TrackerDBInterface *iface)
{
if( thunderbird_mail_dir != NULL ) {
g_message ("Thunderbird directory lookup: \"%s\"", thunderbird_mail_dir);
@@ -135,16 +135,16 @@
gboolean
-tracker_email_plugin_index_file (DBConnection *db_con, TrackerDBFileInfo *info)
+tracker_email_plugin_index_file (TrackerDBInterface *iface, TrackerDBFileInfo *info)
{
- g_return_val_if_fail (db_con, FALSE);
+ g_return_val_if_fail (iface, FALSE);
g_return_val_if_fail (info, FALSE);
if (!tracker_email_plugin_file_is_interesting (info))
return FALSE;
g_message ("Thunderbird file being index:'%s'",info->uri);
- if (email_parse_mail_tms_file_and_save_new_emails (db_con, MAIL_APP_THUNDERBIRD, info->uri)) {
+ if (email_parse_mail_tms_file_and_save_new_emails (iface, MAIL_APP_THUNDERBIRD, info->uri)) {
unlink(info->uri);
}
@@ -162,11 +162,11 @@
*********************************************************************************************/
static gboolean
-email_parse_mail_tms_file_and_save_new_emails (DBConnection *db_con, MailApplication mail_app, const gchar *path)
+email_parse_mail_tms_file_and_save_new_emails (TrackerDBInterface *iface, MailApplication mail_app, const gchar *path)
{
MailMessage *mail_msg;
- g_return_val_if_fail (db_con, FALSE);
+ g_return_val_if_fail (iface, FALSE);
g_return_val_if_fail (path, FALSE);
mail_msg = email_parse_mail_tms_file_by_path (mail_app, path);
@@ -178,7 +178,7 @@
if (mail_msg->parent_mail_file->mail_app == MAIL_APP_THUNDERBIRD ) {
// || mail_msg->parent_mail_file->mail_app == MAIL_APP_THUNDERBIRD_FEED) {
- tracker_db_email_save_email (db_con, mail_msg, mail_app);
+ tracker_db_email_save_email (iface, mail_msg, mail_app);
email_free_mail_file(mail_msg->parent_mail_file);
email_free_mail_message (mail_msg);
return TRUE;
Modified: branches/xesam-support/src/trackerd/tracker-email-utils.c
==============================================================================
--- branches/xesam-support/src/trackerd/tracker-email-utils.c (original)
+++ branches/xesam-support/src/trackerd/tracker-email-utils.c Mon Jun 9 15:41:07 2008
@@ -81,12 +81,15 @@
gboolean
-email_parse_and_save_mail_message (DBConnection *db_con, MailApplication mail_app, const char *path,
- ReadMailHelperFct read_mail_helper, gpointer read_mail_user_data)
+email_parse_and_save_mail_message (TrackerDBInterface *iface,
+ MailApplication mail_app,
+ const char *path,
+ ReadMailHelperFct read_mail_helper,
+ gpointer read_mail_user_data)
{
MailMessage *mail_msg;
- g_return_val_if_fail (db_con, FALSE);
+ g_return_val_if_fail (TRACKER_IS_DB_INTERFACE (iface), FALSE);
g_return_val_if_fail (path, FALSE);
mail_msg = email_parse_mail_message_by_path (mail_app, path,
@@ -96,7 +99,7 @@
return FALSE;
}
- tracker_db_email_save_email (db_con, mail_msg, mail_app);
+ tracker_db_email_save_email (iface, mail_msg, mail_app);
email_free_mail_message (mail_msg);
@@ -105,9 +108,13 @@
gboolean
-email_parse_mail_file_and_save_new_emails (DBConnection *db_con, MailApplication mail_app, const char *path,
- ReadMailHelperFct read_mail_helper, gpointer read_mail_user_data,
- MakeURIHelperFct uri_helper, gpointer make_uri_user_data,
+email_parse_mail_file_and_save_new_emails (TrackerDBInterface *iface,
+ MailApplication mail_app,
+ const char *path,
+ ReadMailHelperFct read_mail_helper,
+ gpointer read_mail_user_data,
+ MakeURIHelperFct uri_helper,
+ gpointer make_uri_user_data,
MailStore *store)
{
GObject *object;
@@ -115,11 +122,7 @@
MailMessage *mail_msg;
gint indexed = 0, junk = 0, deleted = 0;
- if (!tracker->is_running) {
- return FALSE;
- }
-
- g_return_val_if_fail (db_con, FALSE);
+ g_return_val_if_fail (TRACKER_IS_DB_INTERFACE (iface), FALSE);
g_return_val_if_fail (path, FALSE);
g_return_val_if_fail (store, FALSE);
@@ -168,8 +171,8 @@
deleted++;
}
- tracker_db_email_save_email (db_con, mail_msg, mail_app);
- tracker_db_email_update_mbox_offset (db_con, mf);
+ tracker_db_email_save_email (iface, mail_msg, mail_app);
+ tracker_db_email_update_mbox_offset (iface, mf);
email_free_mail_message (mail_msg);
@@ -181,13 +184,13 @@
*
* -Martyn
*/
- if (!tracker_cache_process_events (db_con->data, TRUE) ) {
+ if (!tracker_cache_process_events (iface, TRUE) ) {
tracker->shutdown = TRUE;
return FALSE;
}
#endif
- if (tracker_db_regulate_transactions (db_con->data, 500)) {
+ if (tracker_db_regulate_transactions (iface, 500)) {
GObject *object;
if (tracker_config_get_verbosity (tracker->config) == 1) {
@@ -195,9 +198,9 @@
}
if (tracker->index_count % 2500 == 0) {
- tracker_db_end_index_transaction (db_con->data);
- tracker_db_refresh_all (db_con->data);
- tracker_db_start_index_transaction (db_con->data);
+ tracker_db_interface_end_transaction (iface);
+ tracker_db_refresh_all (iface);
+ tracker_db_interface_start_transaction (iface);
}
/* Signal progress */
@@ -251,12 +254,12 @@
/* void */
-/* email_mh_watch_mail_messages (DBConnection *db_con, const gchar *path) */
+/* email_mh_watch_mail_messages (DBConnection *iface, const gchar *path) */
/* { */
/* gchar *mail_dirs[] = {"inbox", "sent", "trash", NULL}; */
/* gchar **dir_name; */
-/* g_return_if_fail (db_con); */
+/* g_return_if_fail (iface); */
/* g_return_if_fail (path); */
/* if (tracker_file_is_no_watched (path)) { */
@@ -267,7 +270,7 @@
/* gchar *dir_path = g_build_filename (path, *dir_name, NULL); */
/* if (tracker_is_directory (dir_path)) { */
-/* mh_watch_mail_messages_in_dir (db_con, dir_path); */
+/* mh_watch_mail_messages_in_dir (iface, dir_path); */
/* } */
/* g_free (dir_path); */
@@ -287,11 +290,11 @@
/* void */
-/* email_maildir_watch_mail_messages (DBConnection *db_con, const gchar *path) */
+/* email_maildir_watch_mail_messages (DBConnection *iface, const gchar *path) */
/* { */
/* gchar *dir_cur; */
-/* g_return_if_fail (db_con); */
+/* g_return_if_fail (iface); */
/* g_return_if_fail (path); */
/* if (tracker_file_is_no_watched (path)) { */
@@ -305,8 +308,8 @@
/* const GSList *file; */
/* GPatternSpec *pattern; */
-/* if (!tracker_is_directory_watched (dir_cur, db_con)) { */
-/* tracker_add_watch_dir (dir_cur, db_con); */
+/* if (!tracker_is_directory_watched (dir_cur, iface)) { */
+/* tracker_add_watch_dir (dir_cur, iface); */
/* } */
/* files = tracker_get_files (dir_cur, FALSE); */
@@ -318,7 +321,7 @@
/* const gchar *file_path = file->data; */
/* if (g_pattern_match_string (pattern, file_path)) { */
-/* tracker_db_insert_pending_file (db_con, 0, file_path, NULL, 0, TRACKER_ACTION_CHECK, FALSE, FALSE, -1); */
+/* tracker_db_insert_pending_file (iface, 0, file_path, NULL, 0, TRACKER_ACTION_CHECK, FALSE, FALSE, -1); */
/* } */
/* } */
@@ -882,20 +885,20 @@
*********************************************************************************************/
/* static void */
-/* mh_watch_mail_messages_in_dir (DBConnection *db_con, const gchar *dir_path) */
+/* mh_watch_mail_messages_in_dir (DBConnection *iface, const gchar *dir_path) */
/* { */
/* GSList *files; */
/* const GSList *file; */
-/* g_return_if_fail (db_con); */
+/* g_return_if_fail (iface); */
/* g_return_if_fail (dir_path); */
/* if (tracker_file_is_no_watched (dir_path)) { */
/* return; */
/* } */
-/* if (!tracker_is_directory_watched (dir_path, db_con)) { */
-/* tracker_add_watch_dir (dir_path, db_con); */
+/* if (!tracker_is_directory_watched (dir_path, iface)) { */
+/* tracker_add_watch_dir (dir_path, iface); */
/* } */
/* files = tracker_get_files (dir_path, FALSE); */
@@ -915,7 +918,7 @@
/* } */
/* } */
-/* tracker_db_insert_pending_file (db_con, 0, file_path, NULL, 0, TRACKER_ACTION_CHECK, FALSE, FALSE, -1); */
+/* tracker_db_insert_pending_file (iface, 0, file_path, NULL, 0, TRACKER_ACTION_CHECK, FALSE, FALSE, -1); */
/* end: */
/* g_free (file_name); */
Modified: branches/xesam-support/src/trackerd/tracker-email-utils.h
==============================================================================
--- branches/xesam-support/src/trackerd/tracker-email-utils.h (original)
+++ branches/xesam-support/src/trackerd/tracker-email-utils.h Mon Jun 9 15:41:07 2008
@@ -23,7 +23,7 @@
#include <gmime/gmime.h>
-#include "tracker-db-sqlite.h"
+#include "tracker-db.h"
G_BEGIN_DECLS
@@ -131,12 +131,12 @@
const gchar *service);
void email_watch_directories (const GSList *dirs,
const gchar *service);
-gboolean email_parse_and_save_mail_message (DBConnection *db_con,
+gboolean email_parse_and_save_mail_message (TrackerDBInterface *iface,
MailApplication mail_app,
const char *path,
ReadMailHelperFct read_mail_helper,
gpointer read_mail_user_data);
-gboolean email_parse_mail_file_and_save_new_emails (DBConnection *db_con,
+gboolean email_parse_mail_file_and_save_new_emails (TrackerDBInterface *iface,
MailApplication mail_app,
const char *path,
ReadMailHelperFct read_mail_helper,
@@ -145,7 +145,7 @@
gpointer make_uri_user_data,
MailStore *store);
gboolean email_is_in_a_maildir_dir (const gchar *path);
-void email_maildir_watch_mail_messages (DBConnection *db_con,
+void email_maildir_watch_mail_messages (TrackerDBInterface *iface,
const gchar *path);
MailPerson * email_allocate_mail_person (void);
void email_free_mail_person (MailPerson *mp);
Modified: branches/xesam-support/src/trackerd/tracker-email.c
==============================================================================
--- branches/xesam-support/src/trackerd/tracker-email.c (original)
+++ branches/xesam-support/src/trackerd/tracker-email.c Mon Jun 9 15:41:07 2008
@@ -25,23 +25,14 @@
#include "tracker-email.h"
-typedef gboolean (* TrackerMailInit) (void);
-typedef void (* TrackerMailFinalize) (void);
-typedef void (* TrackerMailWatchEmails) (DBConnection *db_con);
-typedef gboolean (* TrackerMailIndexFile) (DBConnection *db_con,
- TrackerDBFileInfo *info);
-typedef gboolean (* TrackerMailFileIsInteresting) (TrackerDBFileInfo *info);
-typedef const gchar * (* TrackerMailGetName) (void);
-
static GModule *module = NULL;
-
gboolean
tracker_email_start_email_watching (const gchar *email_client)
{
- TrackerMailInit func;
- gchar *module_name, *module_path;
- gboolean result = FALSE;
+ TrackerMailInit func;
+ gchar *module_name, *module_path;
+ gboolean result = FALSE;
if (module)
return result;
@@ -98,7 +89,7 @@
/* Must be called before any work on files containing mails */
void
-tracker_email_add_service_directories (DBConnection *db_con)
+tracker_email_add_service_directories (TrackerDBInterface *iface)
{
TrackerMailWatchEmails func;
@@ -106,7 +97,7 @@
return;
if (g_module_symbol (module, "tracker_email_plugin_watch_emails", (gpointer *) &func)) {
- (func) (db_con);
+ (func) (iface);
}
}
@@ -130,11 +121,12 @@
}
gboolean
-tracker_email_index_file (DBConnection *db_con, TrackerDBFileInfo *info)
+tracker_email_index_file (TrackerDBInterface *iface,
+ TrackerDBFileInfo *info)
{
TrackerMailIndexFile func;
- g_return_val_if_fail (db_con, FALSE);
+ g_return_val_if_fail (TRACKER_IS_DB_INTERFACE (iface), FALSE);
g_return_val_if_fail (info, FALSE);
if (!module)
@@ -143,7 +135,7 @@
if (!g_module_symbol (module, "tracker_email_plugin_index_file", (gpointer *) &func))
return FALSE;
- return (func) (db_con, info);
+ return (func) (iface, info);
}
Modified: branches/xesam-support/src/trackerd/tracker-email.h
==============================================================================
--- branches/xesam-support/src/trackerd/tracker-email.h (original)
+++ branches/xesam-support/src/trackerd/tracker-email.h Mon Jun 9 15:41:07 2008
@@ -23,20 +23,30 @@
#include "config.h"
-#include <libtracker-db/tracker-db-file-info.h>
+#include <libtracker-common/tracker-config.h>
-#include "tracker-db-sqlite.h"
+#include <libtracker-db/tracker-db-interface.h>
+#include <libtracker-db/tracker-db-file-info.h>
G_BEGIN_DECLS
-gboolean tracker_email_start_email_watching (const gchar *email_client);
-void tracker_email_end_email_watching (void);
-
-void tracker_email_add_service_directories (DBConnection *db_con);
-gboolean tracker_email_file_is_interesting (TrackerDBFileInfo *info);
-gboolean tracker_email_index_file (DBConnection *db_con,
- TrackerDBFileInfo *info);
+typedef gboolean (* TrackerMailInit) (void);
+typedef void (* TrackerMailFinalize) (void);
+typedef void (* TrackerMailWatchEmails) (TrackerDBInterface *iface);
+typedef gboolean (* TrackerMailIndexFile) (TrackerDBInterface *iface,
+ TrackerDBFileInfo *info);
+typedef const gchar * (* TrackerMailGetName) (void);
+typedef const gchar * (* TrackerMailFileIsInteresting) (TrackerDBFileInfo *info);
+
+gboolean tracker_email_init (TrackerConfig *config);
+void tracker_email_shutdown (void);
+void tracker_email_add_service_directories (TrackerDBInterface *iface);
+gboolean tracker_email_file_is_interesting (TrackerDBFileInfo *info);
+gboolean tracker_email_index_file (TrackerDBInterface *iface,
+ TrackerDBFileInfo *info);
const gchar *tracker_email_get_name (void);
+gboolean tracker_email_start_email_watching (const gchar *email_client);
+void tracker_email_end_email_watching (void);
G_END_DECLS
Modified: branches/xesam-support/src/trackerd/tracker-files.c
==============================================================================
--- branches/xesam-support/src/trackerd/tracker-files.c (original)
+++ branches/xesam-support/src/trackerd/tracker-files.c Mon Jun 9 15:41:07 2008
@@ -31,49 +31,18 @@
#include <libtracker-common/tracker-type-utils.h>
#include <libtracker-db/tracker-db-dbus.h>
+#include <libtracker-db/tracker-db-manager.h>
#include "tracker-dbus.h"
#include "tracker-files.h"
#include "tracker-db.h"
#include "tracker-marshal.h"
-#define GET_PRIV(obj) (G_TYPE_INSTANCE_GET_PRIVATE ((obj), TRACKER_TYPE_FILES, TrackerFilesPriv))
-
-typedef struct {
- DBConnection *db_con;
-} TrackerFilesPriv;
-
-enum {
- PROP_0,
- PROP_DB_CONNECTION
-};
-
-static void files_finalize (GObject *object);
-static void files_set_property (GObject *object,
- guint param_id,
- const GValue *value,
- GParamSpec *pspec);
-
G_DEFINE_TYPE(TrackerFiles, tracker_files, G_TYPE_OBJECT)
static void
tracker_files_class_init (TrackerFilesClass *klass)
{
- GObjectClass *object_class;
-
- object_class = G_OBJECT_CLASS (klass);
-
- object_class->finalize = files_finalize;
- object_class->set_property = files_set_property;
-
- g_object_class_install_property (object_class,
- PROP_DB_CONNECTION,
- g_param_spec_pointer ("db-connection",
- "DB connection",
- "Database connection to use in transactions",
- G_PARAM_WRITABLE));
-
- g_type_class_add_private (object_class, sizeof (TrackerFilesPriv));
}
static void
@@ -81,64 +50,10 @@
{
}
-static void
-files_finalize (GObject *object)
-{
- TrackerFilesPriv *priv;
-
- priv = GET_PRIV (object);
-
- G_OBJECT_CLASS (tracker_files_parent_class)->finalize (object);
-}
-
-static void
-files_set_property (GObject *object,
- guint param_id,
- const GValue *value,
- GParamSpec *pspec)
-{
- TrackerFilesPriv *priv;
-
- priv = GET_PRIV (object);
-
- switch (param_id) {
- case PROP_DB_CONNECTION:
- tracker_files_set_db_connection (TRACKER_FILES (object),
- g_value_get_pointer (value));
- break;
-
- default:
- G_OBJECT_WARN_INVALID_PROPERTY_ID (object, param_id, pspec);
- break;
- };
-}
-
TrackerFiles *
-tracker_files_new (DBConnection *db_con)
-{
- TrackerFiles *object;
-
- object = g_object_new (TRACKER_TYPE_FILES,
- "db-connection", db_con,
- NULL);
-
- return object;
-}
-
-void
-tracker_files_set_db_connection (TrackerFiles *object,
- DBConnection *db_con)
+tracker_files_new (void)
{
- TrackerFilesPriv *priv;
-
- g_return_if_fail (TRACKER_IS_FILES (object));
- g_return_if_fail (db_con != NULL);
-
- priv = GET_PRIV (object);
-
- priv->db_con = db_con;
-
- g_object_notify (G_OBJECT (object), "db-connection");
+ return g_object_new (TRACKER_TYPE_FILES, NULL);
}
/*
@@ -146,38 +61,35 @@
*/
gboolean
tracker_files_exist (TrackerFiles *object,
- const gchar *uri,
- gboolean auto_create,
- gboolean *value,
- GError **error)
-{
- TrackerFilesPriv *priv;
- guint request_id;
- DBConnection *db_con;
- guint32 file_id;
- gboolean exists;
+ const gchar *uri,
+ gboolean auto_create,
+ gboolean *value,
+ GError **error)
+{
+ TrackerDBInterface *iface;
+ guint request_id;
+ guint32 file_id;
+ gboolean exists;
request_id = tracker_dbus_get_next_request_id ();
tracker_dbus_return_val_if_fail (uri != NULL, FALSE, error);
tracker_dbus_return_val_if_fail (value != NULL, FALSE, error);
- priv = GET_PRIV (object);
-
- db_con = priv->db_con;
-
tracker_dbus_request_new (request_id,
"DBus request to see if files exist, "
"uri:'%s'",
uri);
+
+ iface = tracker_db_manager_get_db_interface (TRACKER_DB_FILE_METADATA);
- file_id = tracker_db_get_file_id (db_con, uri);
+ file_id = tracker_db_file_get_id (iface, uri);
exists = file_id > 0;
if (!exists && auto_create) {
TrackerDBFileInfo *info;
- gchar *service;
-
+ gchar *service;
+
info = tracker_db_file_info_new (uri, 1, 0, 0);
if (!tracker_file_is_valid (uri)) {
@@ -189,7 +101,7 @@
info = tracker_db_file_info_get (info);
}
- tracker_db_create_service (db_con, "Files", info);
+ tracker_db_service_create (iface, "Files", info);
tracker_db_file_info_free (info);
g_free (service);
}
@@ -210,15 +122,14 @@
gint mtime,
GError **error)
{
- TrackerFilesPriv *priv;
- guint request_id;
- DBConnection *db_con;
- TrackerDBFileInfo *info;
- gchar *name;
- gchar *path;
- gchar *service;
- guint32 file_id;
- gboolean created;
+ TrackerDBInterface *iface;
+ TrackerDBFileInfo *info;
+ guint request_id;
+ gchar *name;
+ gchar *path;
+ gchar *service;
+ guint32 file_id;
+ gboolean created;
request_id = tracker_dbus_get_next_request_id ();
@@ -227,10 +138,6 @@
tracker_dbus_return_val_if_fail (size >= 0, FALSE, error);
tracker_dbus_return_val_if_fail (mtime >= 0, FALSE, error);
- priv = GET_PRIV (object);
-
- db_con = priv->db_con;
-
tracker_dbus_request_new (request_id,
"DBus request to create file, "
"uri:'%s', is directory:%s, mime:'%s', "
@@ -241,6 +148,8 @@
size,
mtime);
+ iface = tracker_db_manager_get_db_interface (TRACKER_DB_FILE_METADATA);
+
/* Create structure */
info = tracker_db_file_info_new (uri, 1, 0, 0);
@@ -258,7 +167,7 @@
}
service = tracker_ontology_get_service_type_for_mime (mime);
- file_id = tracker_db_create_service (db_con, service, info);
+ file_id = tracker_db_service_create (iface, service, info);
tracker_db_file_info_free (info);
created = file_id != 0;
@@ -276,37 +185,36 @@
mtime_str = tracker_int_to_string (mtime);
size_str = tracker_int_to_string (size);
- tracker_db_set_single_metadata (db_con,
+ tracker_db_metadata_set_single (iface,
service,
file_id_str,
"File:Modified",
mtime_str,
FALSE);
- tracker_db_set_single_metadata (db_con,
+ tracker_db_metadata_set_single (iface,
service,
file_id_str,
"File:Size",
size_str,
FALSE);
- tracker_db_set_single_metadata (db_con,
+ tracker_db_metadata_set_single (iface,
service,
file_id_str,
"File:Name",
name,
FALSE);
- tracker_db_set_single_metadata (db_con,
+ tracker_db_metadata_set_single (iface,
service,
file_id_str,
"File:Path",
path,
FALSE);
- tracker_db_set_single_metadata (db_con,
+ tracker_db_metadata_set_single (iface,
service,
file_id_str,
"File:Format",
mime,
FALSE);
- tracker_notify_file_data_available ();
g_free (size_str);
g_free (mtime_str);
@@ -331,10 +239,9 @@
const gchar *uri,
GError **error)
{
- TrackerFilesPriv *priv;
+ TrackerDBInterface *iface;
TrackerDBResultSet *result_set;
guint request_id;
- DBConnection *db_con;
guint32 file_id;
gchar *name;
gchar *path;
@@ -345,16 +252,14 @@
tracker_dbus_return_val_if_fail (uri != NULL, FALSE, error);
- priv = GET_PRIV (object);
-
- db_con = priv->db_con;
-
tracker_dbus_request_new (request_id,
"DBus request to delete file, "
"uri:'%s'",
uri);
- file_id = tracker_db_get_file_id (db_con, uri);
+ iface = tracker_db_manager_get_db_interface (TRACKER_DB_FILE_METADATA);
+
+ file_id = tracker_db_file_get_id (iface, uri);
if (file_id == 0) {
tracker_dbus_request_comment (request_id,
"File or directory was not in database to delete, uri:'%s'",
@@ -373,7 +278,11 @@
is_directory = FALSE;
- result_set = tracker_exec_proc (db_con, "GetServiceID", path, name, NULL);
+ result_set = tracker_db_exec_proc (iface,
+ "GetServiceID",
+ path,
+ name,
+ NULL);
if (result_set) {
tracker_db_result_set_get (result_set, 2, &is_directory, -1);
g_object_unref (result_set);
@@ -385,7 +294,7 @@
action = TRACKER_DB_ACTION_FILE_DELETED;
}
- /* tracker_db_insert_pending_file (db_con, */
+ /* tracker_db_insert_pending_file (iface_cache, */
/* file_id, */
/* uri, */
/* NULL, */
@@ -410,10 +319,9 @@
gchar **value,
GError **error)
{
- TrackerFilesPriv *priv;
+ TrackerDBInterface *iface;
TrackerDBResultSet *result_set;
guint request_id;
- DBConnection *db_con;
guint32 file_id;
gchar *file_id_str;
const gchar *mime = NULL;
@@ -423,16 +331,14 @@
tracker_dbus_return_val_if_fail (uri != NULL, FALSE, error);
tracker_dbus_return_val_if_fail (value != NULL, FALSE, error);
- priv = GET_PRIV (object);
-
- db_con = priv->db_con;
-
tracker_dbus_request_new (request_id,
"DBus request to get service type ",
"uri:'%s'",
uri);
- file_id = tracker_db_get_file_id (db_con, uri);
+ iface = tracker_db_manager_get_db_interface (TRACKER_DB_FILE_METADATA);
+
+ file_id = tracker_db_file_get_id (iface, uri);
if (file_id < 1) {
tracker_dbus_request_failed (request_id,
@@ -446,8 +352,7 @@
file_id_str = tracker_uint_to_string (file_id);
mime = NULL;
- result_set = tracker_db_get_metadata (db_con,
- "Files",
+ result_set = tracker_db_metadata_get (iface,
file_id_str,
"File:Mime");
@@ -494,10 +399,10 @@
gchar **value,
GError **error)
{
- TrackerFilesPriv *priv;
+ TrackerDBInterface *iface_metadata;
+ TrackerDBInterface *iface_contents;
TrackerDBResultSet *result_set;
guint request_id;
- DBConnection *db_con;
gchar *service_id;
gchar *offset_str;
gchar *max_length_str;
@@ -509,10 +414,6 @@
tracker_dbus_return_val_if_fail (max_length >= 0, FALSE, error);
tracker_dbus_return_val_if_fail (value != NULL, FALSE, error);
- priv = GET_PRIV (object);
-
- db_con = priv->db_con;
-
tracker_dbus_request_new (request_id,
"DBus request to get text contents, "
"uri:'%s', offset:%d, max length:%d",
@@ -520,9 +421,12 @@
offset,
max_length);
- service_id = tracker_db_get_id (db_con, "Files", uri);
+ iface_metadata = tracker_db_manager_get_db_interface (TRACKER_DB_FILE_METADATA);
+ iface_contents = tracker_db_manager_get_db_interface (TRACKER_DB_FILE_CONTENTS);
+
+ service_id = tracker_db_file_get_id_as_string (iface_metadata, "Files", uri);
if (!service_id) {
- service_id = tracker_db_get_id (db_con, "Emails", uri);
+ service_id = tracker_db_file_get_id_as_string (iface_metadata, "Emails", uri);
if (!service_id) {
tracker_dbus_request_failed (request_id,
@@ -536,12 +440,12 @@
offset_str = tracker_int_to_string (offset);
max_length_str = tracker_int_to_string (max_length);
- result_set = tracker_exec_proc (db_con->blob,
- "GetFileContents",
- offset_str,
- max_length_str,
- service_id,
- NULL);
+ result_set = tracker_db_exec_proc (iface_contents,
+ "GetFileContents",
+ offset_str,
+ max_length_str,
+ service_id,
+ NULL);
g_free (max_length_str);
g_free (offset_str);
@@ -575,10 +479,9 @@
gchar **value,
GError **error)
{
- TrackerFilesPriv *priv;
+ TrackerDBInterface *iface;
TrackerDBResultSet *result_set = NULL;
guint request_id;
- DBConnection *db_con;
gchar *name;
gchar *path;
gchar *max_length_str;
@@ -588,10 +491,6 @@
tracker_dbus_return_val_if_fail (uri != NULL, FALSE, error);
tracker_dbus_return_val_if_fail (text != NULL, FALSE, error);
tracker_dbus_return_val_if_fail (value != NULL, FALSE, error);
-
- priv = GET_PRIV (object);
-
- db_con = priv->db_con;
tracker_dbus_request_new (request_id,
"DBus request to search text contents, "
@@ -600,6 +499,8 @@
text,
max_length);
+ iface = tracker_db_manager_get_db_interface (TRACKER_DB_FILE_METADATA);
+
if (uri[0] == G_DIR_SEPARATOR) {
name = g_path_get_basename (uri);
path = g_path_get_dirname (uri);
@@ -610,7 +511,7 @@
max_length_str = tracker_int_to_string (max_length);
- /* result_set = tracker_exec_proc (db_con, */
+ /* result_set = tracker_exec_proc (iface, */
/* "SearchFileContents", */
/* 4, */
/* path, */
@@ -650,10 +551,9 @@
gchar ***values,
GError **error)
{
- TrackerFilesPriv *priv;
+ TrackerDBInterface *iface;
TrackerDBResultSet *result_set;
guint request_id;
- DBConnection *db_con;
request_id = tracker_dbus_get_next_request_id ();
@@ -662,10 +562,6 @@
tracker_dbus_return_val_if_fail (max_hits >= 0, FALSE, error);
tracker_dbus_return_val_if_fail (values != NULL, FALSE, error);
- priv = GET_PRIV (object);
-
- db_con = priv->db_con;
-
tracker_dbus_request_new (request_id,
"DBus request to get files by service type, "
"query id:%d, service:'%s', offset:%d, max hits:%d, ",
@@ -674,6 +570,8 @@
offset,
max_hits);
+ iface = tracker_db_manager_get_db_interface (TRACKER_DB_FILE_METADATA);
+
if (!tracker_ontology_is_valid_service_type (service)) {
tracker_dbus_request_failed (request_id,
error,
@@ -682,7 +580,7 @@
return FALSE;
}
- result_set = tracker_db_get_files_by_service (db_con,
+ result_set = tracker_db_files_get_by_service (iface,
service,
offset,
max_hits);
@@ -707,10 +605,9 @@
gchar ***values,
GError **error)
{
- TrackerFilesPriv *priv;
+ TrackerDBInterface *iface;
TrackerDBResultSet *result_set;
guint request_id;
- DBConnection *db_con;
request_id = tracker_dbus_get_next_request_id ();
@@ -720,10 +617,6 @@
tracker_dbus_return_val_if_fail (max_hits >= 0, FALSE, error);
tracker_dbus_return_val_if_fail (values != NULL, FALSE, error);
- priv = GET_PRIV (object);
-
- db_con = priv->db_con;
-
tracker_dbus_request_new (request_id,
"DBus request to get files by mime types, "
"query id:%d, mime types:%d, offset:%d, max hits:%d, ",
@@ -732,7 +625,9 @@
offset,
max_hits);
- result_set = tracker_db_get_files_by_mime (db_con,
+ iface = tracker_db_manager_get_db_interface (TRACKER_DB_FILE_METADATA);
+
+ result_set = tracker_db_files_get_by_mime (iface,
mime_types,
g_strv_length (mime_types),
offset,
@@ -759,10 +654,9 @@
gchar ***values,
GError **error)
{
- TrackerFilesPriv *priv;
+ TrackerDBInterface *iface;
TrackerDBResultSet *result_set;
guint request_id;
- DBConnection *db_con;
request_id = tracker_dbus_get_next_request_id ();
@@ -772,10 +666,6 @@
tracker_dbus_return_val_if_fail (max_hits >= 0, FALSE, error);
tracker_dbus_return_val_if_fail (values != NULL, FALSE, error);
- priv = GET_PRIV (object);
-
- db_con = priv->db_con;
-
tracker_dbus_request_new (request_id,
"DBus request to get files by mime types (VFS), "
"query id:%d, mime types:%d, offset:%d, max hits:%d, ",
@@ -784,10 +674,12 @@
offset,
max_hits);
+ iface = tracker_db_manager_get_db_interface (TRACKER_DB_FILE_METADATA);
+
/* NOTE: The only difference between this function and the
* non-VFS version is the boolean in this function call:
*/
- result_set = tracker_db_get_files_by_mime (db_con,
+ result_set = tracker_db_files_get_by_mime (iface,
mime_types,
g_strv_length (mime_types),
offset,
@@ -811,10 +703,9 @@
gint *value,
GError **error)
{
- TrackerFilesPriv *priv;
+ TrackerDBInterface *iface;
TrackerDBResultSet *result_set;
guint request_id;
- DBConnection *db_con;
gchar *path;
gchar *name;
@@ -823,15 +714,13 @@
tracker_dbus_return_val_if_fail (uri != NULL, FALSE, error);
tracker_dbus_return_val_if_fail (value != NULL, FALSE, error);
- priv = GET_PRIV (object);
-
- db_con = priv->db_con;
-
tracker_dbus_request_new (request_id,
"DBus request for mtime, "
"uri:'%s'",
uri);
+ iface = tracker_db_manager_get_db_interface (TRACKER_DB_FILE_METADATA);
+
if (uri[0] == G_DIR_SEPARATOR) {
name = g_path_get_basename (uri);
path = g_path_get_dirname (uri);
@@ -840,11 +729,11 @@
path = tracker_file_get_vfs_path (uri);
}
- result_set = tracker_exec_proc (db_con,
- "GetFileMTime",
- path,
- name,
- NULL);
+ result_set = tracker_db_exec_proc (iface,
+ "GetFileMTime",
+ path,
+ name,
+ NULL);
g_free (path);
g_free (name);
@@ -872,11 +761,10 @@
GPtrArray **values,
GError **error)
{
- TrackerFilesPriv *priv;
+ TrackerDBInterface *iface;
TrackerDBResultSet *result_set;
- guint request_id;
- DBConnection *db_con;
TrackerField *defs[255];
+ guint request_id;
guint i;
gchar *uri_filtered;
guint32 file_id;
@@ -891,10 +779,6 @@
tracker_dbus_return_val_if_fail (g_strv_length (fields) > 0, FALSE, error);
tracker_dbus_return_val_if_fail (values != NULL, FALSE, error);
- priv = GET_PRIV (object);
-
- db_con = priv->db_con;
-
tracker_dbus_request_new (request_id,
"DBus request for metadata for files in folder, "
"query id:%d, uri:'%s', fields:%d",
@@ -902,6 +786,8 @@
uri,
g_strv_length (fields));
+ iface = tracker_db_manager_get_db_interface (TRACKER_DB_FILE_METADATA);
+
/* Get fields for metadata list provided */
for (i = 0; i < g_strv_length (fields); i++) {
defs[i] = tracker_ontology_get_field_def (fields[i]);
@@ -924,7 +810,7 @@
}
/* Get file ID in database */
- file_id = tracker_db_get_file_id (db_con, uri_filtered);
+ file_id = tracker_db_file_get_id (iface, uri_filtered);
if (file_id == 0) {
g_free (uri_filtered);
tracker_dbus_request_failed (request_id,
@@ -964,13 +850,13 @@
" FROM Services F ");
for (i = 0; i < g_strv_length (fields); i++) {
- gchar *table;
+ const gchar *table;
if (!needs_join[i]) {
continue;
}
- table = tracker_get_metadata_table (tracker_field_get_data_type (defs[i]));
+ table = tracker_db_metadata_get_table (tracker_field_get_data_type (defs[i]));
g_string_append_printf (sql,
" LEFT OUTER JOIN %s M%d ON "
@@ -981,8 +867,6 @@
i+1,
i+1,
tracker_field_get_id (defs[i]));
-
- g_free (table);
}
/* Build WHERE clause */
@@ -992,7 +876,7 @@
g_free (uri_filtered);
query = g_string_free (sql, FALSE);
- result_set = tracker_db_interface_execute_query (db_con->db, NULL, query);
+ result_set = tracker_db_interface_execute_query (iface, NULL, query);
*values = tracker_dbus_query_result_to_ptr_array (result_set);
if (result_set) {
Modified: branches/xesam-support/src/trackerd/tracker-files.h
==============================================================================
--- branches/xesam-support/src/trackerd/tracker-files.h (original)
+++ branches/xesam-support/src/trackerd/tracker-files.h Mon Jun 9 15:41:07 2008
@@ -24,8 +24,6 @@
#include <glib-object.h>
-#include "tracker-db-sqlite.h"
-
#define TRACKER_FILES_SERVICE "org.freedesktop.Tracker"
#define TRACKER_FILES_PATH "/org/freedesktop/Tracker/Files"
#define TRACKER_FILES_INTERFACE "org.freedesktop.Tracker.Files"
@@ -53,9 +51,7 @@
GType tracker_files_get_type (void);
TrackerFiles *
- tracker_files_new (DBConnection *db_con);
-void tracker_files_set_db_connection (TrackerFiles *object,
- DBConnection *db_con);
+ tracker_files_new (void);
gboolean tracker_files_exist (TrackerFiles *object,
const gchar *uri,
gboolean auto_create,
Modified: branches/xesam-support/src/trackerd/tracker-indexer.c
==============================================================================
--- branches/xesam-support/src/trackerd/tracker-indexer.c (original)
+++ branches/xesam-support/src/trackerd/tracker-indexer.c Mon Jun 9 15:41:07 2008
@@ -70,6 +70,9 @@
extern Tracker *tracker;
+static gint merge_count = 0;
+static gint merge_processed = 0;
+
struct Indexer_ {
DEPOT *word_index; /* file hashtable handle for the word -> {serviceID, ServiceTypeID, Score} */
GMutex *word_mutex;
@@ -411,8 +414,8 @@
dpiterinit (src->word_index);
tracker->in_merge = TRUE;
- tracker->merge_count = 1;
- tracker->merge_processed = 0;
+ merge_count = 1;
+ merge_processed = 0;
/* Signal progress */
object = tracker_dbus_get_object (TRACKER_TYPE_DAEMON);
@@ -421,8 +424,8 @@
"Merging",
"",
tracker->index_count,
- tracker->merge_processed,
- tracker->merge_count);
+ merge_processed,
+ merge_count);
while ((str = dpiternext (src->word_index, NULL))) {
@@ -480,8 +483,8 @@
}
tracker->in_merge = FALSE;
- tracker->merge_count = 1;
- tracker->merge_processed = 1;
+ merge_count = 1;
+ merge_processed = 1;
/* Signal progress */
object = tracker_dbus_get_object (TRACKER_TYPE_DAEMON);
@@ -490,8 +493,8 @@
"Merging",
"",
tracker->index_count,
- tracker->merge_processed,
- tracker->merge_count);
+ merge_processed,
+ merge_count);
}
gboolean
@@ -671,8 +674,8 @@
g_message ("starting merge of %d indexes", index_count);
tracker->in_merge = TRUE;
- tracker->merge_count = index_count;
- tracker->merge_processed = 0;
+ merge_count = index_count;
+ merge_processed = 0;
/* Signal progress */
g_signal_emit_by_name (object,
@@ -680,8 +683,8 @@
"Merging",
"",
tracker->index_count,
- tracker->merge_processed,
- tracker->merge_count);
+ merge_processed,
+ merge_count);
if (index_count == 2 && !final_exists) {
Indexer *index1 = index_list->data ;
@@ -837,7 +840,7 @@
GObject *object;
tracker_indexer_free (index, TRUE);
- tracker->merge_processed++;
+ merge_processed++;
/* Signal progress */
object = tracker_dbus_get_object (TRACKER_TYPE_DAEMON);
@@ -846,8 +849,8 @@
"Merging",
"",
tracker->index_count,
- tracker->merge_processed,
- tracker->merge_count);
+ merge_processed,
+ merge_count);
}
Modified: branches/xesam-support/src/trackerd/tracker-keywords.c
==============================================================================
--- branches/xesam-support/src/trackerd/tracker-keywords.c (original)
+++ branches/xesam-support/src/trackerd/tracker-keywords.c Mon Jun 9 15:41:07 2008
@@ -26,6 +26,7 @@
#include <libtracker-common/tracker-utils.h>
#include <libtracker-db/tracker-db-dbus.h>
+#include <libtracker-db/tracker-db-manager.h>
#include "tracker-dbus.h"
#include "tracker-keywords.h"
@@ -35,26 +36,16 @@
#define GET_PRIV(obj) (G_TYPE_INSTANCE_GET_PRIVATE ((obj), TRACKER_TYPE_KEYWORDS, TrackerKeywordsPriv))
typedef struct {
- DBusGProxy *fd_proxy;
- DBConnection *db_con;
+ DBusGProxy *fd_proxy;
} TrackerKeywordsPriv;
enum {
- PROP_0,
- PROP_DB_CONNECTION
-};
-
-enum {
KEYWORD_ADDED,
KEYWORD_REMOVED,
LAST_SIGNAL
};
static void keywords_finalize (GObject *object);
-static void keywords_set_property (GObject *object,
- guint param_id,
- const GValue *value,
- GParamSpec *pspec);
static guint signals[LAST_SIGNAL] = {0};
@@ -68,14 +59,6 @@
object_class = G_OBJECT_CLASS (klass);
object_class->finalize = keywords_finalize;
- object_class->set_property = keywords_set_property;
-
- g_object_class_install_property (object_class,
- PROP_DB_CONNECTION,
- g_param_spec_pointer ("db-connection",
- "DB connection",
- "Database connection to use in transactions",
- G_PARAM_WRITABLE));
signals[KEYWORD_ADDED] =
g_signal_new ("keyword-added",
@@ -118,54 +101,10 @@
G_OBJECT_CLASS (tracker_keywords_parent_class)->finalize (object);
}
-static void
-keywords_set_property (GObject *object,
- guint param_id,
- const GValue *value,
- GParamSpec *pspec)
-{
- TrackerKeywordsPriv *priv;
-
- priv = GET_PRIV (object);
-
- switch (param_id) {
- case PROP_DB_CONNECTION:
- tracker_keywords_set_db_connection (TRACKER_KEYWORDS (object),
- g_value_get_pointer (value));
- break;
-
- default:
- G_OBJECT_WARN_INVALID_PROPERTY_ID (object, param_id, pspec);
- break;
- };
-}
-
TrackerKeywords *
-tracker_keywords_new (DBConnection *db_con)
+tracker_keywords_new (void)
{
- TrackerKeywords *object;
-
- object = g_object_new (TRACKER_TYPE_KEYWORDS,
- "db-connection", db_con,
- NULL);
-
- return object;
-}
-
-void
-tracker_keywords_set_db_connection (TrackerKeywords *object,
- DBConnection *db_con)
-{
- TrackerKeywordsPriv *priv;
-
- g_return_if_fail (TRACKER_IS_KEYWORDS (object));
- g_return_if_fail (db_con != NULL);
-
- priv = GET_PRIV (object);
-
- priv->db_con = db_con;
-
- g_object_notify (G_OBJECT (object), "db-connection");
+ return g_object_new (TRACKER_TYPE_KEYWORDS, NULL);
}
/*
@@ -177,20 +116,15 @@
GPtrArray **values,
GError **error)
{
- TrackerKeywordsPriv *priv;
- TrackerDBResultSet *result_set;
- guint request_id;
- DBConnection *db_con;
+ TrackerDBInterface *iface;
+ TrackerDBResultSet *result_set;
+ guint request_id;
request_id = tracker_dbus_get_next_request_id ();
tracker_dbus_return_val_if_fail (service != NULL, FALSE, error);
tracker_dbus_return_val_if_fail (values != NULL, FALSE, error);
- priv = GET_PRIV (object);
-
- db_con = priv->db_con;
-
tracker_dbus_request_new (request_id,
"DBus request to get keywords list, "
"service:'%s'",
@@ -204,10 +138,8 @@
return FALSE;
}
- /* Check we have the right database connection */
- db_con = tracker_db_get_service_connection (db_con, service);
-
- result_set = tracker_db_get_keyword_list (db_con, service);
+ iface = tracker_db_manager_get_db_interface_by_service (service, FALSE);
+ result_set = tracker_db_keywords_get_list (iface, service);
*values = tracker_dbus_query_result_to_ptr_array (result_set);
if (result_set) {
@@ -226,21 +158,16 @@
gchar ***values,
GError **error)
{
- TrackerKeywordsPriv *priv;
- TrackerDBResultSet *result_set;
- DBConnection *db_con;
- guint request_id;
- gchar *id;
+ TrackerDBInterface *iface;
+ TrackerDBResultSet *result_set;
+ guint request_id;
+ gchar *id;
request_id = tracker_dbus_get_next_request_id ();
tracker_dbus_return_val_if_fail (service != NULL, FALSE, error);
tracker_dbus_return_val_if_fail (values != NULL, FALSE, error);
- priv = GET_PRIV (object);
-
- db_con = priv->db_con;
-
tracker_dbus_request_new (request_id,
"DBus request to get keywords, "
"service:'%s', uri:'%s'",
@@ -262,10 +189,8 @@
return FALSE;
}
- /* Check we have the right database connection */
- db_con = tracker_db_get_service_connection (db_con, service);
-
- id = tracker_db_get_id (db_con, service, uri);
+ iface = tracker_db_manager_get_db_interface_by_service (service, FALSE);
+ id = tracker_db_file_get_id_as_string (iface, service, uri);
if (!id) {
tracker_dbus_request_failed (request_id,
error,
@@ -274,8 +199,7 @@
return FALSE;
}
- result_set = tracker_db_get_metadata (db_con,
- service,
+ result_set = tracker_db_metadata_get (iface,
id,
"User:Keywords");
*values = tracker_dbus_query_result_to_strv (result_set, NULL);
@@ -298,11 +222,10 @@
gchar **values,
GError **error)
{
- TrackerKeywordsPriv *priv;
- DBConnection *db_con;
- guint request_id;
- gchar *id;
- gchar **p;
+ TrackerDBInterface *iface;
+ guint request_id;
+ gchar *id;
+ gchar **p;
request_id = tracker_dbus_get_next_request_id ();
@@ -310,10 +233,6 @@
tracker_dbus_return_val_if_fail (uri != NULL, FALSE, error);
tracker_dbus_return_val_if_fail (values != NULL, FALSE, error);
- priv = GET_PRIV (object);
-
- db_con = priv->db_con;
-
tracker_dbus_request_new (request_id,
"DBus request to add keywords, "
"service:'%s', uri:'%s'",
@@ -335,23 +254,18 @@
return FALSE;
}
- /* Check we have the right database connection */
- db_con = tracker_db_get_service_connection (db_con, service);
-
- id = tracker_db_get_id (db_con, service, uri);
+ iface = tracker_db_manager_get_db_interface_by_service (service, FALSE);
+ id = tracker_db_file_get_id_as_string (iface, service, uri);
tracker_dbus_return_val_if_fail (id != NULL, FALSE, error);
- tracker_db_set_metadata (db_con,
+ tracker_db_metadata_set (iface,
service,
id,
"User:Keywords",
values,
- g_strv_length (values),
TRUE);
g_free (id);
- tracker_notify_file_data_available ();
-
for (p = values; *p; p++) {
g_message ("Added keyword %s to %s with ID %s", *p, uri, id);
g_signal_emit (object, signals[KEYWORD_ADDED], 0, service, uri, *p);
@@ -369,11 +283,10 @@
gchar **values,
GError **error)
{
- TrackerKeywordsPriv *priv;
- DBConnection *db_con;
- guint request_id;
- gchar *id;
- gchar **p;
+ TrackerDBInterface *iface;
+ guint request_id;
+ gchar *id;
+ gchar **p;
request_id = tracker_dbus_get_next_request_id ();
@@ -381,10 +294,6 @@
tracker_dbus_return_val_if_fail (uri != NULL, FALSE, error);
tracker_dbus_return_val_if_fail (values != NULL, FALSE, error);
- priv = GET_PRIV (object);
-
- db_con = priv->db_con;
-
tracker_dbus_request_new (request_id,
"DBus request to remove keywords, "
"service:'%s', uri:'%s'",
@@ -406,10 +315,8 @@
return FALSE;
}
- /* Check we have the right database connection */
- db_con = tracker_db_get_service_connection (db_con, service);
-
- id = tracker_db_get_id (db_con, service, uri);
+ iface = tracker_db_manager_get_db_interface_by_service (service, FALSE);
+ id = tracker_db_file_get_id_as_string (iface, service, uri);
if (!id) {
tracker_dbus_request_failed (request_id,
error,
@@ -418,14 +325,9 @@
return FALSE;
}
- tracker_notify_file_data_available ();
-
for (p = values; *p; p++) {
g_message ("Removed keyword %s from %s with ID %s", *p, uri, id);
- tracker_db_delete_metadata_value (db_con, service, id, "User:Keywords", *p);
-
- /* FIXME: Should we be doing this for EACH keyword? */
- tracker_notify_file_data_available ();
+ tracker_db_metadata_delete_value (iface, service, id, "User:Keywords", *p);
g_signal_emit (object, signals[KEYWORD_REMOVED], 0, service, uri, *p);
}
@@ -443,20 +345,15 @@
const gchar *uri,
GError **error)
{
- TrackerKeywordsPriv *priv;
- DBConnection *db_con;
- guint request_id;
- gchar *id;
+ TrackerDBInterface *iface;
+ guint request_id;
+ gchar *id;
request_id = tracker_dbus_get_next_request_id ();
tracker_dbus_return_val_if_fail (service != NULL, FALSE, error);
tracker_dbus_return_val_if_fail (uri != NULL, FALSE, error);
- priv = GET_PRIV (object);
-
- db_con = priv->db_con;
-
tracker_dbus_request_new (request_id,
"DBus request to remove all keywords, "
"service:'%s', uri:'%s'",
@@ -478,10 +375,8 @@
return FALSE;
}
- /* Check we have the right database connection */
- db_con = tracker_db_get_service_connection (db_con, service);
-
- id = tracker_db_get_id (db_con, service, uri);
+ iface = tracker_db_manager_get_db_interface_by_service (service, FALSE);
+ id = tracker_db_file_get_id_as_string (iface, service, uri);
if (!id) {
tracker_dbus_request_failed (request_id,
error,
@@ -490,11 +385,13 @@
return FALSE;
}
- tracker_db_delete_metadata (db_con, service, id, "User:Keywords", TRUE);
+ tracker_db_metadata_delete (iface,
+ service,
+ id,
+ "User:Keywords",
+ TRUE);
g_free (id);
- tracker_notify_file_data_available ();
-
tracker_dbus_request_success (request_id);
return TRUE;
@@ -510,16 +407,15 @@
gchar ***values,
GError **error)
{
- TrackerKeywordsPriv *priv;
- TrackerDBResultSet *result_set;
- DBConnection *db_con;
- guint request_id;
- const gchar **p;
- GString *search;
- GString *select;
- GString *where;
- gchar *related_metadata;
- gchar *query;
+ TrackerDBInterface *iface;
+ TrackerDBResultSet *result_set;
+ guint request_id;
+ const gchar **p;
+ GString *search;
+ GString *select;
+ GString *where;
+ gchar *related_metadata;
+ gchar *query;
request_id = tracker_dbus_get_next_request_id ();
@@ -527,10 +423,6 @@
tracker_dbus_return_val_if_fail (keywords != NULL, FALSE, error);
tracker_dbus_return_val_if_fail (values != NULL, FALSE, error);
- priv = GET_PRIV (object);
-
- db_con = priv->db_con;
-
tracker_dbus_request_new (request_id,
"DBus request to search keywords, "
"query id:%d, service:'%s', offset:%d, "
@@ -548,8 +440,7 @@
return FALSE;
}
- /* Check we have the right database connection */
- db_con = tracker_db_get_service_connection (db_con, service);
+ iface = tracker_db_manager_get_db_interface_by_service (service, FALSE);
/* Sanity check values */
offset = MAX (offset, 0);
@@ -575,7 +466,7 @@
"' || S.Name as EntityName from Services S, ServiceKeywordMetaData M ");
/* Create where string */
- related_metadata = tracker_get_related_metadata_names (db_con, "User:Keywords");
+ related_metadata = tracker_db_metadata_get_related_names (iface, "User:Keywords");
where = g_string_new ("");
g_string_append_printf (where,
@@ -603,7 +494,7 @@
g_debug (query);
- result_set = tracker_db_interface_execute_query (db_con->db, NULL, query);
+ result_set = tracker_db_interface_execute_query (iface, NULL, query);
*values = tracker_dbus_query_result_to_strv (result_set, NULL);
if (result_set) {
Modified: branches/xesam-support/src/trackerd/tracker-keywords.h
==============================================================================
--- branches/xesam-support/src/trackerd/tracker-keywords.h (original)
+++ branches/xesam-support/src/trackerd/tracker-keywords.h Mon Jun 9 15:41:07 2008
@@ -24,8 +24,6 @@
#include <glib-object.h>
-#include "tracker-db-sqlite.h"
-
#define TRACKER_KEYWORDS_SERVICE "org.freedesktop.Tracker"
#define TRACKER_KEYWORDS_PATH "/org/freedesktop/Tracker/Keywords"
#define TRACKER_KEYWORDS_INTERFACE "org.freedesktop.Tracker.Keywords"
@@ -51,9 +49,7 @@
};
GType tracker_keywords_get_type (void);
-TrackerKeywords *tracker_keywords_new (DBConnection *db_con);
-void tracker_keywords_set_db_connection (TrackerKeywords *object,
- DBConnection *db_con);
+TrackerKeywords *tracker_keywords_new (void);
gboolean tracker_keywords_get_list (TrackerKeywords *object,
const gchar *service,
GPtrArray **values,
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 Mon Jun 9 15:41:07 2008
@@ -119,7 +119,6 @@
/* Public */
Tracker *tracker;
-DBConnection *main_thread_db_con;
/* Private */
static GMainLoop *main_loop;
@@ -248,11 +247,13 @@
/* Reset mtime on parent folder of all outstanding black list
* files so they get indexed when next restarted
*/
- tracker_exec_proc (main_thread_db_con,
- "UpdateFileMTime", "0",
- dirname_parent, basename,
- NULL);
-
+ tracker_db_exec_proc (tracker_db_manager_get_db_interface (TRACKER_DB_FILE_METADATA),
+ "UpdateFileMTime",
+ "0",
+ dirname_parent,
+ basename,
+ NULL);
+
g_free (basename);
g_free (dirname_parent);
g_free (dirname);
@@ -290,18 +291,6 @@
no_index_file_types = tracker_config_get_no_index_file_types (tracker->config);
- if (!tracker_config_get_low_memory_mode (tracker->config)) {
- tracker->memory_limit = 16000 *1024;
-
- tracker->max_process_queue_size = 5000;
- tracker->max_extract_queue_size = 5000;
- } else {
- tracker->memory_limit = 8192 * 1024;
-
- tracker->max_process_queue_size = 500;
- tracker->max_extract_queue_size = 500;
- }
-
g_message ("Tracker configuration options:");
g_message (" Verbosity ............................ %d",
tracker_config_get_verbosity (tracker->config));
@@ -369,36 +358,22 @@
static void
create_index (gboolean need_data)
{
- DBConnection *db_con;
+ TrackerDBInterface *iface;
tracker->first_time_index = TRUE;
- /* Create files db and emails db */
- db_con = tracker_db_connect ();
-
/* Reset stats for embedded services if they are being reindexed */
if (!need_data) {
+ iface = tracker_db_manager_get_db_interface (TRACKER_DB_FILE_METADATA);
+
g_message ("*** DELETING STATS *** ");
- tracker_db_exec_no_reply (db_con->db,
+ tracker_db_exec_no_reply (iface,
"update ServiceTypes set TypeCount = 0 where Embedded = 1");
}
- tracker_db_close (db_con->db);
- g_free (db_con);
-
/* Create databases */
- db_con = tracker_db_connect_file_content ();
- tracker_db_close (db_con->db);
- g_free (db_con);
-
- db_con = tracker_db_connect_email_content ();
- tracker_db_close (db_con->db);
- g_free (db_con);
-
- db_con = tracker_db_connect_emails ();
- tracker_db_close (db_con->db);
- g_free (db_con);
+ /* create file content, email content and email dbs */
}
static gboolean
@@ -517,7 +492,7 @@
g_free (filename);
/* Remove database if we are reindexing */
- if (reindex || tracker_db_needs_setup ()) {
+ if (reindex) {
tracker_path_remove (data_dir);
*need_index = TRUE;
}
@@ -540,68 +515,34 @@
}
static void
-initialise_threading (void)
-{
- tracker->files_check_mutex = g_mutex_new ();
- tracker->files_signal_mutex = g_mutex_new ();
- tracker->files_signal_cond = g_cond_new ();
-
- tracker->metadata_check_mutex = g_mutex_new ();
- tracker->metadata_signal_mutex = g_mutex_new ();
- tracker->metadata_signal_cond = g_cond_new ();
-}
-
-static void
initialise_databases (gboolean need_index)
{
- Indexer *index;
- DBConnection *db_con;
- gchar *final_index_name;
- gboolean need_data;
-
- /* FIXME: is this actually necessary? */
- db_con = tracker_db_connect_cache ();
- tracker_db_close (db_con->db);
-
- need_data = tracker_db_common_need_build ();
-
- if (need_data) {
- tracker_create_common_db ();
- }
-
+ Indexer *index;
+ gchar *final_index_name;
+ gboolean need_data;
+
if (!tracker->readonly && need_index) {
create_index (need_data);
} else {
tracker->first_time_index = FALSE;
}
- /* Set up main database connection */
- db_con = tracker_db_connect ();
-
/* Check db integrity if not previously shut down cleanly */
if (!tracker->readonly &&
!need_index &&
- tracker_db_get_option_int (db_con, "IntegrityCheck") == 1) {
+ tracker_db_get_option_int ("IntegrityCheck") == 1) {
g_message ("Performing integrity check as the daemon was not shutdown cleanly");
/* FIXME: Finish */
}
if (!tracker->readonly) {
- tracker_db_set_option_int (db_con, "IntegrityCheck", 1);
+ tracker_db_set_option_int ("IntegrityCheck", 1);
}
if (tracker->first_time_index) {
- tracker_db_set_option_int (db_con, "InitialIndex", 1);
+ tracker_db_set_option_int ("InitialIndex", 1);
}
- /* Create connections */
- // you shouldn't have to do this at all !
- // In fact, it's even terribly wrong to do this!
- //db_con->cache = tracker_db_connect_cache ();
- //db_con->common = tracker_db_connect_common ();
-
- main_thread_db_con = db_con;
-
/* Move final file to index file if present and no files left
* to merge.
*/
@@ -655,68 +596,7 @@
index = tracker_indexer_open (TRACKER_INDEXER_EMAIL_INDEX_DB_FILENAME, TRUE);
tracker->email_index = index;
- db_con->word_index = tracker->file_index;
-
- tracker_db_get_static_data (db_con);
-}
-
-static void
-shutdown_threads (GThread *thread_to_join)
-{
- g_message ("Shutting down threads");
-
- /* Wait for files thread to sleep */
- while (!g_mutex_trylock (tracker->files_signal_mutex)) {
- g_usleep (100);
- }
-
- g_mutex_unlock (tracker->files_signal_mutex);
-
- while (!g_mutex_trylock (tracker->metadata_signal_mutex)) {
- g_usleep (100);
- }
-
- g_mutex_unlock (tracker->metadata_signal_mutex);
-
- /* Send signals to each thread to wake them up and then stop
- * them.
- */
- g_mutex_lock (tracker->metadata_signal_mutex);
- g_cond_signal (tracker->metadata_signal_cond);
- g_mutex_unlock (tracker->metadata_signal_mutex);
-
- g_mutex_unlock (tracker->files_check_mutex);
-
- g_mutex_lock (tracker->files_signal_mutex);
- g_cond_signal (tracker->files_signal_cond);
- g_mutex_unlock (tracker->files_signal_mutex);
-
- /* Wait for threads to exit and unlock check mutexes to
- * prevent any deadlocks
- */
- g_mutex_unlock (tracker->metadata_check_mutex);
- g_mutex_unlock (tracker->files_check_mutex);
-
-#if 0
- /* We wait now for the thread to exit and join, then clean up
- * the mutexts and conds.
- */
- g_message ("Waiting for thread to finish");
- g_thread_join (thread_to_join);
-#endif
-
- /* Clean up */
-#if 0
- g_message ("Waiting for file check/signal mutexes to unlock before cleaning up...");
- g_mutex_free (tracker->files_check_mutex);
- g_mutex_free (tracker->files_signal_mutex);
- g_cond_free (tracker->files_signal_cond);
-
- g_message ("Waiting for metadata check/signal mutexes to unlock before cleaning up...");
- g_mutex_free (tracker->metadata_check_mutex);
- g_mutex_free (tracker->metadata_signal_mutex);
- g_cond_free (tracker->metadata_signal_cond);
-#endif
+ /* db_con->word_index = tracker->file_index; */
}
static gboolean
@@ -762,9 +642,7 @@
shutdown_databases (void)
{
/* Reset integrity status as threads have closed cleanly */
- tracker_db_set_option_int (main_thread_db_con, "IntegrityCheck", 0);
-
- tracker_db_close (main_thread_db_con->db);
+ tracker_db_set_option_int ("IntegrityCheck", 0);
}
static void
@@ -800,7 +678,6 @@
{
GOptionContext *context = NULL;
GError *error = NULL;
- GThread *thread;
GSList *l;
gchar *example;
gboolean need_index;
@@ -866,9 +743,6 @@
tracker->pid = getpid ();
- tracker->max_process_queue_size = MAX_PROCESS_QUEUE_SIZE;
- tracker->max_extract_queue_size = MAX_EXTRACT_QUEUE_SIZE;
-
/* This makes sure we have all the locations like the data
* dir, user data dir, etc all configured.
*
@@ -935,30 +809,24 @@
return EXIT_FAILURE;
}
+ initialise_directories (&need_index);
+
tracker_nfs_lock_init (tracker_config_get_nfs_locking (tracker->config));
- tracker_watcher_init ();
+ tracker_ontology_init ();
tracker_db_init ();
- tracker_db_manager_init (data_dir, user_data_dir, sys_tmp_dir);
+ tracker_db_manager_init (FALSE, data_dir, user_data_dir, sys_tmp_dir); /* Using TRUE=broken */
tracker_xesam_manager_init ();
- tracker_ontology_init ();
tracker_email_start_email_watching (tracker_config_get_email_client (tracker->config));
#ifdef HAVE_HAL
tracker->hal = tracker_hal_new ();
#endif /* HAVE_HAL */
- initialise_directories (&need_index);
- initialise_threading ();
umask (077);
tracker->readonly = check_multiple_instances ();
- if (!tracker_db_load_prepared_queries ()) {
- g_critical ("Could not initialize database engine!");
- return EXIT_FAILURE;
- }
-
initialise_databases (need_index);
/* Set our status as running, if this is FALSE, threads stop
@@ -1036,17 +904,16 @@
shutdown_indexer ();
shutdown_databases ();
- shutdown_threads (thread);
shutdown_directories ();
/* Shutdown major subsystems */
tracker_process_files_shutdown ();
tracker_email_end_email_watching ();
tracker_dbus_shutdown ();
- tracker_ontology_shutdown ();
tracker_xesam_manager_shutdown ();
tracker_db_shutdown ();
tracker_db_manager_shutdown ();
+ tracker_ontology_shutdown ();
tracker_watcher_shutdown ();
tracker_nfs_lock_shutdown ();
tracker_log_shutdown ();
Modified: branches/xesam-support/src/trackerd/tracker-main.h
==============================================================================
--- branches/xesam-support/src/trackerd/tracker-main.h (original)
+++ branches/xesam-support/src/trackerd/tracker-main.h Mon Jun 9 15:41:07 2008
@@ -38,21 +38,9 @@
#include "tracker-indexer.h"
-/* default performance options */
-#define MAX_PROCESS_QUEUE_SIZE 100
-#define MAX_EXTRACT_QUEUE_SIZE 500
-
G_BEGIN_DECLS
typedef struct {
- gboolean is_running;
- gboolean readonly;
-
- gint pid;
-
- gboolean reindex;
-
-
#ifdef HAVE_HAL
TrackerHal *hal;
#endif
@@ -60,14 +48,13 @@
TrackerConfig *config;
TrackerLanguage *language;
- /* Config options */
- guint32 watch_limit;
+ gboolean is_running;
+ gboolean readonly;
+
+ gint pid;
- /* Performance and memory usage options */
- gint max_process_queue_size;
- gint max_extract_queue_size;
- gint memory_limit;
-
+ gboolean reindex;
+
/* Pause/shutdown */
gboolean pause_manual;
gboolean pause_battery;
@@ -86,29 +73,11 @@
gint mbox_count;
gint mbox_processed;
- /* Email config options */
- gint email_service_min;
- gint email_service_max;
-
/* Progress info for merges */
gboolean in_merge;
- gint merge_count;
- gint merge_processed;
/* Application run time values */
gint index_count;
-
- gint word_detail_count;
- gint word_count;
- gint word_update_count;
-
- GMutex *files_check_mutex;
- GMutex *files_signal_mutex;
- GCond *files_signal_cond;
-
- GMutex *metadata_check_mutex;
- GMutex *metadata_signal_mutex;
- GCond *metadata_signal_cond;
} Tracker;
void tracker_shutdown (void);
Modified: branches/xesam-support/src/trackerd/tracker-metadata.c
==============================================================================
--- branches/xesam-support/src/trackerd/tracker-metadata.c (original)
+++ branches/xesam-support/src/trackerd/tracker-metadata.c Mon Jun 9 15:41:07 2008
@@ -29,29 +29,13 @@
#include <libtracker-common/tracker-utils.h>
#include <libtracker-db/tracker-db-dbus.h>
+#include <libtracker-db/tracker-db-manager.h>
#include "tracker-dbus.h"
#include "tracker-metadata.h"
#include "tracker-db.h"
#include "tracker-marshal.h"
-#define GET_PRIV(obj) (G_TYPE_INSTANCE_GET_PRIVATE ((obj), TRACKER_TYPE_METADATA, TrackerMetadataPriv))
-
-typedef struct {
- DBConnection *db_con;
-} TrackerMetadataPriv;
-
-enum {
- PROP_0,
- PROP_DB_CONNECTION
-};
-
-static void metadata_finalize (GObject *object);
-static void metadata_set_property (GObject *object,
- guint param_id,
- const GValue *value,
- GParamSpec *pspec);
-
static const gchar *types[] = {
"index",
"string",
@@ -65,21 +49,6 @@
static void
tracker_metadata_class_init (TrackerMetadataClass *klass)
{
- GObjectClass *object_class;
-
- object_class = G_OBJECT_CLASS (klass);
-
- object_class->finalize = metadata_finalize;
- object_class->set_property = metadata_set_property;
-
- g_object_class_install_property (object_class,
- PROP_DB_CONNECTION,
- g_param_spec_pointer ("db-connection",
- "DB connection",
- "Database connection to use in transactions",
- G_PARAM_WRITABLE));
-
- g_type_class_add_private (object_class, sizeof (TrackerMetadataPriv));
}
static void
@@ -87,64 +56,10 @@
{
}
-static void
-metadata_finalize (GObject *object)
-{
- TrackerMetadataPriv *priv;
-
- priv = GET_PRIV (object);
-
- G_OBJECT_CLASS (tracker_metadata_parent_class)->finalize (object);
-}
-
-static void
-metadata_set_property (GObject *object,
- guint param_id,
- const GValue *value,
- GParamSpec *pspec)
-{
- TrackerMetadataPriv *priv;
-
- priv = GET_PRIV (object);
-
- switch (param_id) {
- case PROP_DB_CONNECTION:
- tracker_metadata_set_db_connection (TRACKER_METADATA (object),
- g_value_get_pointer (value));
- break;
-
- default:
- G_OBJECT_WARN_INVALID_PROPERTY_ID (object, param_id, pspec);
- break;
- };
-}
-
TrackerMetadata *
-tracker_metadata_new (DBConnection *db_con)
+tracker_metadata_new (void)
{
- TrackerMetadata *object;
-
- object = g_object_new (TRACKER_TYPE_METADATA,
- "db-connection", db_con,
- NULL);
-
- return object;
-}
-
-void
-tracker_metadata_set_db_connection (TrackerMetadata *object,
- DBConnection *db_con)
-{
- TrackerMetadataPriv *priv;
-
- g_return_if_fail (TRACKER_IS_METADATA (object));
- g_return_if_fail (db_con != NULL);
-
- priv = GET_PRIV (object);
-
- priv->db_con = db_con;
-
- g_object_notify (G_OBJECT (object), "db-connection");
+ return g_object_new (TRACKER_TYPE_METADATA, NULL);
}
/*
@@ -158,16 +73,15 @@
gchar ***values,
GError **error)
{
- TrackerMetadataPriv *priv;
- TrackerDBResultSet *result_set;
- guint request_id;
- DBConnection *db_con;
- gchar *service_result;
- gchar *service_id;
- guint i;
- GString *sql;
- GString *sql_join;
- gchar *query;
+ TrackerDBInterface *iface;
+ TrackerDBResultSet *result_set;
+ guint request_id;
+ gchar *service_result;
+ gchar *service_id;
+ guint i;
+ GString *sql;
+ GString *sql_join;
+ gchar *query;
request_id = tracker_dbus_get_next_request_id ();
@@ -176,10 +90,6 @@
tracker_dbus_return_val_if_fail (g_strv_length (keys) > 0, FALSE, error);
tracker_dbus_return_val_if_fail (values != NULL, FALSE, error);
- priv = GET_PRIV (object);
-
- db_con = priv->db_con;
-
if (!tracker_ontology_is_valid_service_type (service)) {
tracker_dbus_request_failed (request_id,
error,
@@ -193,10 +103,9 @@
"service:'%s'",
service);
- /* Check we have the right database connection */
- db_con = tracker_db_get_service_connection (db_con, service);
+ iface = tracker_db_manager_get_db_interface_by_service (service, FALSE);
- service_id = tracker_db_get_id (db_con, service, id);
+ service_id = tracker_db_file_get_id_as_string (iface, service, id);
if (!service_id) {
tracker_dbus_request_failed (request_id,
error,
@@ -205,7 +114,7 @@
return FALSE;
}
- service_result = tracker_db_get_service_for_entity (db_con, service_id);
+ service_result = tracker_db_service_get_by_entity (iface, service_id);
if (!service_result) {
g_free (service_id);
tracker_dbus_request_failed (request_id,
@@ -222,7 +131,7 @@
for (i = 0; i < g_strv_length (keys); i++) {
TrackerFieldData *field_data;
- field_data = tracker_db_get_metadata_field (db_con,
+ field_data = tracker_db_get_metadata_field (iface,
service_result,
keys[i],
i,
@@ -275,7 +184,7 @@
g_debug (query);
- result_set = tracker_db_interface_execute_query (db_con->db, NULL, query);
+ result_set = tracker_db_interface_execute_query (iface, NULL, query);
*values = tracker_dbus_query_result_to_strv (result_set, NULL);
g_free (query);
@@ -303,11 +212,10 @@
gchar **values,
GError **error)
{
- TrackerMetadataPriv *priv;
- guint request_id;
- DBConnection *db_con;
- gchar *service_id;
- guint i;
+ TrackerDBInterface *iface;
+ guint request_id;
+ gchar *service_id;
+ guint i;
request_id = tracker_dbus_get_next_request_id ();
@@ -318,10 +226,6 @@
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);
- priv = GET_PRIV (object);
-
- db_con = priv->db_con;
-
tracker_dbus_request_new (request_id,
"DBus request to set metadata keys, "
"service:'%s'",
@@ -335,10 +239,9 @@
return FALSE;
}
- /* Check we have the right database connection */
- db_con = tracker_db_get_service_connection (db_con, service);
+ iface = tracker_db_manager_get_db_interface_by_service (service, FALSE);
- service_id = tracker_db_get_id (db_con, service, id);
+ service_id = tracker_db_file_get_id_as_string (iface, service, id);
if (!service_id) {
tracker_dbus_request_failed (request_id,
error,
@@ -364,13 +267,12 @@
return FALSE;
}
- tracker_db_set_single_metadata (db_con,
+ tracker_db_metadata_set_single (iface,
service,
service_id,
key,
value,
TRUE);
- tracker_notify_file_data_available ();
}
g_free (service_id);
@@ -388,19 +290,15 @@
const gchar *type,
GError **error)
{
- TrackerMetadataPriv *priv;
- guint request_id;
- DBConnection *db_con;
- const gchar *type_id;
+ TrackerDBInterface *iface;
+ TrackerDBResultSet *result_set;
+ guint request_id;
+ const gchar *type_id;
request_id = tracker_dbus_get_next_request_id ();
tracker_dbus_return_val_if_fail (metadata != NULL, FALSE, error);
tracker_dbus_return_val_if_fail (type != NULL, FALSE, error);
-
- priv = GET_PRIV (object);
-
- db_con = priv->db_con;
tracker_dbus_request_new (request_id,
"DBus request to register metadata type, "
@@ -434,14 +332,19 @@
return FALSE;
}
- /* FIXME: Check return value? */
- tracker_exec_proc (db_con,
- "InsertMetadataType",
- 4,
- metadata,
- type_id,
- "0",
- "1");
+ iface = tracker_db_manager_get_db_interface (TRACKER_DB_FILE_METADATA);
+
+ result_set = tracker_db_exec_proc (iface,
+ "InsertMetadataType",
+ 4,
+ metadata,
+ type_id,
+ "0",
+ "1");
+
+ if (result_set) {
+ g_object_unref (result_set);
+ }
tracker_dbus_request_success (request_id);
@@ -456,11 +359,10 @@
gboolean *is_writable,
GError **error)
{
- TrackerMetadataPriv *priv;
- TrackerDBResultSet *result_set;
- guint request_id;
- DBConnection *db_con;
- gint i;
+ TrackerDBInterface *iface;
+ TrackerDBResultSet *result_set;
+ guint request_id;
+ gint i;
request_id = tracker_dbus_get_next_request_id ();
@@ -469,16 +371,17 @@
tracker_dbus_return_val_if_fail (is_embedded != NULL, FALSE, error);
tracker_dbus_return_val_if_fail (is_writable != NULL, FALSE, error);
- priv = GET_PRIV (object);
-
- db_con = priv->db_con;
+ iface = tracker_db_manager_get_db_interface (TRACKER_DB_FILE_METADATA);
tracker_dbus_request_new (request_id,
"DBus request to get metadata details, "
"name:'%s'",
metadata);
- result_set = tracker_exec_proc (db_con, "GetMetadataTypeInfo", metadata, NULL);
+ result_set = tracker_db_exec_proc (iface,
+ "GetMetadataTypeInfo",
+ metadata,
+ NULL);
if (!result_set) {
tracker_dbus_request_failed (request_id,
@@ -508,26 +411,23 @@
gchar ***values,
GError **error)
{
- TrackerMetadataPriv *priv;
- TrackerDBResultSet *result_set;
- guint request_id;
- DBConnection *db_con;
+ TrackerDBInterface *iface;
+ TrackerDBResultSet *result_set;
+ guint request_id;
request_id = tracker_dbus_get_next_request_id ();
tracker_dbus_return_val_if_fail (class != NULL, FALSE, error);
tracker_dbus_return_val_if_fail (values != NULL, FALSE, error);
- priv = GET_PRIV (object);
-
- db_con = priv->db_con;
-
tracker_dbus_request_new (request_id,
"DBus request to get registered metadata types, "
"class:'%s'",
class);
- result_set = tracker_db_get_metadata_types (db_con, class, TRUE);
+ iface = tracker_db_manager_get_db_interface (TRACKER_DB_FILE_METADATA);
+
+ result_set = tracker_db_metadata_get_types (iface, class, TRUE);
if (result_set) {
*values = tracker_dbus_query_result_to_strv (result_set, NULL);
g_object_unref (result_set);
@@ -544,28 +444,25 @@
gchar ***values,
GError **error)
{
- TrackerMetadataPriv *priv;
- TrackerDBResultSet *result_set;
- guint request_id;
- DBConnection *db_con;
- gchar *class_formatted;
+ TrackerDBInterface *iface;
+ TrackerDBResultSet *result_set;
+ guint request_id;
+ gchar *class_formatted;
request_id = tracker_dbus_get_next_request_id ();
tracker_dbus_return_val_if_fail (class != NULL, FALSE, error);
tracker_dbus_return_val_if_fail (values != NULL, FALSE, error);
- priv = GET_PRIV (object);
-
- db_con = priv->db_con;
-
tracker_dbus_request_new (request_id,
"DBus request to get writable metadata types, "
"class:'%s'",
class);
+ iface = tracker_db_manager_get_db_interface (TRACKER_DB_FILE_METADATA);
+
class_formatted = g_strconcat (class, ".*", NULL);
- result_set = tracker_db_get_metadata_types (db_con,
+ result_set = tracker_db_metadata_get_types (iface,
class_formatted,
TRUE);
if (result_set) {
@@ -585,25 +482,22 @@
gchar ***values,
GError **error)
{
- TrackerMetadataPriv *priv;
- TrackerDBResultSet *result_set;
- guint request_id;
- DBConnection *db_con;
+ TrackerDBInterface *iface;
+ TrackerDBResultSet *result_set;
+ guint request_id;
request_id = tracker_dbus_get_next_request_id ();
tracker_dbus_return_val_if_fail (values != NULL, FALSE, error);
- priv = GET_PRIV (object);
-
- db_con = priv->db_con;
-
tracker_dbus_request_new (request_id,
"DBus request to get registered classes");
- result_set = tracker_exec_proc (db_con,
- "SelectMetadataClasses",
- NULL);
+ iface = tracker_db_manager_get_db_interface (TRACKER_DB_FILE_METADATA);
+
+ result_set = tracker_db_exec_proc (iface,
+ "SelectMetadataClasses",
+ NULL);
if (result_set) {
*values = tracker_dbus_query_result_to_strv (result_set, NULL);
Modified: branches/xesam-support/src/trackerd/tracker-metadata.h
==============================================================================
--- branches/xesam-support/src/trackerd/tracker-metadata.h (original)
+++ branches/xesam-support/src/trackerd/tracker-metadata.h Mon Jun 9 15:41:07 2008
@@ -24,7 +24,6 @@
#include <glib-object.h>
-#include "tracker-db-sqlite.h"
#include "tracker-indexer.h"
#define TRACKER_METADATA_SERVICE "org.freedesktop.Tracker"
@@ -52,9 +51,7 @@
};
GType tracker_metadata_get_type (void);
-TrackerMetadata *tracker_metadata_new (DBConnection *db_con);
-void tracker_metadata_set_db_connection (TrackerMetadata *object,
- DBConnection *db_con);
+TrackerMetadata *tracker_metadata_new (void);
gboolean tracker_metadata_get (TrackerMetadata *object,
const gchar *service,
const gchar *id,
Modified: branches/xesam-support/src/trackerd/tracker-process-files.c
==============================================================================
--- branches/xesam-support/src/trackerd/tracker-process-files.c (original)
+++ branches/xesam-support/src/trackerd/tracker-process-files.c Mon Jun 9 15:41:07 2008
@@ -39,6 +39,8 @@
#include <libtracker-common/tracker-type-utils.h>
#include <libtracker-common/tracker-utils.h>
+#include <libtracker-db/tracker-db-manager.h>
+
#include "../xdgmime/xdgmime.h"
#include "tracker-db.h"
@@ -53,7 +55,7 @@
static TrackerHal *hal;
static TrackerConfig *config;
-static DBConnection *db_con;
+/* static TrackerDBInterface *db_con; */
static GAsyncQueue *dir_queue;
static GAsyncQueue *file_metadata_queue;
@@ -196,8 +198,8 @@
}
static void
-process_watch_directories (GSList *dirs,
- DBConnection *db_con)
+process_watch_directories (GSList *dirs,
+ TrackerDBInterface *iface)
{
GSList *list;
@@ -249,7 +251,7 @@
continue;
}
- if (!tracker_watcher_add_dir (dir, db_con)) {
+ if (!tracker_watcher_add_dir (dir, iface)) {
g_warning ("Watch failed for:'%s'", dir);
}
}
@@ -270,35 +272,35 @@
static void
process_schedule_directory_check_foreach (const gchar *uri,
- DBConnection *db_con)
+ TrackerDBInterface *iface)
{
- /* tracker_db_insert_pending_file (db_con, 0, uri, NULL, "unknown", 0, */
+ /* tracker_db_insert_pending_file (iface_cache, 0, uri, NULL, "unknown", 0, */
/* TRACKER_DB_ACTION_DIRECTORY_REFRESH, */
/* TRUE, FALSE, -1); */
}
static void
process_schedule_file_check_foreach (const gchar *uri,
- DBConnection *db_con)
+ TrackerDBInterface *iface)
{
g_return_if_fail (uri != NULL);
- g_return_if_fail (db_con != NULL);
+ g_return_if_fail (iface != NULL);
/* Keep mainloop responsive */
process_my_yield ();
if (!tracker_file_is_directory (uri)) {
- /* tracker_db_insert_pending_file (db_con, 0, uri, NULL, "unknown", 0, */
+ /* tracker_db_insert_pending_file (iface_cache, 0, uri, NULL, "unknown", 0, */
/* TRACKER_DB_ACTION_CHECK, 0, FALSE, -1); */
} else {
- process_schedule_directory_check_foreach (uri, db_con);
+ process_schedule_directory_check_foreach (uri, iface);
}
}
static inline void
process_directory_list (GSList *list,
gboolean recurse,
- DBConnection *db_con)
+ TrackerDBInterface *iface)
{
crawl_directories = NULL;
@@ -306,16 +308,16 @@
return;
}
- process_watch_directories (list, db_con);
+ process_watch_directories (list, iface);
g_slist_foreach (list,
(GFunc) process_schedule_directory_check_foreach,
- db_con);
+ iface);
if (recurse && crawl_directories) {
g_slist_foreach (crawl_directories,
(GFunc) process_schedule_directory_check_foreach,
- db_con);
+ iface);
}
if (crawl_directories) {
@@ -327,11 +329,11 @@
static void
process_scan_directory (const gchar *uri,
- DBConnection *db_con)
+ TrackerDBInterface *iface)
{
GSList *files;
- g_return_if_fail (db_con != NULL);
+ g_return_if_fail (iface != NULL);
g_return_if_fail (uri != NULL);
g_return_if_fail (tracker_file_is_directory (uri));
@@ -344,7 +346,7 @@
g_slist_foreach (files,
(GFunc) process_schedule_file_check_foreach,
- db_con);
+ iface);
g_slist_foreach (files,
(GFunc) g_free,
@@ -354,14 +356,14 @@
/* Recheck directory to update its mtime if its changed whilst
* scanning.
*/
- process_schedule_directory_check_foreach (uri, db_con);
+ process_schedule_directory_check_foreach (uri, iface);
g_message ("Finished scanning");
}
static void
process_index_delete_file (TrackerDBFileInfo *info,
- DBConnection *db_con)
+ TrackerDBInterface *iface)
{
/* Info struct may have been deleted in transit here so check
* if still valid and intact.
@@ -375,14 +377,14 @@
return;
}
- tracker_db_delete_file (db_con, info->file_id);
+ tracker_db_file_delete (iface, info->file_id);
g_message ("Deleting file:'%s'", info->uri);
}
static void
process_index_delete_directory (TrackerDBFileInfo *info,
- DBConnection *db_con)
+ TrackerDBInterface *iface)
{
/* Info struct may have been deleted in transit here so check
* if still valid and intact.
@@ -396,22 +398,22 @@
return;
}
- tracker_db_delete_directory (db_con, info->file_id, info->uri);
+ tracker_db_directory_delete (iface, info->file_id, info->uri);
- tracker_watcher_remove_dir (info->uri, TRUE, db_con);
+ tracker_watcher_remove_dir (info->uri, TRUE, iface);
g_message ("Deleting directory:'%s' and subdirs", info->uri);
}
static void
process_index_delete_directory_check (const gchar *uri,
- DBConnection *db_con)
+ TrackerDBInterface *iface)
{
gchar **files;
gchar **p;
/* Check for any deletions*/
- files = tracker_db_get_files_in_folder (db_con, uri);
+ files = tracker_db_files_get (iface, uri);
if (!files) {
return;
@@ -424,12 +426,12 @@
TrackerDBFileInfo *info;
info = tracker_db_file_info_new (str, 1, 0, 0);
- info = tracker_db_get_file_info (db_con, info);
+ info = tracker_db_file_get_info (iface, info);
if (!info->is_directory) {
- process_index_delete_file (info, db_con);
+ process_index_delete_file (info, iface);
} else {
- process_index_delete_directory (info, db_con);
+ process_index_delete_directory (info, iface);
}
tracker_db_file_info_free (info);
}
@@ -590,9 +592,10 @@
}
static void
-process_index_crawl_files (DBConnection *db_con)
+process_index_crawl_files (TrackerDBInterface *iface)
{
- GSList *crawl_directory_roots;
+ TrackerDBInterface *iface_cache;
+ GSList *crawl_directory_roots;
g_message ("Starting directory crawling...");
@@ -604,13 +607,14 @@
return;
}
- tracker_db_interface_start_transaction (db_con->cache->db);
+ iface_cache = tracker_db_manager_get_db_interface (TRACKER_DB_CACHE);
+ tracker_db_interface_start_transaction (iface_cache);
process_index_crawl_add_directories (crawl_directory_roots);
g_slist_foreach (crawl_directories,
(GFunc) process_schedule_directory_check_foreach,
- db_con);
+ iface);
if (crawl_directories) {
g_slist_foreach (crawl_directories, (GFunc) g_free, NULL);
@@ -620,7 +624,7 @@
g_slist_foreach (crawl_directory_roots,
(GFunc) process_schedule_directory_check_foreach,
- db_con);
+ iface);
if (crawl_directories) {
g_slist_foreach (crawl_directories, (GFunc) g_free, NULL);
@@ -628,12 +632,12 @@
crawl_directories = NULL;
}
- tracker_db_interface_end_transaction (db_con->cache->db);
+ tracker_db_interface_end_transaction (iface_cache);
}
static gboolean
process_action (TrackerDBFileInfo *info,
- DBConnection *db_con)
+ TrackerDBInterface *iface)
{
gboolean need_index;
@@ -654,7 +658,7 @@
g_message ("Starting moving file:'%s' to:'%s'",
info->uri,
info->moved_to_uri);
- tracker_db_move_file (db_con, info->uri, info->moved_to_uri);
+ tracker_db_file_move (iface, info->uri, info->moved_to_uri);
break;
case TRACKER_DB_ACTION_DIRECTORY_REFRESH:
@@ -672,14 +676,14 @@
g_async_queue_push (dir_queue, g_strdup (info->uri));
if (info->indextime > 0) {
- process_index_delete_directory_check (info->uri, db_con);
+ process_index_delete_directory_check (info->uri, iface);
}
}
break;
case TRACKER_DB_ACTION_DIRECTORY_MOVED_FROM:
- tracker_db_move_directory (db_con, info->uri, info->moved_to_uri);
+ tracker_db_directory_move (iface, info->uri, info->moved_to_uri);
need_index = FALSE;
break;
@@ -698,8 +702,8 @@
*/
list = g_slist_prepend (NULL, info->uri);
- process_watch_directories (list, db_con);
- process_scan_directory (info->uri, db_con);
+ process_watch_directories (list, iface);
+ process_scan_directory (info->uri, iface);
g_slist_free (list);
} else {
@@ -721,25 +725,25 @@
static void
process_mount_point_added_cb (TrackerHal *hal,
const gchar *mount_point,
- DBConnection *db_con)
+ TrackerDBInterface *iface)
{
GSList *list;
g_message ("** TRAWLING THROUGH NEW MOUNT POINT:'%s'", mount_point);
list = g_slist_prepend (NULL, (gchar*) mount_point);
- process_directory_list (list, TRUE, db_con);
+ process_directory_list (list, TRUE, iface);
g_slist_free (list);
}
static void
process_mount_point_removed_cb (TrackerHal *hal,
const gchar *mount_point,
- DBConnection *db_con)
+ TrackerDBInterface *iface)
{
g_message ("** CLEANING UP OLD MOUNT POINT:'%s'", mount_point);
- process_index_delete_directory_check (mount_point, db_con);
+ process_index_delete_directory_check (mount_point, iface);
}
#endif /* HAVE_HAL */
@@ -771,7 +775,7 @@
hal = g_object_ref (tracker->hal);
config = g_object_ref (tracker->config);
- db_con = tracker_db_connect_all ();
+ /* iface = tracker_ifacenect_all (); */
dir_queue = g_async_queue_new ();
file_metadata_queue = g_async_queue_new ();
@@ -843,14 +847,15 @@
}
/* Check if file needs indexing */
- need_index = process_action (info, db_con);
+ need_index = process_action (info,
+ tracker_db_manager_get_db_interface (TRACKER_DB_FILE_METADATA));
/* FIXME: Finish, maybe call the indexer with the new file */
if (0) {
GSList *foo, *bar;
process_check_directory(NULL);
process_index_get_roots(&foo, &bar);
- process_index_crawl_files(db_con);
+ process_index_crawl_files(tracker_db_manager_get_db_interface (TRACKER_DB_FILE_METADATA));
}
@@ -882,8 +887,8 @@
dir_queue = NULL;
}
- tracker_db_close_all (db_con);
- db_con = NULL;
+ /* tracker_db_close_all (iface); */
+ /* iface = NULL; */
if (config) {
g_object_unref (config);
Modified: branches/xesam-support/src/trackerd/tracker-rdf-query.c
==============================================================================
--- branches/xesam-support/src/trackerd/tracker-rdf-query.c (original)
+++ branches/xesam-support/src/trackerd/tracker-rdf-query.c Mon Jun 9 15:41:07 2008
@@ -21,32 +21,33 @@
#include <libtracker-common/tracker-field-data.h>
#include <libtracker-common/tracker-log.h>
+#include <libtracker-common/tracker-ontology.h>
#include <libtracker-common/tracker-type-utils.h>
#include <libtracker-common/tracker-utils.h>
#include "tracker-rdf-query.h"
+#include "tracker-db.h"
/* RDF Query Condition
-<rdfq:Condition>
- <rdfq:and>
- <rdfq:greaterThan>
- <rdfq:Property name="File:Size" />
- <rdf:Integer>1000000</rdf:Integer>
- </rdfq:greaterThan>
- <rdfq:equals>
- <rdfq:Property name="File:Path" />
- <rdf:String>/home/jamie</rdf:String>
- </rdfq:equals>
- </rdfq:and>
-</rdfq:Condition>
-*/
+ * <rdfq:Condition>
+ * <rdfq:and>
+ * <rdfq:greaterThan>
+ * <rdfq:Property name="File:Size" />
+ * <rdf:Integer>1000000</rdf:Integer>
+ * </rdfq:greaterThan>
+ * <rdfq:equals>
+ * <rdfq:Property name="File:Path" />
+ * <rdf:String>/home/jamie</rdf:String>
+ * </rdfq:equals>
+ * </rdfq:and>
+ * </rdfq:Condition>
+ */
-
-/* main elements */
+/* Main elements */
#define ELEMENT_RDF_CONDITION "rdfq:Condition"
#define ELEMENT_RDF_PROPERTY "rdfq:Property"
-/* operators */
+/* Operators */
#define ELEMENT_RDF_AND "rdfq:and"
#define ELEMENT_RDF_OR "rdfq:or"
#define ELEMENT_RDF_NOT "rdfq:not"
@@ -56,27 +57,40 @@
#define ELEMENT_RDF_LESS_THAN "rdfq:lessThan"
#define ELEMENT_RDF_LESS_OR_EQUAL "rdfq:lessOrEqual"
-/* extension operators - "contains" does a substring or full text match, "in_Set" does string in list match */
+/* Extension operators - "contains" does a substring or full text
+ * match, "in_Set" does string in list match
+ */
#define ELEMENT_RDF_CONTAINS "rdfq:contains"
#define ELEMENT_RDF_REGEX "rdfq:regex"
#define ELEMENT_RDF_STARTS_WITH "rdfq:startsWith"
#define ELEMENT_RDF_IN_SET "rdfq:inSet"
-/* types */
+/* Types */
#define ELEMENT_RDF_INTEGER "rdf:Integer"
-#define ELEMENT_RDF_DATE "rdf:Date" /* format can be iso 8601 with optional timezone "yyyy-mm-ddThh:mm:ss" or "yyyy-mm-ddThh:mm:ss+hh:mm" - most other formats are supported too */
+#define ELEMENT_RDF_DATE "rdf:Date" /* Format can
+ * be iso 8601
+ * with
+ * optional
+ * timezone
+ * "yyyy-mm-ddThh:mm:ss"
+ * or
+ * "yyyy-mm-ddThh:mm:ss+hh:mm"
+ * - most
+ * other
+ * formats are
+ * supported
+ * too
+ */
#define ELEMENT_RDF_STRING "rdf:String"
#define ELEMENT_RDF_FLOAT "rdf:Float"
#define ELEMENT_IS(name) (strcmp (element_name, (name)) == 0)
-
enum {
NO_ERROR,
PARSE_ERROR,
};
-
typedef enum {
STATE_START,
STATE_CONDITION,
@@ -116,7 +130,6 @@
STATE_END_DATE
} ParseState;
-
typedef enum {
OP_NONE,
OP_EQUALS,
@@ -130,105 +143,110 @@
OP_STARTS
} Operators;
-
typedef enum {
LOP_NONE,
LOP_AND,
LOP_OR
} LogicOperators;
-
-
typedef struct {
- GMarkupParseContext *context;
- GMarkupParser *parser;
- GSList *stack;
- GSList *fields;
- gboolean query_okay;
- int statement_count;
- LogicOperators current_logic_operator;
- Operators current_operator;
- char *current_field;
- char *current_value;
- DBConnection *db_con;
- GString *sql_select;
- GString *sql_from;
- GString *sql_where;
- GString *sql_order;
- char *service;
+ GMarkupParseContext *context;
+ GMarkupParser *parser;
+ GSList *stack;
+ GSList *fields;
+ gboolean query_okay;
+ gint statement_count;
+ LogicOperators current_logic_operator;
+ Operators current_operator;
+ gchar *current_field;
+ gchar *current_value;
+ TrackerDBInterface *iface;
+ GString *sql_select;
+ GString *sql_from;
+ GString *sql_where;
+ GString *sql_order;
+ gchar *service;
} ParserData;
-
static GQuark error_quark;
-
-static void start_element_handler (GMarkupParseContext *context,
- const gchar *element_name,
- const gchar **attribute_names,
- const gchar **attribute_values,
- gpointer user_data,
- GError **error);
-
-static void end_element_handler (GMarkupParseContext *context,
- const gchar *element_name,
- gpointer user_data,
- GError **error);
-
-static void text_handler (GMarkupParseContext *context,
- const gchar *text,
- gsize text_len,
- gpointer user_data,
- GError **error);
-
-static void error_handler (GMarkupParseContext *context,
- GError *error,
- gpointer user_data);
-
+static void start_element_handler (GMarkupParseContext *context,
+ const gchar *element_name,
+ const gchar **attribute_names,
+ const gchar **attribute_values,
+ gpointer user_data,
+ GError **error);
+static void end_element_handler (GMarkupParseContext *context,
+ const gchar *element_name,
+ gpointer user_data,
+ GError **error);
+static void text_handler (GMarkupParseContext *context,
+ const gchar *text,
+ gsize text_len,
+ gpointer user_data,
+ GError **error);
+static void error_handler (GMarkupParseContext *context,
+ GError *error,
+ gpointer user_data);
static gboolean
is_operator (ParseState state)
{
- return state == STATE_EQUALS || state == STATE_GREATER_THAN || state == STATE_LESS_THAN ||
- state == STATE_CONTAINS || state == STATE_IN_SET || STATE_LESS_OR_EQUAL ||
- STATE_GREATER_OR_EQUAL || state == STATE_STARTS_WITH || state == STATE_REGEX;
-
+ return
+ state == STATE_EQUALS ||
+ state == STATE_GREATER_THAN ||
+ state == STATE_LESS_THAN ||
+ state == STATE_CONTAINS ||
+ state == STATE_IN_SET ||
+ state == STATE_LESS_OR_EQUAL ||
+ state == STATE_GREATER_OR_EQUAL ||
+ state == STATE_STARTS_WITH ||
+ state == STATE_REGEX;
}
-
static gboolean
is_end_operator (ParseState state)
{
- return state == STATE_END_EQUALS || state == STATE_END_GREATER_THAN || state == STATE_END_LESS_THAN ||
- state == STATE_END_CONTAINS || state == STATE_END_IN_SET || STATE_END_LESS_OR_EQUAL ||
- STATE_END_GREATER_OR_EQUAL || state == STATE_END_STARTS_WITH || state == STATE_REGEX;
-
+ return
+ state == STATE_END_EQUALS ||
+ state == STATE_END_GREATER_THAN ||
+ state == STATE_END_LESS_THAN ||
+ state == STATE_END_CONTAINS ||
+ state == STATE_END_IN_SET ||
+ state == STATE_END_LESS_OR_EQUAL ||
+ state == STATE_END_GREATER_OR_EQUAL ||
+ state == STATE_END_STARTS_WITH ||
+ state == STATE_REGEX;
}
-
static gboolean
is_logic (ParseState state)
{
- return state == STATE_AND || state == STATE_OR || state == STATE_NOT;
+ return
+ state == STATE_AND ||
+ state == STATE_OR ||
+ state == STATE_NOT;
}
-
static gboolean
is_end_logic (ParseState state)
{
- return state == STATE_END_AND || state == STATE_END_NOT || state == STATE_END_OR;
+ return
+ state == STATE_END_AND ||
+ state == STATE_END_NOT ||
+ state == STATE_END_OR;
}
-
static void
set_error (GError **err,
GMarkupParseContext *context,
- int error_code,
- const char *format,
+ gint error_code,
+ const gchar *format,
...)
{
- int line, ch;
- va_list args;
- char *str;
+ gint line, ch;
+ va_list args;
+ gchar *str;
g_markup_parse_context_get_position (context, &line, &ch);
@@ -236,14 +254,20 @@
str = g_strdup_vprintf (format, args);
va_end (args);
- g_set_error (err, error_quark, error_code, "Line %d character %d: %s", line, ch, str);
+ g_set_error (err,
+ error_quark,
+ error_code,
+ "Line %d character %d: %s",
+ line, ch, str);
g_free (str);
}
-
static gboolean
-set_error_on_fail (gboolean condition, GMarkupParseContext *context, const char *msg, GError **err)
+set_error_on_fail (gboolean condition,
+ GMarkupParseContext *context,
+ const gchar *msg,
+ GError **err)
{
if (!condition) {
set_error (err, context, 1, msg);
@@ -253,13 +277,12 @@
return FALSE;
}
-
-static const char *
-get_attribute_value (const char *name,
- const char **names,
- const char **values)
+static const gchar *
+get_attribute_value (const gchar *name,
+ const gchar **names,
+ const gchar **values)
{
- int i;
+ gint i;
i = 0;
@@ -273,21 +296,22 @@
return NULL;
}
-
-static const char *
-get_attribute_value_required (GMarkupParseContext *context,
- const char *tag,
- const char *name,
- const char **names,
- const char **values,
+static const gchar *
+get_attribute_value_required (GMarkupParseContext *context,
+ const gchar *tag,
+ const gchar *name,
+ const gchar **names,
+ const gchar **values,
GError **error)
{
- const char *value;
+ const gchar *value;
value = get_attribute_value (name, names, values);
if (!value) {
- set_error (error, context, PARSE_ERROR,
+ set_error (error,
+ context,
+ PARSE_ERROR,
"%s must have \"%s\" attribute",
tag, name);
}
@@ -295,14 +319,12 @@
return value;
}
-
static void
-push_stack (ParserData *data, ParseState state)
+push_stack (ParserData *data, ParseState state)
{
data->stack = g_slist_prepend (data->stack, GINT_TO_POINTER (state));
}
-
static void
pop_stack (ParserData *data)
{
@@ -311,7 +333,6 @@
data->stack = g_slist_remove (data->stack, data->stack->data);
}
-
static ParseState
peek_state (ParserData *data)
{
@@ -320,7 +341,6 @@
return GPOINTER_TO_INT (data->stack->data);
}
-
static void
pop_stack_until (ParserData *data, ParseState state)
{
@@ -335,8 +355,6 @@
}
}
-
-
static TrackerFieldData *
add_metadata_field (ParserData *data,
const gchar *field_name,
@@ -379,9 +397,8 @@
}
}
-
if (!field_exists) {
- field_data = tracker_db_get_metadata_field (data->db_con,
+ field_data = tracker_db_get_metadata_field (data->iface,
data->service,
field_name,
g_slist_length (data->fields),
@@ -399,13 +416,12 @@
return field_data;
}
-
static void
-start_element_handler (GMarkupParseContext *context,
- const gchar *element_name,
+start_element_handler (GMarkupParseContext *context,
+ const gchar *element_name,
const gchar **attribute_names,
const gchar **attribute_values,
- gpointer user_data,
+ gpointer user_data,
GError **error)
{
ParserData *data;
@@ -415,8 +431,10 @@
state = peek_state (data);
if (ELEMENT_IS (ELEMENT_RDF_CONDITION)) {
-
- if (set_error_on_fail ((state == STATE_START), context, "Condition element not expected here", error)) {
+ if (set_error_on_fail (state == STATE_START,
+ context,
+ "Condition element not expected here",
+ error)) {
return;
}
@@ -425,41 +443,53 @@
} else if (ELEMENT_IS (ELEMENT_RDF_PROPERTY)) {
const char *name;
- if (set_error_on_fail ( is_operator (state), context, "Property element not expected here", error)) {
+ if (set_error_on_fail (is_operator (state),
+ context,
+ "Property element not expected here",
+ error)) {
return;
}
- name = get_attribute_value_required (context, "<rdfq:Property>", "name",
+ name = get_attribute_value_required (context,
+ "<rdfq:Property>", "name",
attribute_names, attribute_values,
error);
if (!name) {
return;
} else {
-
- if (data->current_operator == OP_NONE ) {
- set_error (error, context, PARSE_ERROR, "no operator found for Property \"%s\"", name);
+ if (data->current_operator == OP_NONE) {
+ set_error (error,
+ context,
+ PARSE_ERROR,
+ "no operator found for Property \"%s\"",
+ name);
return;
}
- data->current_field = g_strdup (name);
+ data->current_field = g_strdup (name);
push_stack (data, STATE_PROPERTY);
}
-
} else if (ELEMENT_IS (ELEMENT_RDF_AND)) {
-
- if (set_error_on_fail ((state == STATE_CONDITION || is_logic (state) || is_end_logic (state) || is_end_operator (state)),
- context, "AND element not expected here", error)) {
+ if (set_error_on_fail (state == STATE_CONDITION ||
+ is_logic (state) ||
+ is_end_logic (state) ||
+ is_end_operator (state),
+ context,
+ "AND element not expected here",
+ error)) {
return;
}
if (data->statement_count > 1) {
if (data->current_logic_operator == LOP_AND) {
- data->sql_where = g_string_append (data->sql_where, " AND ");
+ data->sql_where = g_string_append (data->sql_where,
+ " AND ");
} else {
if (data->current_logic_operator == LOP_OR) {
- data->sql_where = g_string_append (data->sql_where, " OR ");
+ data->sql_where = g_string_append (data->sql_where,
+ " OR ");
}
}
}
@@ -468,20 +498,25 @@
data->sql_where = g_string_append (data->sql_where, " ( ");
data->current_logic_operator = LOP_AND;
push_stack (data, STATE_AND);
-
} else if (ELEMENT_IS (ELEMENT_RDF_OR)) {
-
- if (set_error_on_fail ((state == STATE_CONDITION || is_logic (state) || is_end_logic (state) || is_end_operator (state)),
- context, "OR element not expected here", error)) {
+ if (set_error_on_fail (state == STATE_CONDITION ||
+ is_logic (state) ||
+ is_end_logic (state) ||
+ is_end_operator (state),
+ context,
+ "OR element not expected here",
+ error)) {
return;
}
if (data->statement_count > 1) {
if (data->current_logic_operator == LOP_AND) {
- data->sql_where = g_string_append (data->sql_where, " AND ");
+ data->sql_where = g_string_append (data->sql_where,
+ " AND ");
} else {
if (data->current_logic_operator == LOP_OR) {
- data->sql_where = g_string_append (data->sql_where, " OR ");
+ data->sql_where = g_string_append (data->sql_where,
+ " OR ");
}
}
}
@@ -492,18 +527,24 @@
push_stack (data, STATE_OR);
} else if (ELEMENT_IS (ELEMENT_RDF_NOT)) {
-
- if (set_error_on_fail ((state == STATE_CONDITION || is_logic (state) || is_end_logic (state) || is_end_operator (state)),
- context, "NOT element not expected here", error)) {
+ if (set_error_on_fail (state == STATE_CONDITION ||
+ is_logic (state) ||
+ is_end_logic (state) ||
+ is_end_operator (state),
+ context,
+ "NOT element not expected here",
+ error)) {
return;
}
if (data->statement_count > 1) {
if (data->current_logic_operator == LOP_AND) {
- data->sql_where = g_string_append (data->sql_where, " AND ");
+ data->sql_where = g_string_append (data->sql_where,
+ " AND ");
} else {
if (data->current_logic_operator == LOP_OR) {
- data->sql_where = g_string_append (data->sql_where, " OR ");
+ data->sql_where = g_string_append (data->sql_where,
+ " OR ");
}
}
}
@@ -511,11 +552,14 @@
push_stack (data, STATE_NOT);
} else if (ELEMENT_IS (ELEMENT_RDF_EQUALS)) {
-
- if (set_error_on_fail ( state == STATE_CONDITION || is_logic (state) ||
- ((data->current_logic_operator == LOP_AND || data->current_logic_operator == LOP_OR)
- && is_end_operator (state)),
- context, "EQUALS element not expected here", error)) {
+ if (set_error_on_fail (state == STATE_CONDITION ||
+ is_logic (state) ||
+ ((data->current_logic_operator == LOP_AND ||
+ data->current_logic_operator == LOP_OR) &&
+ is_end_operator (state)),
+ context,
+ "EQUALS element not expected here",
+ error)) {
return;
}
@@ -524,130 +568,149 @@
} else if (ELEMENT_IS (ELEMENT_RDF_GREATER_THAN)) {
- if (set_error_on_fail ( state == STATE_CONDITION || is_logic (state) ||
- ((data->current_logic_operator == LOP_AND || data->current_logic_operator == LOP_OR)
- && is_end_operator (state)),
- context, "GREATERTHAN element not expected here", error)) {
+ if (set_error_on_fail (state == STATE_CONDITION ||
+ is_logic (state) ||
+ ((data->current_logic_operator == LOP_AND ||
+ data->current_logic_operator == LOP_OR) &&
+ is_end_operator (state)),
+ context,
+ "GREATERTHAN element not expected here",
+ error)) {
return;
}
data->current_operator = OP_GREATER;
push_stack (data, STATE_GREATER_THAN);
-
} else if (ELEMENT_IS (ELEMENT_RDF_GREATER_OR_EQUAL)) {
-
- if (set_error_on_fail ( state == STATE_CONDITION || is_logic (state) ||
- ((data->current_logic_operator == LOP_AND || data->current_logic_operator == LOP_OR)
- && is_end_operator (state)),
- context, "GREATEROREQUAL element not expected here", error)) {
+ if (set_error_on_fail (state == STATE_CONDITION ||
+ is_logic (state) ||
+ ((data->current_logic_operator == LOP_AND ||
+ data->current_logic_operator == LOP_OR) &&
+ is_end_operator (state)),
+ context,
+ "GREATEROREQUAL element not expected here",
+ error)) {
return;
}
data->current_operator = OP_GREATER_EQUAL;
push_stack (data, STATE_GREATER_OR_EQUAL);
-
} else if (ELEMENT_IS (ELEMENT_RDF_LESS_THAN )) {
-
- if (set_error_on_fail ( state == STATE_CONDITION || is_logic (state) ||
- ((data->current_logic_operator == LOP_AND || data->current_logic_operator == LOP_OR)
- && is_end_operator (state)),
- context, "LESSTHAN element not expected here", error)) {
+ if (set_error_on_fail (state == STATE_CONDITION ||
+ is_logic (state) ||
+ ((data->current_logic_operator == LOP_AND ||
+ data->current_logic_operator == LOP_OR) &&
+ is_end_operator (state)),
+ context,
+ "LESSTHAN element not expected here",
+ error)) {
return;
}
data->current_operator = OP_LESS;
push_stack (data, STATE_LESS_THAN);
-
- } else if (ELEMENT_IS (ELEMENT_RDF_LESS_OR_EQUAL )) {
-
- if (set_error_on_fail ( state == STATE_CONDITION || is_logic (state) ||
- ((data->current_logic_operator == LOP_AND || data->current_logic_operator == LOP_OR)
- && is_end_operator (state)),
- context, "LESSOREQUAL element not expected here", error)) {
+ } else if (ELEMENT_IS (ELEMENT_RDF_LESS_OR_EQUAL)) {
+ if (set_error_on_fail (state == STATE_CONDITION ||
+ is_logic (state) ||
+ ((data->current_logic_operator == LOP_AND ||
+ data->current_logic_operator == LOP_OR) &&
+ is_end_operator (state)),
+ context,
+ "LESSOREQUAL element not expected here",
+ error)) {
return;
}
data->current_operator = OP_LESS_EQUAL;
push_stack (data, STATE_LESS_OR_EQUAL);
-
} else if (ELEMENT_IS (ELEMENT_RDF_CONTAINS)) {
-
- if (set_error_on_fail ( state == STATE_CONDITION || is_logic (state) ||
- ((data->current_logic_operator == LOP_AND || data->current_logic_operator == LOP_OR)
- && is_end_operator (state)),
- context, "CONTAINS element not expected here", error)) {
+ if (set_error_on_fail (state == STATE_CONDITION ||
+ is_logic (state) ||
+ ((data->current_logic_operator == LOP_AND ||
+ data->current_logic_operator == LOP_OR) &&
+ is_end_operator (state)),
+ context,
+ "CONTAINS element not expected here",
+ error)) {
return;
}
data->current_operator = OP_CONTAINS;
push_stack (data, STATE_CONTAINS);
-
} else if (ELEMENT_IS (ELEMENT_RDF_REGEX)) {
-
- if (set_error_on_fail ( state == STATE_CONDITION || is_logic (state) ||
- ((data->current_logic_operator == LOP_AND || data->current_logic_operator == LOP_OR)
- && is_end_operator (state)),
- context, "REGEX element not expected here", error)) {
+ if (set_error_on_fail (state == STATE_CONDITION ||
+ is_logic (state) ||
+ ((data->current_logic_operator == LOP_AND ||
+ data->current_logic_operator == LOP_OR) &&
+ is_end_operator (state)),
+ context,
+ "REGEX element not expected here",
+ error)) {
return;
}
data->current_operator = OP_REGEX;
push_stack (data, STATE_REGEX);
-
} else if (ELEMENT_IS (ELEMENT_RDF_STARTS_WITH)) {
-
- if (set_error_on_fail ( state == STATE_CONDITION || is_logic (state) ||
- ((data->current_logic_operator == LOP_AND || data->current_logic_operator == LOP_OR)
- && is_end_operator (state)),
- context, "STARTSWITH element not expected here", error)) {
+ if (set_error_on_fail (state == STATE_CONDITION ||
+ is_logic (state) ||
+ ((data->current_logic_operator == LOP_AND ||
+ data->current_logic_operator == LOP_OR) &&
+ is_end_operator (state)),
+ context,
+ "STARTSWITH element not expected here",
+ error)) {
return;
}
data->current_operator = OP_STARTS;
push_stack (data, STATE_STARTS_WITH);
-
} else if (ELEMENT_IS (ELEMENT_RDF_IN_SET)) {
-
- if (set_error_on_fail ( state == STATE_CONDITION || is_logic (state) ||
- ((data->current_logic_operator == LOP_AND || data->current_logic_operator == LOP_OR)
- && is_end_operator (state)),
- context, "IN SET element not expected here", error)) {
+ if (set_error_on_fail (state == STATE_CONDITION ||
+ is_logic (state) ||
+ ((data->current_logic_operator == LOP_AND ||
+ data->current_logic_operator == LOP_OR) &&
+ is_end_operator (state)),
+ context,
+ "IN SET element not expected here",
+ error)) {
return;
}
data->current_operator = OP_SET;
push_stack (data, STATE_IN_SET);
-
-
} else if (ELEMENT_IS (ELEMENT_RDF_INTEGER)) {
-
- if (set_error_on_fail (state == STATE_PROPERTY, context, "INTEGER element not expected here", error)) {
+ if (set_error_on_fail (state == STATE_PROPERTY,
+ context,
+ "INTEGER element not expected here",
+ error)) {
return;
}
push_stack (data, STATE_INTEGER);
-
-
} else if (ELEMENT_IS (ELEMENT_RDF_DATE)) {
-
- if (set_error_on_fail (state == STATE_PROPERTY, context, "DATE element not expected here", error)) {
+ if (set_error_on_fail (state == STATE_PROPERTY,
+ context,
+ "DATE element not expected here",
+ error)) {
return;
}
push_stack (data, STATE_DATE);
-
-
} else if (ELEMENT_IS (ELEMENT_RDF_STRING)) {
-
- if (set_error_on_fail (state == STATE_PROPERTY, context, "STRING element not expected here", error)) {
+ if (set_error_on_fail (state == STATE_PROPERTY,
+ context,
+ "STRING element not expected here",
+ error)) {
return;
}
push_stack (data, STATE_STRING);
-
} else if (ELEMENT_IS (ELEMENT_RDF_FLOAT)) {
-
- if (set_error_on_fail (state == STATE_PROPERTY, context, "FLOAT element not expected here", error)) {
+ if (set_error_on_fail (state == STATE_PROPERTY,
+ context,
+ "FLOAT element not expected here",
+ error)) {
return;
}
@@ -655,9 +718,8 @@
}
}
-
-static char *
-get_value (const char *value, gboolean quote)
+static gchar *
+get_value (const gchar *value, gboolean quote)
{
if (quote) {
return g_strconcat (" '", value, "' ", NULL);
@@ -666,7 +728,6 @@
}
}
-
static gboolean
build_sql (ParserData *data)
{
@@ -1075,15 +1136,31 @@
}
-
-char *
-tracker_rdf_query_to_sql (DBConnection *db_con, const char *query, const char *service, char **fields, int field_count, const char *search_text, const char *keyword, gboolean sort_by_service, int offset, int limit, GError *error)
-{
- static gboolean inited = FALSE;
- ParserData data;
- char *result;
-
- g_return_val_if_fail (query != NULL, NULL);
+gchar *
+tracker_rdf_query_to_sql (TrackerDBInterface *iface,
+ const gchar *query,
+ const gchar *service,
+ gchar **fields,
+ gint field_count,
+ const gchar *search_text,
+ const gchar *keyword,
+ gboolean sort_by_service,
+ gint offset,
+ gint limit,
+ GError *error)
+{
+ static gboolean inited = FALSE;
+ ParserData data;
+ gchar *result;
+ gchar *table_name;
+ gboolean do_search = FALSE;
+
+ g_return_val_if_fail (TRACKER_IS_DB_INTERFACE (iface), NULL);
+ g_return_val_if_fail (query != NULL, NULL);
+ g_return_val_if_fail (service != NULL, NULL);
+ g_return_val_if_fail (fields != NULL, NULL);
+ g_return_val_if_fail (search_text != NULL, NULL);
+ g_return_val_if_fail (keyword != NULL, NULL);
if (!inited) {
error_quark = g_quark_from_static_string ("RDF-parser-error-quark");
@@ -1091,14 +1168,13 @@
}
memset (&data, 0, sizeof (data));
- data.db_con = db_con;
+ data.iface = iface;
data.statement_count = 0;
- data.service = (char *) service;
-
+ data.service = (gchar*) service;
data.sql_select = get_select_header (service);
if (field_count > 0) {
- int i;
+ gint i;
for (i = 0; i < field_count; i++) {
TrackerFieldData *field_data;
@@ -1106,18 +1182,19 @@
field_data = add_metadata_field (&data, fields[i], TRUE, FALSE);
if (!field_data) {
- g_critical ("RDF Query failed: field %s not found", fields[i]);
- g_slist_foreach (data.fields, (GFunc) g_object_unref, NULL);
+ g_critical ("RDF Query failed, field:'%s' not found",
+ fields[i]);
+ g_slist_foreach (data.fields,
+ (GFunc) g_object_unref,
+ NULL);
g_slist_free (data.fields);
g_string_free (data.sql_select, TRUE);
+
return NULL;
}
}
}
- char *table_name;
- gboolean do_search = FALSE;
-
table_name = "Services";
data.sql_from = g_string_new ("");
@@ -1127,23 +1204,39 @@
if (!tracker_is_empty_string (search_text)) {
do_search = TRUE;
- g_string_append_printf (data.sql_from, "\n FROM %s S INNER JOIN SearchResults1 M ON S.ID = M.SID ", table_name);
+ g_string_append_printf (data.sql_from,
+ "\n FROM %s S INNER JOIN SearchResults1 M ON S.ID = M.SID ",
+ table_name);
} else {
- g_string_append_printf (data.sql_from, "\n FROM %s S ", table_name);
+ g_string_append_printf (data.sql_from,
+ "\n FROM %s S ",
+ table_name);
}
if (!tracker_is_empty_string (keyword)) {
- char *keyword_metadata = tracker_get_related_metadata_names (db_con, "DC:Keywords");
- g_string_append_printf (data.sql_from, "\n INNER JOIN ServiceKeywordMetaData K ON S.ID = K.ServiceID and K.MetaDataID in (%s) and K.MetaDataValue = '%s' ", keyword_metadata, keyword);
+ gchar *keyword_metadata;
+
+ keyword_metadata = tracker_db_metadata_get_related_names (iface,
+ "DC:Keywords");
+ g_string_append_printf (data.sql_from,
+ "\n INNER JOIN ServiceKeywordMetaData K ON S.ID = K.ServiceID and K.MetaDataID in (%s) and K.MetaDataValue = '%s' ",
+ keyword_metadata,
+ keyword);
g_free (keyword_metadata);
}
data.sql_where = g_string_new ("");
if (strlen (query) < 10) {
- g_string_append_printf (data.sql_where, "\n WHERE (S.ServiceTypeID in (select TypeId from ServiceTypes where TypeName = '%s' or Parent = '%s')) ", service, service);
+ g_string_append_printf (data.sql_where,
+ "\n WHERE (S.ServiceTypeID in (select TypeId from ServiceTypes where TypeName = '%s' or Parent = '%s')) ",
+ service,
+ service);
} else {
- g_string_append_printf (data.sql_where, "\n WHERE (S.ServiceTypeID in (select TypeId from ServiceTypes where TypeName = '%s' or Parent = '%s')) AND ", service, service);
+ g_string_append_printf (data.sql_where,
+ "\n WHERE (S.ServiceTypeID in (select TypeId from ServiceTypes where TypeName = '%s' or Parent = '%s')) AND ",
+ service,
+ service);
}
if (limit < 1) {
@@ -1156,7 +1249,6 @@
} else {
data.sql_order = g_string_new ("\n ORDER BY S.ServiceTypeID, uri LIMIT ");
}
-
} else {
if (do_search) {
data.sql_order = g_string_new ("\n ORDER BY M.Score desc LIMIT ");
@@ -1206,8 +1298,8 @@
} else {
gchar *related_metadata;
- related_metadata = tracker_get_related_metadata_names (db_con,
- tracker_field_data_get_field_name (l->data));
+ related_metadata = tracker_db_metadata_get_related_names (iface,
+ tracker_field_data_get_field_name (l->data));
g_string_append_printf (data.sql_from,
"\n INNER JOIN %s %s ON (S.ID = %s.ServiceID and %s.MetaDataID in (%s)) ",
tracker_field_data_get_table_name (l->data),
Modified: branches/xesam-support/src/trackerd/tracker-rdf-query.h
==============================================================================
--- branches/xesam-support/src/trackerd/tracker-rdf-query.h (original)
+++ branches/xesam-support/src/trackerd/tracker-rdf-query.h Mon Jun 9 15:41:07 2008
@@ -23,21 +23,21 @@
#include <glib.h>
-#include "tracker-db.h"
+#include <libtracker-db/tracker-db-manager.h>
G_BEGIN_DECLS
-char *tracker_rdf_query_to_sql (DBConnection *db_con,
- const char *query,
- const char *service,
- char **fields,
- int field_count,
- const char *search_text,
- const char *keyword,
- gboolean sort_by_service,
- int offset,
- int limit,
- GError *error);
+gchar *tracker_rdf_query_to_sql (TrackerDBInterface *iface,
+ const gchar *query,
+ const gchar *service,
+ gchar **fields,
+ gint field_count,
+ const gchar *search_text,
+ const gchar *keyword,
+ gboolean sort_by_service,
+ gint offset,
+ gint limit,
+ GError *error);
G_END_DECLS
Modified: branches/xesam-support/src/trackerd/tracker-search.c
==============================================================================
--- branches/xesam-support/src/trackerd/tracker-search.c (original)
+++ branches/xesam-support/src/trackerd/tracker-search.c Mon Jun 9 15:41:07 2008
@@ -32,7 +32,9 @@
#include <libtracker-common/tracker-utils.h>
#include <libtracker-db/tracker-db-dbus.h>
+#include <libtracker-db/tracker-db-manager.h>
+#include "tracker-db.h"
#include "tracker-dbus.h"
#include "tracker-search.h"
#include "tracker-rdf-query.h"
@@ -46,7 +48,6 @@
typedef struct {
DBusGProxy *fd_proxy;
- DBConnection *db_con;
TrackerConfig *config;
TrackerLanguage *language;
Indexer *file_index;
@@ -55,7 +56,6 @@
enum {
PROP_0,
- PROP_DB_CONNECTION,
PROP_CONFIG,
PROP_LANGUAGE,
PROP_FILE_INDEX,
@@ -81,12 +81,6 @@
object_class->set_property = search_set_property;
g_object_class_install_property (object_class,
- PROP_DB_CONNECTION,
- g_param_spec_pointer ("db-connection",
- "DB connection",
- "Database connection to use in transactions",
- G_PARAM_WRITABLE));
- g_object_class_install_property (object_class,
PROP_CONFIG,
g_param_spec_object ("config",
"Config",
@@ -146,10 +140,6 @@
priv = GET_PRIV (object);
switch (param_id) {
- case PROP_DB_CONNECTION:
- tracker_search_set_db_connection (TRACKER_SEARCH (object),
- g_value_get_pointer (value));
- break;
case PROP_CONFIG:
tracker_search_set_config (TRACKER_SEARCH (object),
g_value_get_object (value));
@@ -173,31 +163,9 @@
}
TrackerSearch *
-tracker_search_new (DBConnection *db_con)
+tracker_search_new (void)
{
- TrackerSearch *object;
-
- object = g_object_new (TRACKER_TYPE_SEARCH,
- "db-connection", db_con,
- NULL);
-
- return object;
-}
-
-void
-tracker_search_set_db_connection (TrackerSearch *object,
- DBConnection *db_con)
-{
- TrackerSearchPriv *priv;
-
- g_return_if_fail (TRACKER_IS_SEARCH (object));
- g_return_if_fail (db_con != NULL);
-
- priv = GET_PRIV (object);
-
- priv->db_con = db_con;
-
- g_object_notify (G_OBJECT (object), "db-connection");
+ return g_object_new (TRACKER_TYPE_SEARCH, NULL);
}
void
@@ -602,7 +570,6 @@
TrackerQueryTree *tree;
GArray *array;
guint request_id;
- DBConnection *db_con;
gint services[12];
gint count = 0;
@@ -612,10 +579,6 @@
tracker_dbus_return_val_if_fail (search_text != NULL, FALSE, error);
tracker_dbus_return_val_if_fail (value != NULL, FALSE, error);
- priv = GET_PRIV (object);
-
- db_con = priv->db_con;
-
tracker_dbus_request_new (request_id,
"DBus request to get hit count, "
"service:'%s', search text:'%s'",
@@ -637,9 +600,6 @@
return FALSE;
}
- /* Check we have the right database connection */
- db_con = tracker_db_get_service_connection (db_con, service);
-
services[count++] = tracker_ontology_get_id_for_service_type (service);
if (strcmp (service, "Files") == 0) {
@@ -664,7 +624,7 @@
array = g_array_new (TRUE, TRUE, sizeof (gint));
g_array_append_vals (array, services, G_N_ELEMENTS (services));
tree = tracker_query_tree_new (search_text,
- db_con->word_index,
+ priv->file_index,
priv->config,
priv->language,
array);
@@ -689,7 +649,6 @@
GArray *hit_counts;
GArray *mail_hit_counts;
guint request_id;
- DBConnection *db_con;
guint i;
request_id = tracker_dbus_get_next_request_id ();
@@ -698,8 +657,6 @@
tracker_dbus_return_val_if_fail (values != NULL, FALSE, error);
priv = GET_PRIV (object);
-
- db_con = priv->db_con;
tracker_dbus_request_new (request_id,
"DBus request to get search hit count for all, "
@@ -714,7 +671,7 @@
}
tree = tracker_query_tree_new (search_text,
- db_con->word_index,
+ priv->file_index,
priv->config,
priv->language,
NULL);
@@ -773,10 +730,9 @@
gchar ***values,
GError **error)
{
- TrackerSearchPriv *priv;
+ TrackerDBInterface *iface;
TrackerDBResultSet *result_set;
guint request_id;
- DBConnection *db_con;
gchar **strv = NULL;
request_id = tracker_dbus_get_next_request_id ();
@@ -785,10 +741,6 @@
tracker_dbus_return_val_if_fail (search_text != NULL, FALSE, error);
tracker_dbus_return_val_if_fail (values != NULL, FALSE, error);
- priv = GET_PRIV (object);
-
- db_con = priv->db_con;
-
tracker_dbus_request_new (request_id,
"DBus request to search text, "
"query id:%d, service:'%s', search text:'%s', "
@@ -814,10 +766,9 @@
return FALSE;
}
- /* Check we have the right database connection */
- db_con = tracker_db_get_service_connection (db_con, service);
+ iface = tracker_db_manager_get_db_interface_by_service (service, FALSE);
- result_set = tracker_db_search_text (db_con,
+ result_set = tracker_db_search_text (iface,
service,
search_text,
offset,
@@ -878,10 +829,9 @@
GPtrArray **values,
GError **error)
{
- TrackerSearchPriv *priv;
+ TrackerDBInterface *iface;
TrackerDBResultSet *result_set;
guint request_id;
- DBConnection *db_con;
request_id = tracker_dbus_get_next_request_id ();
@@ -889,10 +839,6 @@
tracker_dbus_return_val_if_fail (search_text != NULL, FALSE, error);
tracker_dbus_return_val_if_fail (values != NULL, FALSE, error);
- priv = GET_PRIV (object);
-
- db_con = priv->db_con;
-
tracker_dbus_request_new (request_id,
"DBus request to search text detailed, "
"query id:%d, service:'%s', search text:'%s', "
@@ -918,10 +864,9 @@
return FALSE;
}
- /* Check we have the right database connection */
- db_con = tracker_db_get_service_connection (db_con, service);
+ iface = tracker_db_manager_get_db_interface_by_service (service, FALSE);
- result_set = tracker_db_search_text (db_con,
+ result_set = tracker_db_search_text (iface,
service,
search_text,
offset,
@@ -949,9 +894,9 @@
GError **error)
{
TrackerSearchPriv *priv;
+ TrackerDBInterface *iface;
TrackerDBResultSet *result_set;
guint request_id;
- DBConnection *db_con;
gchar *snippet = NULL;
gchar *service_id;
@@ -964,8 +909,6 @@
priv = GET_PRIV (object);
- db_con = priv->db_con;
-
tracker_dbus_request_new (request_id,
"DBus request to get snippet, "
"service:'%s', search text:'%s', id:'%s'",
@@ -988,10 +931,9 @@
return FALSE;
}
- /* Check we have the right database connection */
- db_con = tracker_db_get_service_connection (db_con, service);
+ iface = tracker_db_manager_get_db_interface_by_service (service, FALSE);
- service_id = tracker_db_get_id (db_con, service, id);
+ service_id = tracker_db_file_get_id_as_string (iface, service, id);
if (!service_id) {
tracker_dbus_request_failed (request_id,
error,
@@ -999,11 +941,13 @@
id);
return FALSE;
}
+
+ iface = tracker_db_manager_get_db_interface_by_service (service, TRUE);
- result_set = tracker_exec_proc (db_con->blob,
- "GetAllContents",
- service_id,
- NULL);
+ result_set = tracker_db_exec_proc (iface,
+ "GetAllContents",
+ service_id,
+ NULL);
g_free (service_id);
if (result_set) {
@@ -1047,20 +991,15 @@
GHashTable **values,
GError **error)
{
- TrackerSearchPriv *priv;
+ TrackerDBInterface *iface;
TrackerDBResultSet *result_set;
guint request_id;
- DBConnection *db_con;
request_id = tracker_dbus_get_next_request_id ();
tracker_dbus_return_val_if_fail (search_text != NULL, FALSE, error);
tracker_dbus_return_val_if_fail (values != NULL, FALSE, error);
- priv = GET_PRIV (object);
-
- db_con = priv->db_con;
-
tracker_dbus_request_new (request_id,
"DBus request to search files by text, "
"query id:%d, search text:'%s', offset:%d"
@@ -1071,11 +1010,19 @@
max_hits,
group_results ? "yes" : "no");
- result_set = tracker_db_search_files_by_text (db_con,
- search_text,
- offset,
- search_sanity_check_max_hits (max_hits),
- group_results);
+ iface = tracker_db_manager_get_db_interface (TRACKER_DB_FILE_METADATA);
+
+ /* FIXME: This function no longer exists, it was returning
+ * NULL in every case, this DBus function needs rewriting or
+ * to be removed.
+ */
+ result_set = NULL;
+
+ /* result_set = tracker_db_search_files_by_text (iface, */
+ /* search_text, */
+ /* offset, */
+ /* search_sanity_check_max_hits (max_hits), */
+ /* group_results); */
*values = tracker_dbus_query_result_to_hash_table (result_set);
@@ -1098,10 +1045,9 @@
gchar ***values,
GError **error)
{
- TrackerSearchPriv *priv;
+ TrackerDBInterface *iface;
TrackerDBResultSet *result_set;
guint request_id;
- DBConnection *db_con;
/* FIXME: This function is completely redundant */
@@ -1112,10 +1058,6 @@
tracker_dbus_return_val_if_fail (search_text != NULL, FALSE, error);
tracker_dbus_return_val_if_fail (values != NULL, FALSE, error);
- priv = GET_PRIV (object);
-
- db_con = priv->db_con;
-
tracker_dbus_request_new (request_id,
"DBus request to search metadata, "
"service:'%s', search text:'%s', field:'%s', "
@@ -1134,15 +1076,20 @@
return FALSE;
}
- /* result_set = tracker_db_search_metadata (db_con, */
+ iface = tracker_db_manager_get_db_interface_by_service (service, FALSE);
+
+ /* FIXME: This function no longer exists, it was returning
+ * NULL in every case, this DBus function needs rewriting or
+ * to be removed.
+ */
+ result_set = NULL;
+
+ /* result_set = tracker_db_search_metadata (iface, */
/* service, */
/* field, */
/* text, */
/* offset, */
/* search_sanity_check_max_hits (max_hits)); */
-
- result_set = NULL;
-
*values = tracker_dbus_query_result_to_strv (result_set, NULL);
if (result_set) {
@@ -1162,10 +1109,9 @@
GHashTable **values,
GError **error)
{
- TrackerSearchPriv *priv;
+ TrackerDBInterface *iface;
TrackerDBResultSet *result_set;
guint request_id;
- DBConnection *db_con;
request_id = tracker_dbus_get_next_request_id ();
@@ -1173,10 +1119,6 @@
tracker_dbus_return_val_if_fail (id != NULL, FALSE, error);
tracker_dbus_return_val_if_fail (search_text != NULL, FALSE, error);
tracker_dbus_return_val_if_fail (values != NULL, FALSE, error);
-
- priv = GET_PRIV (object);
-
- db_con = priv->db_con;
tracker_dbus_request_new (request_id,
"DBus request to search matching fields, "
@@ -1200,13 +1142,18 @@
return FALSE;
}
- /* Check we have the right database connection */
- db_con = tracker_db_get_service_connection (db_con, service);
+ iface = tracker_db_manager_get_db_interface_by_service (service, FALSE);
+
+ /* FIXME: This function no longer exists, it was returning
+ * NULL in every case, this DBus function needs rewriting or
+ * to be removed.
+ */
+ result_set = NULL;
- result_set = tracker_db_search_matching_metadata (db_con,
- service,
- id,
- search_text);
+ /* result_set = tracker_db_search_matching_metadata (iface, */
+ /* service, */
+ /* id, */
+ /* search_text); */
*values = tracker_dbus_query_result_to_hash_table (result_set);
if (result_set) {
@@ -1232,10 +1179,9 @@
GPtrArray **values,
GError **error)
{
- TrackerSearchPriv *priv;
+ TrackerDBInterface *iface;
TrackerDBResultSet *result_set;
guint request_id;
- DBConnection *db_con;
request_id = tracker_dbus_get_next_request_id ();
@@ -1246,10 +1192,6 @@
tracker_dbus_return_val_if_fail (query_condition != NULL, FALSE, error);
tracker_dbus_return_val_if_fail (values != NULL, FALSE, error);
- priv = GET_PRIV (object);
-
- db_con = priv->db_con;
-
tracker_dbus_request_new (request_id,
"DBus request to search query, "
"query id:%d, service:'%s', search text '%s', "
@@ -1274,6 +1216,8 @@
result_set = NULL;
+ iface = tracker_db_manager_get_db_interface_by_service (service, FALSE);
+
if (query_condition) {
GError *query_error = NULL;
gchar *query_translated;
@@ -1285,7 +1229,7 @@
search_text,
keyword);
- query_translated = tracker_rdf_query_to_sql (db_con,
+ query_translated = tracker_rdf_query_to_sql (iface,
query_condition,
service,
fields,
@@ -1316,10 +1260,8 @@
"Translated RDF query:'%s'",
query_translated);
- db_con = tracker_db_get_service_connection (db_con, service);
-
if (!tracker_is_empty_string (search_text)) {
- tracker_db_search_text (db_con,
+ tracker_db_search_text (iface,
service,
search_text,
0,
@@ -1328,7 +1270,9 @@
FALSE);
}
- result_set = tracker_db_interface_execute_query (db_con->db, NULL, query_translated);
+ result_set = tracker_db_interface_execute_query (iface,
+ NULL,
+ query_translated);
g_free (query_translated);
}
Modified: branches/xesam-support/src/trackerd/tracker-search.h
==============================================================================
--- branches/xesam-support/src/trackerd/tracker-search.h (original)
+++ branches/xesam-support/src/trackerd/tracker-search.h Mon Jun 9 15:41:07 2008
@@ -26,7 +26,6 @@
#include <libtracker-common/tracker-language.h>
-#include "tracker-db-sqlite.h"
#include "tracker-indexer.h"
#define TRACKER_SEARCH_SERVICE "org.freedesktop.Tracker"
@@ -54,9 +53,7 @@
};
GType tracker_search_get_type (void);
-TrackerSearch *tracker_search_new (DBConnection *db_con);
-void tracker_search_set_db_connection (TrackerSearch *object,
- DBConnection *db_con);
+TrackerSearch *tracker_search_new (void);
void tracker_search_set_config (TrackerSearch *object,
TrackerConfig *config);
void tracker_search_set_language (TrackerSearch *object,
Modified: branches/xesam-support/src/trackerd/tracker-utils.c
==============================================================================
--- branches/xesam-support/src/trackerd/tracker-utils.c (original)
+++ branches/xesam-support/src/trackerd/tracker-utils.c Mon Jun 9 15:41:07 2008
@@ -66,56 +66,6 @@
}
void
-tracker_notify_file_data_available (void)
-{
- gint revs = 0;
-
- if (!tracker->is_running) {
- return;
- }
-
- /* If file thread is asleep then we just need to wake it up! */
- if (g_mutex_trylock (tracker->files_signal_mutex)) {
- g_cond_signal (tracker->files_signal_cond);
- g_mutex_unlock (tracker->files_signal_mutex);
- return;
- }
-
- /* If busy - check if async queue has new stuff as we do not need to notify then */
- if (tracker_process_files_process_queue_length () > 1) {
- return;
- }
-
- /* If file thread not in check phase then we need do nothing */
- if (g_mutex_trylock (tracker->files_check_mutex)) {
- g_mutex_unlock (tracker->files_check_mutex);
- return;
- }
-
- /* We are in check phase - we need to wait until either
- * check_mutex is unlocked or file thread is asleep then
- * awaken it.
- */
- while (revs < 100000) {
- if (g_mutex_trylock (tracker->files_check_mutex)) {
- g_mutex_unlock (tracker->files_check_mutex);
- return;
- }
-
- if (g_mutex_trylock (tracker->files_signal_mutex)) {
- g_cond_signal (tracker->files_signal_cond);
- g_mutex_unlock (tracker->files_signal_mutex);
- return;
- }
-
- g_thread_yield ();
- g_usleep (10);
-
- revs++;
- }
-}
-
-void
tracker_add_metadata_to_table (GHashTable *meta_table,
const gchar *key,
const gchar *value)
Modified: branches/xesam-support/src/trackerd/tracker-watcher-fam.c
==============================================================================
--- branches/xesam-support/src/trackerd/tracker-watcher-fam.c (original)
+++ branches/xesam-support/src/trackerd/tracker-watcher-fam.c Mon Jun 9 15:41:07 2008
@@ -197,6 +197,7 @@
g_free (parent);
} else {
+
if (event_type == TRACKER_ACTION_CREATE) {
tracker_db_insert_pending_file (main_thread_db_con,
info->file_id,
Modified: branches/xesam-support/src/trackerd/tracker-watcher-inotify.c
==============================================================================
--- branches/xesam-support/src/trackerd/tracker-watcher-inotify.c (original)
+++ branches/xesam-support/src/trackerd/tracker-watcher-inotify.c Mon Jun 9 15:41:07 2008
@@ -41,6 +41,7 @@
#include <libtracker-db/tracker-db-action.h>
#include <libtracker-db/tracker-db-file-info.h>
+#include <libtracker-db/tracker-db-manager.h>
#include "tracker-watcher.h"
#include "tracker-process-files.h"
@@ -54,7 +55,6 @@
guint32 cookie);
extern Tracker *tracker;
-extern DBConnection *main_thread_db_con;
static GIOChannel *channel;
static GSList *move_list;
@@ -147,7 +147,6 @@
if (tracker_file_is_valid (parent)) {
tracker_process_files_process_queue_push (info);
- tracker_notify_file_data_available ();
} else {
tracker_db_file_info_free (info);
info = NULL;
@@ -349,6 +348,10 @@
static gboolean
process_inotify_events (void)
{
+ TrackerDBInterface *iface_cache;
+
+ iface_cache = tracker_db_manager_get_db_interface (TRACKER_DB_CACHE);
+
while (g_queue_get_length (event_queue) > 0) {
TrackerDBResultSet *result_set;
TrackerDBAction action_type;
@@ -389,10 +392,11 @@
/* Get watch name as monitor */
str_wd = g_strdup_printf ("%d", event->wd);
- result_set = tracker_exec_proc (main_thread_db_con->cache,
- "GetWatchUri",
- str_wd,
- NULL);
+
+ result_set = tracker_db_exec_proc (iface_cache,
+ "GetWatchUri",
+ str_wd,
+ NULL);
g_free (str_wd);
if (result_set) {
@@ -559,20 +563,17 @@
}
gboolean
-tracker_watcher_add_dir (const gchar *dir,
- DBConnection *db_con)
+tracker_watcher_add_dir (const gchar *dir,
+ TrackerDBInterface *iface)
{
- gchar *dir_in_locale;
- static gboolean limit_exceeded = FALSE;
+ TrackerDBInterface *iface_cache;
+ gchar *dir_in_locale;
+ static gboolean limit_exceeded = FALSE;
g_return_val_if_fail (dir != NULL, FALSE);
g_return_val_if_fail (dir[0] == G_DIR_SEPARATOR, FALSE);
- if (!tracker->is_running) {
- return FALSE;
- }
-
- if (tracker_watcher_is_dir_watched (dir, db_con)) {
+ if (tracker_watcher_is_dir_watched (dir, iface)) {
return FALSE;
}
@@ -619,8 +620,10 @@
return FALSE;
}
+ iface_cache = tracker_db_manager_get_db_interface (TRACKER_DB_CACHE);
+
str_wd = g_strdup_printf ("%d", wd);
- tracker_exec_proc (db_con->cache, "InsertWatch", dir, str_wd, NULL);
+ tracker_db_exec_proc (iface_cache, "InsertWatch", dir, str_wd, NULL);
g_free (str_wd);
monitor_count++;
@@ -636,10 +639,11 @@
}
void
-tracker_watcher_remove_dir (const gchar *dir,
- gboolean delete_subdirs,
- DBConnection *db_con)
+tracker_watcher_remove_dir (const gchar *dir,
+ gboolean delete_subdirs,
+ TrackerDBInterface *iface)
{
+ TrackerDBInterface *iface_cache;
TrackerDBResultSet *result_set;
gboolean valid = TRUE;
gint wd;
@@ -647,7 +651,8 @@
g_return_if_fail (dir != NULL);
g_return_if_fail (dir[0] == G_DIR_SEPARATOR);
- result_set = tracker_exec_proc (db_con->cache, "GetWatchID", dir, NULL);
+ iface_cache = tracker_db_manager_get_db_interface (TRACKER_DB_CACHE);
+ result_set = tracker_db_exec_proc (iface_cache, "GetWatchID", dir, NULL);
wd = -1;
@@ -659,8 +664,7 @@
tracker_db_result_set_get (result_set, 0, &wd, -1);
g_object_unref (result_set);
-
- tracker_exec_proc (db_con->cache, "DeleteWatch", dir, NULL);
+ tracker_db_exec_proc (iface_cache, "DeleteWatch", dir, NULL);
if (wd > -1) {
inotify_rm_watch (monitor_fd, wd);
@@ -671,7 +675,7 @@
return;
}
- result_set = tracker_db_get_sub_watches (db_con, dir);
+ result_set = tracker_db_uri_sub_watches_get (dir);
if (!result_set) {
return;
@@ -690,24 +694,22 @@
}
g_object_unref (result_set);
- tracker_db_delete_sub_watches (db_con, dir);
+ tracker_db_uri_sub_watches_delete (dir);
}
gboolean
-tracker_watcher_is_dir_watched (const char *dir,
- DBConnection *db_con)
+tracker_watcher_is_dir_watched (const char *dir,
+ TrackerDBInterface *iface)
{
+ TrackerDBInterface *iface_cache;
TrackerDBResultSet *result_set;
gint id;
g_return_val_if_fail (dir != NULL, FALSE);
g_return_val_if_fail (dir[0] == G_DIR_SEPARATOR, FALSE);
- if (!tracker->is_running) {
- return FALSE;
- }
-
- result_set = tracker_exec_proc (db_con->cache, "GetWatchID", dir, NULL);
+ iface_cache = tracker_db_manager_get_db_interface (TRACKER_DB_CACHE);
+ result_set = tracker_db_exec_proc (iface_cache, "GetWatchID", dir, NULL);
if (!result_set) {
return FALSE;
Modified: branches/xesam-support/src/trackerd/tracker-watcher.h
==============================================================================
--- branches/xesam-support/src/trackerd/tracker-watcher.h (original)
+++ branches/xesam-support/src/trackerd/tracker-watcher.h Mon Jun 9 15:41:07 2008
@@ -28,13 +28,13 @@
gboolean tracker_watcher_init (void);
void tracker_watcher_shutdown (void);
-gboolean tracker_watcher_add_dir (const char *dir,
- DBConnection *db_con);
-void tracker_watcher_remove_dir (const char *dir,
- gboolean delete_subdirs,
- DBConnection *db_con);
-gboolean tracker_watcher_is_dir_watched (const char *dir,
- DBConnection *db_con);
+gboolean tracker_watcher_add_dir (const char *dir,
+ TrackerDBInterface *iface);
+void tracker_watcher_remove_dir (const char *dir,
+ gboolean delete_subdirs,
+ TrackerDBInterface *iface);
+gboolean tracker_watcher_is_dir_watched (const char *dir,
+ TrackerDBInterface *iface);
gint tracker_watcher_get_dir_count (void);
G_END_DECLS
Modified: branches/xesam-support/src/trackerd/tracker-xesam-live-search.c
==============================================================================
--- branches/xesam-support/src/trackerd/tracker-xesam-live-search.c (original)
+++ branches/xesam-support/src/trackerd/tracker-xesam-live-search.c Mon Jun 9 15:41:07 2008
@@ -28,6 +28,7 @@
#include "tracker-xesam-manager.h"
#include "tracker-xesam-query.h"
#include "tracker-dbus.h"
+#include "tracker-db.h"
struct _TrackerXesamLiveSearchPriv {
TrackerXesamSession *session;
@@ -268,7 +269,10 @@
/* Created and Modified items */
static void
-get_hits_added_modified (TrackerXesamLiveSearch *self, MatchWithEventsFlags flags, DBConnection *db_con, GArray **added, GArray **modified)
+get_hits_added_modified (TrackerXesamLiveSearch *self,
+ TrackerDBInterface *iface,
+ GArray **added,
+ GArray **modified)
{
gboolean ls_valid = TRUE;
GArray *m_added = NULL;
@@ -278,11 +282,11 @@
/* Right now we are ignoring flags (both creates and updates are
* searched) */
- result_set = tracker_db_get_live_search_new_ids (db_con,
- tracker_xesam_live_search_get_id (self),
- tracker_xesam_live_search_get_from_query (self),
- tracker_xesam_live_search_get_join_query (self),
- tracker_xesam_live_search_get_where_query (self)); /* Query */
+ result_set = tracker_db_live_search_get_new_ids (iface,
+ tracker_xesam_live_search_get_id (self),
+ tracker_xesam_live_search_get_from_query (self),
+ tracker_xesam_live_search_get_join_query (self),
+ tracker_xesam_live_search_get_where_query (self)); /* Query */
if (!result_set)
return;
@@ -333,42 +337,46 @@
*modified = m_modified;
}
-
-
/* Created and Modified items */
static void
-get_all_hits (TrackerXesamLiveSearch *self, DBConnection *db_con, GArray **hits)
+get_all_hits (TrackerXesamLiveSearch *self,
+ TrackerDBInterface *iface,
+ GArray **hits)
{
- gboolean ls_valid = TRUE;
- GArray *m_hits = NULL;
TrackerDBResultSet *result_set;
+ gboolean valid;
- result_set = tracker_db_get_live_search_all_ids (db_con,
- tracker_xesam_live_search_get_id (self));
+ g_return_if_fail (hits != NULL);
- if (!result_set)
+ *hits = NULL;
+
+ result_set = tracker_db_live_search_get_all_ids (iface,
+ tracker_xesam_live_search_get_id (self));
+
+ if (!result_set) {
return;
+ }
- while (ls_valid) {
+ valid = TRUE;
+
+ while (valid) {
GValue ls_value = { 0, };
- gint ls_i_value;
+ gint ls_i_value;
_tracker_db_result_set_get_value (result_set, 0, &ls_value);
-
ls_i_value = g_value_get_int (&ls_value);
- if (m_hits == NULL)
- m_hits = g_array_new (FALSE, TRUE, sizeof (guint32));
- g_array_append_val (m_hits, ls_i_value);
+ if (*hits == NULL) {
+ *hits = g_array_new (FALSE, TRUE, sizeof (guint32));
+ }
+ g_array_append_val (*hits, ls_i_value);
g_value_unset (&ls_value);
- ls_valid = tracker_db_result_set_iter_next (result_set);
+ valid = tracker_db_result_set_iter_next (result_set);
}
g_object_unref (result_set);
-
- *hits = m_hits;
}
@@ -382,61 +390,70 @@
* Find all items that match with the current events for @self.
**/
void
-tracker_xesam_live_search_match_with_events (TrackerXesamLiveSearch *self, MatchWithEventsFlags flags, GArray **added, GArray **removed, GArray **modified)
+tracker_xesam_live_search_match_with_events (TrackerXesamLiveSearch *self,
+ MatchWithEventsFlags flags,
+ GArray **added,
+ GArray **removed,
+ GArray **modified)
{
- DBConnection *db_con = NULL;
- GArray *m_added = NULL;
- GArray *m_removed = NULL;
- GArray *m_modified = NULL;
-
- GObject *xesam = tracker_dbus_get_object (TRACKER_TYPE_XESAM);
+ TrackerDBInterface *iface;
+ TrackerDBResultSet *result_set;
+ GObject *xesam;
- g_object_get (xesam, "db-connection", &db_con, NULL);
+ g_return_if_fail (TRACKER_IS_XESAM_LIVE_SEARCH (self));
+ g_return_if_fail (added != NULL);
+ g_return_if_fail (removed != NULL);
+ g_return_if_fail (modified != NULL);
- if (flags & MATCH_WITH_EVENTS_DELETES) {
+ iface = tracker_db_manager_get_db_interface (TRACKER_DB_XESAM);
+ xesam = tracker_dbus_get_object (TRACKER_TYPE_XESAM);
- TrackerDBResultSet *result_set;
- gboolean ls_valid = TRUE;
+ *added = NULL;
+ *removed = NULL;
+ *modified = NULL;
+ if (flags & MATCH_WITH_EVENTS_DELETES) {
/* Deleted items */
- result_set = tracker_db_get_live_search_deleted_ids (db_con,
- tracker_xesam_live_search_get_id (self));
-
- if (!result_set)
- goto part_two;
+ result_set = tracker_db_live_search_get_deleted_ids (iface,
+ tracker_xesam_live_search_get_id (self));
- while (ls_valid) {
- GValue ls_value = { 0, };
- gint ls_i_value;
-
- _tracker_db_result_set_get_value (result_set, 0, &ls_value);
- ls_i_value = g_value_get_int (&ls_value);
+ if (result_set) {
+ gboolean valid;
- if (m_removed == NULL)
- m_removed = g_array_new (FALSE, TRUE, sizeof (guint32));
- g_array_append_val (m_removed, ls_i_value);
+ valid = TRUE;
- g_value_unset (&ls_value);
+ while (valid) {
+ GValue ls_value = { 0, };
+ gint ls_i_value;
+
+ _tracker_db_result_set_get_value (result_set,
+ 0,
+ &ls_value);
+ ls_i_value = g_value_get_int (&ls_value);
+
+ if (*removed == NULL) {
+ *removed = g_array_new (FALSE,
+ TRUE,
+ sizeof (guint32));
+ }
- ls_valid = tracker_db_result_set_iter_next (result_set);
+ g_array_append_val (*removed, ls_i_value);
+ g_value_unset (&ls_value);
+
+ valid = tracker_db_result_set_iter_next (result_set);
+ }
+
+ g_object_unref (result_set);
}
-
- g_object_unref (result_set);
}
-part_two:
-
- /* Created and Modified items */
if (flags & MATCH_WITH_EVENTS_CREATES || flags & MATCH_WITH_EVENTS_MODIFIES) {
- get_hits_added_modified (self, flags, db_con, &m_added, &m_modified);
+ /* Created and Modified items */
+ get_hits_added_modified (self, iface, added, modified);
}
-
- *added = m_added;
- *removed = m_removed;
- *modified = m_modified;
-
}
+
/**
* tracker_xesam_live_search_close:
* @self: a #TrackerXesamLiveSearch
@@ -460,13 +477,11 @@
TRACKER_XESAM_ERROR_SEARCH_CLOSED,
"Search was already closed");
} else {
- DBConnection *db_con = NULL;
- GObject *xesam;
+ TrackerDBInterface *iface;
- xesam = tracker_dbus_get_object (TRACKER_TYPE_XESAM);
+ iface = tracker_db_manager_get_db_interface (TRACKER_DB_XESAM);
- g_object_get (xesam, "db-connection", &db_con, NULL);
- tracker_db_stop_live_search (db_con,
+ tracker_db_live_search_stop (iface,
tracker_xesam_live_search_get_id (self));
}
@@ -503,15 +518,13 @@
TRACKER_XESAM_ERROR_SEARCH_NOT_ACTIVE,
"Search is not active");
} else {
+ TrackerDBInterface *iface;
TrackerDBResultSet *result_set;
GValue value = {0, };
- DBConnection *db_con = NULL;
- GObject *xesam;
- xesam = tracker_dbus_get_object (TRACKER_TYPE_XESAM);
- g_object_get (xesam, "db-connection", &db_con, NULL);
+ iface = tracker_db_manager_get_db_interface (TRACKER_DB_XESAM);
- result_set = tracker_db_get_live_search_hit_count (db_con,
+ result_set = tracker_db_live_search_get_hit_count (iface,
tracker_xesam_live_search_get_id (self));
_tracker_db_result_set_get_value (result_set, 0, &value);
*count = g_value_get_int (&value);
@@ -693,6 +706,7 @@
*hit_data = result;
}
+
/**
* tracker_xesam_live_search_get_hits:
* @self: a #TrackerXesamLiveSearch
@@ -725,37 +739,44 @@
TRACKER_XESAM_ERROR_SEARCH_NOT_ACTIVE,
"Search is not active");
else {
- TrackerDBResultSet *result_set = NULL;
- TrackerXesamSession *session = priv->session;
- DBConnection *db_con = NULL;
- GObject *xesam;
-
- GValue *value;
- GStrv fields;
- GError *tmp_error = NULL;
-
- xesam = tracker_dbus_get_object (TRACKER_TYPE_XESAM);
- g_object_get (xesam, "db-connection", &db_con, NULL);
-
- g_debug ("live_search_get_hits");
-
- tracker_xesam_session_get_property (session, "hit.fields", &value, &tmp_error);
+ TrackerXesamSession *session;
+ GValue *value;
+ GError *tmp_error = NULL;
+
+ session = priv->session;
+
+ tracker_xesam_session_get_property (session,
+ "hit.fields",
+ &value,
+ &tmp_error);
if (tmp_error) {
g_propagate_error(error, tmp_error);
return;
}
-
+
if (value) {
+ TrackerDBInterface *iface;
+ TrackerDBResultSet *result_set;
+ GStrv fields;
+
fields = g_value_get_boxed (value);
-
- result_set = tracker_db_get_live_search_get_hit_data (db_con,
- tracker_xesam_live_search_get_id (self), fields);
-
- g_debug ("Got something from get_hit_data");
-
+
+ iface = tracker_db_manager_get_db_interface (TRACKER_DB_XESAM);
+
+ /* For ottela: fetch results for get_hits */
+
+ result_set = tracker_db_live_search_get_hit_data (iface,
+ tracker_xesam_live_search_get_id (self),
+ fields);
+
if (result_set) {
- get_hit_data (self, result_set, hits, g_strv_length(fields));
+
+ get_hit_data (self,
+ result_set,
+ hits,
+ g_strv_length(fields));
+
g_object_unref (result_set);
} else {
*hits = g_ptr_array_new ();
@@ -787,35 +808,42 @@
TRACKER_XESAM_ERROR_SEARCH_NOT_ACTIVE,
"Search is not active");
} else {
- TrackerDBResultSet *result_set = NULL;
TrackerXesamSession *session = priv->session;
- DBConnection *db_con = NULL;
- GObject *xesam;
+ TrackerDBInterface *iface;
+ TrackerDBResultSet *result_set;
+ GValue *value;
+ GError *tmp_error = NULL;
- GValue *value;
- GStrv fields;
- GError *tmp_error = NULL;
-
- xesam = tracker_dbus_get_object (TRACKER_TYPE_XESAM);
- g_object_get (xesam, "db-connection", &db_con, NULL);
+ iface = tracker_db_manager_get_db_interface (TRACKER_DB_XESAM);
g_debug ("live_search_get_range_hits");
-
- tracker_xesam_session_get_property (session, "hit.fields", &value, &tmp_error);
+
+ tracker_xesam_session_get_property (session,
+ "hit.fields",
+ &value,
+ &tmp_error);
if (tmp_error) {
g_propagate_error(error, tmp_error);
return;
}
-
+
if (value) {
+ GStrv fields;
+
fields = g_value_get_boxed (value);
-
- result_set = tracker_db_get_live_search_get_hit_data (db_con,
- tracker_xesam_live_search_get_id (self), fields);
-
+
+ result_set = tracker_db_live_search_get_hit_data (iface,
+ tracker_xesam_live_search_get_id (self),
+ fields);
+
if (result_set) {
- get_hit_data (self, result_set, hits, g_strv_length(fields));
+
+ get_hit_data (self,
+ result_set,
+ hits,
+ g_strv_length(fields));
+
g_object_unref (result_set);
} else {
*hits = g_ptr_array_new ();
@@ -875,18 +903,22 @@
TRACKER_XESAM_ERROR_SEARCH_NOT_ACTIVE,
"Search is not active yet");
} else {
- TrackerDBResultSet *result_set = NULL;
- DBConnection *db_con = NULL;
- GObject *xesam;
-
- xesam = tracker_dbus_get_object (TRACKER_TYPE_XESAM);
- g_object_get (xesam, "db-connection", &db_con, NULL);
+ TrackerDBInterface *iface;
+ TrackerDBResultSet *result_set;
- result_set = tracker_db_get_live_search_get_hit_data (db_con,
- tracker_xesam_live_search_get_id (self), fields);
+ iface = tracker_db_manager_get_db_interface (TRACKER_DB_XESAM);
+
+ result_set = tracker_db_live_search_get_hit_data (iface,
+ tracker_xesam_live_search_get_id (self),
+ fields);
if (result_set) {
- get_hit_data (self, result_set, hit_data, g_strv_length (fields));
+
+ get_hit_data (self,
+ result_set,
+ hit_data,
+ g_strv_length (fields));
+
g_object_unref (result_set);
} else {
*hit_data = g_ptr_array_new ();
@@ -916,19 +948,22 @@
TRACKER_XESAM_ERROR_SEARCH_NOT_ACTIVE,
"Search is not active yet");
} else {
- TrackerDBResultSet *result_set = NULL;
- DBConnection *db_con = NULL;
- GObject *xesam;
+ TrackerDBInterface *iface;
+ TrackerDBResultSet *result_set;
-
- xesam = tracker_dbus_get_object (TRACKER_TYPE_XESAM);
- g_object_get (xesam, "db-connection", &db_con, NULL);
+ iface = tracker_db_manager_get_db_interface (TRACKER_DB_XESAM);
- result_set = tracker_db_get_live_search_get_hit_data (db_con,
- tracker_xesam_live_search_get_id (self), fields);
+ result_set = tracker_db_live_search_get_hit_data (iface,
+ tracker_xesam_live_search_get_id (self),
+ fields);
if (result_set) {
- get_hit_data (self, result_set, hit_data, g_strv_length(fields));
+
+ get_hit_data (self,
+ result_set,
+ hit_data,
+ g_strv_length(fields));
+
g_object_unref (result_set);
} else {
*hit_data = g_ptr_array_new ();
@@ -975,19 +1010,18 @@
TRACKER_XESAM_ERROR_SEARCH_CLOSED,
"Search is closed");
else {
- DBConnection *db_con = NULL;
- GObject *xesam = tracker_dbus_get_object (TRACKER_TYPE_XESAM);
- GArray *hits = NULL;
-
- g_object_get (xesam, "db-connection", &db_con, NULL);
+ TrackerDBInterface *iface;
+ GArray *hits;
- tracker_db_start_live_search (db_con,
- tracker_xesam_live_search_get_from_query (self),
- tracker_xesam_live_search_get_join_query (self),
- tracker_xesam_live_search_get_where_query (self),
- tracker_xesam_live_search_get_id (self));
+ iface = tracker_db_manager_get_db_interface (TRACKER_DB_XESAM);
- get_all_hits (self, db_con, &hits);
+ tracker_db_live_search_start (iface,
+ tracker_xesam_live_search_get_from_query (self),
+ tracker_xesam_live_search_get_join_query (self),
+ tracker_xesam_live_search_get_where_query (self),
+ tracker_xesam_live_search_get_id (self));
+
+ get_all_hits (self, iface, &hits);
if (hits && hits->len > 0) {
g_debug ("Emitting HitsAdded");
@@ -1090,8 +1124,8 @@
GError **error)
{
TrackerXesamLiveSearchPriv *priv;
+ TrackerDBInterface *iface;
GObject *xesam;
- DBConnection *db_con = NULL;
GError *parse_error = NULL;
gchar *orig_from, *orig_join, *orig_where;
@@ -1099,8 +1133,8 @@
priv = self->priv;
+ iface = tracker_db_manager_get_db_interface (TRACKER_DB_XESAM);
xesam = tracker_dbus_get_object (TRACKER_TYPE_XESAM);
- g_object_get (xesam, "db-connection", &db_con, NULL);
orig_from = priv->from_sql;
orig_join = priv->join_sql;
@@ -1110,15 +1144,18 @@
priv->join_sql = NULL;
priv->where_sql = NULL;
- tracker_xesam_query_to_sql (db_con, priv->query,
+ tracker_xesam_query_to_sql (iface,
+ priv->query,
&priv->from_sql,
&priv->join_sql,
&priv->where_sql,
&parse_error);
if (parse_error) {
- gchar *str = g_strdup_printf ("Parse error: %s",
- parse_error->message);
+ gchar *str;
+
+ str = g_strdup_printf ("Parse error: %s",
+ parse_error->message);
g_set_error (error,
TRACKER_XESAM_ERROR_DOMAIN,
TRACKER_XESAM_ERROR_PARSING_FAILED,
@@ -1142,7 +1179,8 @@
}
g_message ("Parsed to '%s' and '%s'",
- priv->from_sql, priv->where_sql);
+ priv->from_sql,
+ priv->where_sql);
return TRUE;
}
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 Mon Jun 9 15:41:07 2008
@@ -26,6 +26,8 @@
#include <libtracker-common/tracker-config.h>
+#include <libtracker-db/tracker-db-manager.h>
+
#include "tracker-xesam-manager.h"
#include "tracker-dbus.h"
#include "tracker-main.h"
@@ -246,29 +248,24 @@
static gboolean
live_search_handler (gpointer data)
{
- GObject *xesam;
- DBConnection *db_con = NULL;
- GList *sessions;
- gboolean reason_to_live = FALSE;
+ TrackerXesam *xesam;
+ TrackerDBInterface *iface;
+ GList *sessions;
+ gboolean reason_to_live = FALSE;
xesam = tracker_dbus_get_object (TRACKER_TYPE_XESAM);
+ g_return_val_if_fail (xesam != NULL, FALSE);
- if (!xesam) {
- return FALSE;
- }
-
- g_object_get (xesam, "db-connection", &db_con, NULL);
-
- if (!db_con) {
- return FALSE;
- }
+ iface = tracker_db_manager_get_db_interface (TRACKER_DB_XESAM);
+ g_return_val_if_fail (iface != NULL, FALSE);
sessions = g_hash_table_get_values (xesam_sessions);
while (sessions) {
GList *searches;
- g_debug ("Session being handled, ID :%s", tracker_xesam_session_get_id (sessions->data));
+ g_debug ("Session being handled, ID :%s",
+ tracker_xesam_session_get_id (sessions->data));
searches = tracker_xesam_session_get_searches (sessions->data);
@@ -278,7 +275,8 @@
GArray *removed = NULL;
GArray *modified = NULL;
- g_debug ("Search being handled, ID :%s", tracker_xesam_live_search_get_id (searches->data));
+ g_debug ("Search being handled, ID :%s",
+ tracker_xesam_live_search_get_id (searches->data));
search = searches->data;
@@ -329,7 +327,7 @@
g_list_free (sessions);
- tracker_db_delete_handled_events (db_con);
+ tracker_db_xesam_delete_handled_events (iface);
return reason_to_live;
}
Modified: branches/xesam-support/src/trackerd/tracker-xesam-query.c
==============================================================================
--- branches/xesam-support/src/trackerd/tracker-xesam-query.c (original)
+++ branches/xesam-support/src/trackerd/tracker-xesam-query.c Mon Jun 9 15:41:07 2008
@@ -29,28 +29,29 @@
#include <libtracker-common/tracker-utils.h>
#include "tracker-xesam-query.h"
+#include "tracker-db.h"
/* XESAM Query Condition
-<query>
- <and>
- <greaterThan>
- <field name="File:Size" />
- <integer>1000000<integer>
- </greaterThan>
- <equals>
- <field name="File:Path" />
- <string>/home/jamie<string>
- </equals>
- </and>
-</Condition>
+ * <query>
+ * <and>
+ * <greaterThan>
+ * <field name="File:Size" />
+ * <integer>1000000<integer>
+ * </greaterThan>
+ * <equals>
+ * <field name="File:Path" />
+ * <string>/home/jamie<string>
+ * </equals>
+ * </and>
+ * </query>
*/
-/* main elements */
+/* Main elements */
#define ELEMENT_XESAM_QUERY "query"
#define ELEMENT_XESAM_USER_QUERY "userQuery"
#define ELEMENT_XESAM_FIELD "field"
-/* operators */
+/* Operators */
#define ELEMENT_XESAM_AND "and"
#define ELEMENT_XESAM_OR "or"
#define ELEMENT_XESAM_EQUALS "equals"
@@ -59,13 +60,15 @@
#define ELEMENT_XESAM_LESS_THAN "lessThan"
#define ELEMENT_XESAM_LESS_OR_EQUAL "lessOrEqual"
-/* extension operators - "contains" does a substring or full text match, "in_Set" does string in list match */
+/* Extension operators - "contains" does a substring or full text
+ * match, "in_Set" does string in list match
+ */
#define ELEMENT_XESAM_CONTAINS "contains"
#define ELEMENT_XESAM_REGEX "regex"
#define ELEMENT_XESAM_STARTS_WITH "startsWith"
#define ELEMENT_XESAM_IN_SET "inSet"
-/* types */
+/* Types */
#define ELEMENT_XESAM_INTEGER "integer"
#define ELEMENT_XESAM_DATE "date"
#define ELEMENT_XESAM_STRING "string"
@@ -74,13 +77,11 @@
#define ELEMENT_IS(name) (strcmp (element_name, (name)) == 0)
-
enum {
NO_ERROR,
PARSE_ERROR,
};
-
typedef enum {
STATE_START,
STATE_QUERY,
@@ -136,56 +137,52 @@
OP_STARTS
} Operators;
-
typedef enum {
LOP_NONE,
LOP_AND,
LOP_OR
} LogicOperators;
-
typedef struct {
- GMarkupParseContext *context;
- GMarkupParser *parser;
- GSList *stack;
- GSList *fields;
- gboolean query_okay;
- int statement_count;
- LogicOperators current_logic_operator;
- Operators current_operator;
- char *current_field;
- char *current_value;
- DBConnection *db_con;
- GString *sql_from;
- GString *sql_join;
- GString *sql_where;
- char *service;
+ GMarkupParseContext *context;
+ GMarkupParser *parser;
+ GSList *stack;
+ GSList *fields;
+ gboolean query_okay;
+ gint statement_count;
+ LogicOperators current_logic_operator;
+ Operators current_operator;
+ gchar *current_field;
+ gchar *current_value;
+ TrackerDBInterface *iface;
+ GString *sql_select;
+ GString *sql_from;
+ GString *sql_where;
+ GString *sql_order;
+ GString *sql_join;
+ gchar *service;
} ParserData;
-static GQuark error_quark;
-
-static void start_element_handler (GMarkupParseContext *context,
- const gchar *element_name,
- const gchar **attribute_names,
- const gchar **attribute_values,
- gpointer user_data,
- GError **error);
-
-static void end_element_handler (GMarkupParseContext *context,
- const gchar *element_name,
- gpointer user_data,
- GError **error);
-
-static void text_handler (GMarkupParseContext *context,
- const gchar *text,
- gsize text_len,
- gpointer user_data,
- GError **error);
-
-static void error_handler (GMarkupParseContext *context,
- GError *error,
- gpointer user_data);
+static void start_element_handler (GMarkupParseContext *context,
+ const gchar *element_name,
+ const gchar **attribute_names,
+ const gchar **attribute_values,
+ gpointer user_data,
+ GError **error);
+static void end_element_handler (GMarkupParseContext *context,
+ const gchar *element_name,
+ gpointer user_data,
+ GError **error);
+static void text_handler (GMarkupParseContext *context,
+ const gchar *text,
+ gsize text_len,
+ gpointer user_data,
+ GError **error);
+static void error_handler (GMarkupParseContext *context,
+ GError *error,
+ gpointer user_data);
+static GQuark error_quark;
static gboolean
is_operator (ParseState state)
@@ -226,7 +223,6 @@
state == STATE_OR;
}
-
static gboolean
is_end_logic (ParseState state)
{
@@ -235,7 +231,6 @@
state == STATE_END_OR;
}
-
static void
set_error (GError **err,
GMarkupParseContext *context,
@@ -243,9 +238,9 @@
const char *format,
...)
{
- int line, ch;
- va_list args;
- char *str;
+ gint line, ch;
+ va_list args;
+ gchar *str;
g_markup_parse_context_get_position (context, &line, &ch);
@@ -253,14 +248,22 @@
str = g_strdup_vprintf (format, args);
va_end (args);
- g_set_error (err, error_quark, error_code, "Line %d character %d: %s", line, ch, str);
+ g_set_error (err,
+ error_quark,
+ error_code,
+ "Line %d character %d: %s",
+ line,
+ ch,
+ str);
g_free (str);
}
-
static gboolean
-set_error_on_fail (gboolean condition, GMarkupParseContext *context, const char *msg, GError **err)
+set_error_on_fail (gboolean condition,
+ GMarkupParseContext *context,
+ const gchar *msg,
+ GError **err)
{
if (!condition) {
set_error (err, context, 1, msg);
@@ -270,13 +273,12 @@
return FALSE;
}
-
-static const char *
-get_attribute_value (const char *name,
- const char **names,
- const char **values)
+static const gchar *
+get_attribute_value (const gchar *name,
+ const gchar **names,
+ const gchar **values)
{
- int i;
+ gint i;
i = 0;
@@ -290,45 +292,42 @@
return NULL;
}
-
-static const char *
-get_attribute_value_required (GMarkupParseContext *context,
- const char *tag,
- const char *name,
- const char **names,
- const char **values,
+static const gchar *
+get_attribute_value_required (GMarkupParseContext *context,
+ const gchar *tag,
+ const gchar *name,
+ const gchar **names,
+ const gchar **values,
GError **error)
{
- const char *value;
+ const gchar *value;
value = get_attribute_value (name, names, values);
if (!value) {
- set_error (error, context, PARSE_ERROR,
+ set_error (error,
+ context,
+ PARSE_ERROR,
"%s must have \"%s\" attribute",
- tag, name);
+ tag,
+ name);
}
return value;
}
-
static void
-push_stack (ParserData *data, ParseState state)
+push_stack (ParserData *data, ParseState state)
{
data->stack = g_slist_prepend (data->stack, GINT_TO_POINTER (state));
}
-
static void
pop_stack (ParserData *data)
{
- g_return_if_fail (data->stack != NULL);
-
data->stack = g_slist_remove (data->stack, data->stack->data);
}
-
static ParseState
peek_state (ParserData *data)
{
@@ -337,12 +336,10 @@
return GPOINTER_TO_INT (data->stack->data);
}
-
static void
pop_stack_until (ParserData *data, ParseState state)
{
while (data->stack != NULL) {
-
if (state == peek_state (data)) {
pop_stack (data);
break;
@@ -352,13 +349,11 @@
}
}
-
-
static GList *
-add_metadata_field (ParserData *data,
- const char *xesam_name,
- gboolean is_select,
- gboolean is_condition)
+add_metadata_field (ParserData *data,
+ const gchar *xesam_name,
+ gboolean is_select,
+ gboolean is_condition)
{
TrackerDBResultSet *result_set;
TrackerFieldData *field_data;
@@ -374,7 +369,7 @@
/* Do the xesam mapping */
- result_set = tracker_get_xesam_metadata_names (data->db_con, xesam_name);
+ result_set = tracker_db_xesam_get_metadata_names (data->iface, xesam_name);
if (!result_set) {
return NULL;
}
@@ -407,7 +402,7 @@
}
if (!field_exists) {
- field_data = tracker_db_get_metadata_field (data->db_con,
+ field_data = tracker_db_get_metadata_field (data->iface,
data->service,
field_name,
g_slist_length (data->fields),
@@ -426,7 +421,6 @@
return reply;
}
-
static void
start_element_handler (GMarkupParseContext *context,
const gchar *element_name,
@@ -445,108 +439,130 @@
const char *content;
const char *source;
- if (set_error_on_fail ((state == STATE_START), context, "Query element not expected here", error)) {
+ if (set_error_on_fail (state == STATE_START,
+ context,
+ "Query element not expected here",
+ error)) {
return;
}
- content = get_attribute_value ("content", attribute_names, attribute_values);
- source = get_attribute_value ("source", attribute_names, attribute_values);
-
- /* FIXME This is a bit clumsy, check that OK and get the defaults (all) from somewhere. CHECK MEMORY LEAKS! */
+ content = get_attribute_value ("content",
+ attribute_names,
+ attribute_values);
+ source = get_attribute_value ("source",
+ attribute_names,
+ attribute_values);
+
+ /* FIXME This is a bit clumsy, check that OK and get
+ * the defaults (all) from somewhere. CHECK MEMORY
+ * LEAKS!
+ */
if(content) {
- TrackerDBResultSet *result_set;
- gboolean valid = TRUE;
- result_set = tracker_get_xesam_service_names (data->db_con, content);
-
- if (result_set) {
-
- while (valid) {
+ TrackerDBResultSet *result_set;
- }
-
- }
-
- content = strdup(content);
+ result_set = tracker_db_xesam_get_service_names (data->iface,
+ content);
+
+ content = g_strdup (content);
} else {
- content = strdup("Files");
+ content = g_strdup ("Files");
}
- // FIXME Fix the service problems.
- data->service = strdup("Files");
+ data->service = g_strdup ("Files");
- if(source) {
+ if (source) {
} else {
- // FIXME
+ /* FIXME */
source = "Files";
}
- g_string_append_printf (data->sql_where, "\n WHERE (S.ServiceTypeID in (select TypeId from ServiceTypes where TypeName = '%s' or Parent = '%s')) AND ", content, source);
+ g_string_append_printf (data->sql_where,
+ "\n WHERE (S.ServiceTypeID in (select TypeId from ServiceTypes where TypeName = '%s' or Parent = '%s')) AND ",
+ content,
+ source);
push_stack (data, STATE_QUERY);
-
} else if (ELEMENT_IS (ELEMENT_XESAM_FIELD)) {
- const char *name;
+ const gchar *name;
- if (set_error_on_fail ( is_operator (state), context, "Field element not expected here", error)) {
+ if (set_error_on_fail (is_operator (state),
+ context,
+ "Field element not expected here",
+ error)) {
return;
}
- name = get_attribute_value_required (context, "<field>", "name",
- attribute_names, attribute_values,
+ name = get_attribute_value_required (context,
+ "<field>",
+ "name",
+ attribute_names,
+ attribute_values,
error);
if (!name) {
return;
} else {
-
- if (data->current_operator == OP_NONE ) {
- set_error (error, context, PARSE_ERROR, "no operator found for field \"%s\"", name);
+ if (data->current_operator == OP_NONE) {
+ set_error (error,
+ context,
+ PARSE_ERROR,
+ "no operator found for field \"%s\"",
+ name);
return;
}
- data->current_field = g_strdup (name);
-
+ data->current_field = g_strdup (name);
push_stack (data, STATE_FIELD);
}
-
} else if (ELEMENT_IS (ELEMENT_XESAM_AND)) {
- const char *negate;
+ const gchar *negate;
- if (set_error_on_fail ((state == STATE_QUERY || is_logic (state) || is_end_logic (state) || is_end_operator (state)),
- context, "AND element not expected here", error)) {
+ if (set_error_on_fail (state == STATE_QUERY ||
+ is_logic (state) ||
+ is_end_logic (state) ||
+ is_end_operator (state),
+ context,
+ "AND element not expected here",
+ error)) {
return;
}
if (data->statement_count > 1) {
- if (data->current_logic_operator == LOP_AND) {
- data->sql_where = g_string_append (data->sql_where, " AND ");
- } else {
- if (data->current_logic_operator == LOP_OR) {
- data->sql_where = g_string_append (data->sql_where, " OR ");
- }
- }
+ if (data->current_logic_operator == LOP_AND) {
+ data->sql_where = g_string_append (data->sql_where, " AND ");
+ } else {
+ if (data->current_logic_operator == LOP_OR) {
+ data->sql_where = g_string_append (data->sql_where, " OR ");
+ }
+ }
}
+
+ negate = get_attribute_value ("negate",
+ attribute_names,
+ attribute_values);
- negate = get_attribute_value ("negate", attribute_names, attribute_values);
- if (negate&&(!strcmp(negate,"true")))
- {
- data->sql_where = g_string_append (data->sql_where, " NOT ");
+ if (negate && !strcmp (negate,"true")) {
+ data->sql_where = g_string_append (data->sql_where, " NOT ");
}
data->statement_count = 0;
data->sql_where = g_string_append (data->sql_where, " ( ");
data->current_logic_operator = LOP_AND;
push_stack (data, STATE_AND);
-
} else if (ELEMENT_IS (ELEMENT_XESAM_OR)) {
- const char *negate;
-
- if (set_error_on_fail ((state == STATE_QUERY || is_logic (state) || is_end_logic (state) || is_end_operator (state)),
- context, "OR element not expected here", error)) {
+ const gchar *negate;
+
+ if (set_error_on_fail (state == STATE_QUERY ||
+ is_logic (state) ||
+ is_end_logic (state) ||
+ is_end_operator (state),
+ context,
+ "OR element not expected here",
+ error)) {
return;
}
-
+
if (data->statement_count > 1) {
if (data->current_logic_operator == LOP_AND) {
data->sql_where = g_string_append (data->sql_where, " AND ");
@@ -556,236 +572,280 @@
}
}
}
-
- negate = get_attribute_value ("negate", attribute_names, attribute_values);
- if (negate&&(!strcmp(negate,"true")))
- {
- data->sql_where = g_string_append (data->sql_where, " NOT ");
+
+ negate = get_attribute_value ("negate",
+ attribute_names,
+ attribute_values);
+
+ if (negate && !strcmp (negate,"true")) {
+ data->sql_where = g_string_append (data->sql_where, " NOT ");
}
-
+
data->statement_count = 0;
data->sql_where = g_string_append (data->sql_where, " ( ");
data->current_logic_operator = LOP_OR;
push_stack (data, STATE_OR);
-
} else if (ELEMENT_IS (ELEMENT_XESAM_EQUALS)) {
- const char *negate;
-
- if (set_error_on_fail ( state == STATE_QUERY || is_logic (state) ||
- ((data->current_logic_operator == LOP_AND || data->current_logic_operator == LOP_OR)
- && is_end_operator (state)),
- context, "EQUALS element not expected here", error)) {
- return;
- }
-
- negate = get_attribute_value ("negate", attribute_names, attribute_values);
- if (negate&&(!strcmp(negate,"true")))
- {
- data->sql_where = g_string_append (data->sql_where, " NOT ");
- }
-
- data->current_operator = OP_EQUALS;
- push_stack (data, STATE_EQUALS);
+ const gchar *negate;
+ if (set_error_on_fail (state == STATE_QUERY ||
+ is_logic (state) ||
+ ((data->current_logic_operator == LOP_AND ||
+ data->current_logic_operator == LOP_OR) &&
+ is_end_operator (state)),
+ context,
+ "EQUALS element not expected here",
+ error)) {
+ return;
+ }
+
+ negate = get_attribute_value ("negate",
+ attribute_names,
+ attribute_values);
+
+ if (negate && !strcmp (negate,"true")) {
+ data->sql_where = g_string_append (data->sql_where, " NOT ");
+ }
+
+ data->current_operator = OP_EQUALS;
+ push_stack (data, STATE_EQUALS);
} else if (ELEMENT_IS (ELEMENT_XESAM_GREATER_THAN)) {
- const char *negate;
+ const gchar *negate;
- if (set_error_on_fail ( state == STATE_QUERY || is_logic (state) ||
- ((data->current_logic_operator == LOP_AND || data->current_logic_operator == LOP_OR)
- && is_end_operator (state)),
- context, "GREATERTHAN element not expected here", error)) {
+ if (set_error_on_fail (state == STATE_QUERY ||
+ is_logic (state) ||
+ ((data->current_logic_operator == LOP_AND ||
+ data->current_logic_operator == LOP_OR) &&
+ is_end_operator (state)),
+ context,
+ "GREATERTHAN element not expected here",
+ error)) {
return;
}
- negate = get_attribute_value ("negate", attribute_names, attribute_values);
- if (negate&&(!strcmp(negate,"true")))
- {
- data->sql_where = g_string_append (data->sql_where, " NOT ");
- }
+ negate = get_attribute_value ("negate",
+ attribute_names,
+ attribute_values);
+ if (negate && !strcmp (negate,"true")) {
+ data->sql_where = g_string_append (data->sql_where, " NOT ");
+ }
+
data->current_operator = OP_GREATER;
push_stack (data, STATE_GREATER_THAN);
-
} else if (ELEMENT_IS (ELEMENT_XESAM_GREATER_OR_EQUAL)) {
- const char *negate;
+ const gchar *negate;
- if (set_error_on_fail ( state == STATE_QUERY || is_logic (state) ||
- ((data->current_logic_operator == LOP_AND || data->current_logic_operator == LOP_OR)
- && is_end_operator (state)),
- context, "GREATEROREQUAL element not expected here", error)) {
+ if (set_error_on_fail (state == STATE_QUERY ||
+ is_logic (state) ||
+ ((data->current_logic_operator == LOP_AND ||
+ data->current_logic_operator == LOP_OR) &&
+ is_end_operator (state)),
+ context,
+ "GREATEROREQUAL element not expected here",
+ error)) {
return;
}
- negate = get_attribute_value ("negate", attribute_names, attribute_values);
- if (negate&&(!strcmp(negate,"true")))
- {
- data->sql_where = g_string_append (data->sql_where, " NOT ");
+ negate = get_attribute_value ("negate",
+ attribute_names,
+ attribute_values);
+
+ if (negate && !strcmp(negate,"true")) {
+ data->sql_where = g_string_append (data->sql_where, " NOT ");
}
data->current_operator = OP_GREATER_EQUAL;
push_stack (data, STATE_GREATER_OR_EQUAL);
+ } else if (ELEMENT_IS (ELEMENT_XESAM_LESS_THAN)) {
+ const gchar *negate;
- } else if (ELEMENT_IS (ELEMENT_XESAM_LESS_THAN )) {
- const char *negate;
-
- if (set_error_on_fail ( state == STATE_QUERY || is_logic (state) ||
- ((data->current_logic_operator == LOP_AND || data->current_logic_operator == LOP_OR)
- && is_end_operator (state)),
- context, "LESSTHAN element not expected here", error)) {
+ if (set_error_on_fail (state == STATE_QUERY ||
+ is_logic (state) ||
+ ((data->current_logic_operator == LOP_AND ||
+ data->current_logic_operator == LOP_OR) &&
+ is_end_operator (state)),
+ context,
+ "LESSTHAN element not expected here",
+ error)) {
return;
}
- negate = get_attribute_value ("negate", attribute_names, attribute_values);
- if (negate&&(!strcmp(negate,"true")))
- {
- data->sql_where = g_string_append (data->sql_where, " NOT ");
+ negate = get_attribute_value ("negate",
+ attribute_names,
+ attribute_values);
+ if (negate && !strcmp (negate,"true")) {
+ data->sql_where = g_string_append (data->sql_where, " NOT ");
}
data->current_operator = OP_LESS;
push_stack (data, STATE_LESS_THAN);
+ } else if (ELEMENT_IS (ELEMENT_XESAM_LESS_OR_EQUAL)) {
+ const gchar *negate;
- } else if (ELEMENT_IS (ELEMENT_XESAM_LESS_OR_EQUAL )) {
- const char *negate;
-
-
- if (set_error_on_fail ( state == STATE_QUERY || is_logic (state) ||
- ((data->current_logic_operator == LOP_AND || data->current_logic_operator == LOP_OR)
- && is_end_operator (state)),
- context, "LESSOREQUAL element not expected here", error)) {
+ if (set_error_on_fail (state == STATE_QUERY ||
+ is_logic (state) ||
+ ((data->current_logic_operator == LOP_AND ||
+ data->current_logic_operator == LOP_OR) &&
+ is_end_operator (state)),
+ context,
+ "LESSOREQUAL element not expected here",
+ error)) {
return;
}
- negate = get_attribute_value ("negate", attribute_names, attribute_values);
- if (negate&&(!strcmp(negate,"true")))
- {
- data->sql_where = g_string_append (data->sql_where, " NOT ");
+ negate = get_attribute_value ("negate",
+ attribute_names,
+ attribute_values);
+
+ if (negate && !strcmp(negate,"true")) {
+ data->sql_where = g_string_append (data->sql_where, " NOT ");
}
data->current_operator = OP_LESS_EQUAL;
push_stack (data, STATE_LESS_OR_EQUAL);
-
} else if (ELEMENT_IS (ELEMENT_XESAM_CONTAINS)) {
- const char *negate;
+ const gchar *negate;
- if (set_error_on_fail ( state == STATE_QUERY || is_logic (state) ||
- ((data->current_logic_operator == LOP_AND || data->current_logic_operator == LOP_OR)
- && is_end_operator (state)),
- context, "CONTAINS element not expected here", error)) {
+ if (set_error_on_fail (state == STATE_QUERY ||
+ is_logic (state) ||
+ ((data->current_logic_operator == LOP_AND ||
+ data->current_logic_operator == LOP_OR) &&
+ is_end_operator (state)),
+ context,
+ "CONTAINS element not expected here",
+ error)) {
return;
}
- negate = get_attribute_value ("negate", attribute_names, attribute_values);
- if (negate&&(!strcmp(negate,"true")))
- {
- data->sql_where = g_string_append (data->sql_where, " NOT ");
+ negate = get_attribute_value ("negate",
+ attribute_names,
+ attribute_values);
+
+ if (negate && !strcmp(negate,"true")) {
+ data->sql_where = g_string_append (data->sql_where, " NOT ");
}
data->current_operator = OP_CONTAINS;
push_stack (data, STATE_CONTAINS);
-
} else if (ELEMENT_IS (ELEMENT_XESAM_REGEX)) {
- const char *negate;
+ const gchar *negate;
- if (set_error_on_fail ( state == STATE_QUERY || is_logic (state) ||
- ((data->current_logic_operator == LOP_AND || data->current_logic_operator == LOP_OR)
- && is_end_operator (state)),
- context, "REGEX element not expected here", error)) {
+ if (set_error_on_fail (state == STATE_QUERY ||
+ is_logic (state) ||
+ ((data->current_logic_operator == LOP_AND ||
+ data->current_logic_operator == LOP_OR) &&
+ is_end_operator (state)),
+ context,
+ "REGEX element not expected here",
+ error)) {
return;
}
- negate = get_attribute_value ("negate", attribute_names, attribute_values);
- if (negate&&(!strcmp(negate,"true")))
- {
- data->sql_where = g_string_append (data->sql_where, " NOT ");
+ negate = get_attribute_value ("negate",
+ attribute_names,
+ attribute_values);
+ if (negate && !strcmp (negate,"true")) {
+ data->sql_where = g_string_append (data->sql_where, " NOT ");
}
-
+
data->current_operator = OP_REGEX;
push_stack (data, STATE_REGEX);
-
} else if (ELEMENT_IS (ELEMENT_XESAM_STARTS_WITH)) {
- const char *negate;
+ const gchar *negate;
- if (set_error_on_fail ( state == STATE_QUERY || is_logic (state) ||
- ((data->current_logic_operator == LOP_AND || data->current_logic_operator == LOP_OR)
- && is_end_operator (state)),
- context, "STARTSWITH element not expected here", error)) {
+ if (set_error_on_fail (state == STATE_QUERY ||
+ is_logic (state) ||
+ ((data->current_logic_operator == LOP_AND ||
+ data->current_logic_operator == LOP_OR) &&
+ is_end_operator (state)),
+ context,
+ "STARTSWITH element not expected here",
+ error)) {
return;
}
- negate = get_attribute_value ("negate", attribute_names, attribute_values);
- if (negate&&(!strcmp(negate,"true")))
- {
- data->sql_where = g_string_append (data->sql_where, " NOT ");
+ negate = get_attribute_value ("negate",
+ attribute_names,
+ attribute_values);
+
+ if (negate && !strcmp(negate,"true")) {
+ data->sql_where = g_string_append (data->sql_where, " NOT ");
}
data->current_operator = OP_STARTS;
push_stack (data, STATE_STARTS_WITH);
-
} else if (ELEMENT_IS (ELEMENT_XESAM_IN_SET)) {
- const char *negate;
+ const gchar *negate;
- if (set_error_on_fail ( state == STATE_QUERY || is_logic (state) ||
- ((data->current_logic_operator == LOP_AND || data->current_logic_operator == LOP_OR)
- && is_end_operator (state)),
- context, "IN SET element not expected here", error)) {
+ if (set_error_on_fail (state == STATE_QUERY ||
+ is_logic (state) ||
+ ((data->current_logic_operator == LOP_AND ||
+ data->current_logic_operator == LOP_OR) &&
+ is_end_operator (state)),
+ context,
+ "IN SET element not expected here",
+ error)) {
return;
}
- negate = get_attribute_value ("negate", attribute_names, attribute_values);
- if (negate&&(!strcmp(negate,"true")))
- {
- data->sql_where = g_string_append (data->sql_where, " NOT ");
+ negate = get_attribute_value ("negate",
+ attribute_names,
+ attribute_values);
+
+ if (negate && !strcmp(negate,"true")) {
+ data->sql_where = g_string_append (data->sql_where, " NOT ");
}
data->current_operator = OP_SET;
push_stack (data, STATE_IN_SET);
-
-
} else if (ELEMENT_IS (ELEMENT_XESAM_INTEGER)) {
-
- if (set_error_on_fail (state == STATE_FIELD, context, "INTEGER element not expected here", error)) {
+ if (set_error_on_fail (state == STATE_FIELD,
+ context,
+ "INTEGER element not expected here",
+ error)) {
return;
}
push_stack (data, STATE_INTEGER);
-
-
} else if (ELEMENT_IS (ELEMENT_XESAM_DATE)) {
-
- if (set_error_on_fail (state == STATE_FIELD, context, "DATE element not expected here", error)) {
+ if (set_error_on_fail (state == STATE_FIELD,
+ context,
+ "DATE element not expected here",
+ error)) {
return;
}
push_stack (data, STATE_DATE);
-
-
} else if (ELEMENT_IS (ELEMENT_XESAM_STRING)) {
-
- if (set_error_on_fail (state == STATE_FIELD, context, "STRING element not expected here", error)) {
+ if (set_error_on_fail (state == STATE_FIELD,
+ context,
+ "STRING element not expected here",
+ error)) {
return;
}
push_stack (data, STATE_STRING);
-
} else if (ELEMENT_IS (ELEMENT_XESAM_FLOAT)) {
-
- if (set_error_on_fail (state == STATE_FIELD, context, "FLOAT element not expected here", error)) {
+ if (set_error_on_fail (state == STATE_FIELD,
+ context,
+ "FLOAT element not expected here",
+ error)) {
return;
}
push_stack (data, STATE_FLOAT);
-
} else if (ELEMENT_IS (ELEMENT_XESAM_BOOLEAN)) {
-
- if (set_error_on_fail (state == STATE_FIELD, context, "BOOLEAN element not expected here", error)) {
+ if (set_error_on_fail (state == STATE_FIELD,
+ context,
+ "BOOLEAN element not expected here",
+ error)) {
return;
}
-
push_stack (data, STATE_BOOLEAN);
}
}
-
static char *
get_value (const char *value, gboolean quote)
{
@@ -796,7 +856,6 @@
}
}
-
static gboolean
build_sql (ParserData *data)
{
@@ -1204,16 +1263,24 @@
g_critical ("Failed to parse RDF query, %s", error->message);
}
-
void
-tracker_xesam_query_to_sql (DBConnection *db_con, const char *query, gchar **from, gchar **join, gchar **where, GError **error)
+tracker_xesam_query_to_sql (TrackerDBInterface *iface,
+ const gchar *query,
+ gchar **from,
+ gchar **join,
+ gchar **where,
+ GError **error)
{
- static gboolean inited = FALSE;
- ParserData data;
- char *result;
- char *table_name;
-
- g_return_if_fail (query != NULL);
+ static gboolean inited = FALSE;
+ ParserData data;
+ gchar *result;
+ gchar *table_name;
+
+ g_return_if_fail (TRACKER_IS_DB_INTERFACE (iface));
+ g_return_if_fail (query != NULL);
+ g_return_if_fail (from != NULL);
+ g_return_if_fail (join != NULL);
+ g_return_if_fail (where != NULL);
if (!inited) {
error_quark = g_quark_from_static_string ("XESAM-parser-error-quark");
@@ -1221,7 +1288,7 @@
}
memset (&data, 0, sizeof (data));
- data.db_con = db_con;
+ data.iface = iface;
data.statement_count = 0;
table_name = "Services";
@@ -1249,7 +1316,6 @@
result = NULL;
if (!g_markup_parse_context_parse (data.context, query, -1, error)) {
-
g_string_free (data.sql_from, TRUE);
g_string_free (data.sql_where, TRUE);
g_string_free (data.sql_join, TRUE);
@@ -1257,7 +1323,6 @@
*from = NULL;
*join = NULL;
*where = NULL;
-
} else {
GSList *l;
@@ -1275,8 +1340,8 @@
} else {
gchar *related_metadata;
- related_metadata = tracker_get_related_metadata_names (db_con,
- tracker_field_data_get_field_name (l->data));
+ related_metadata = tracker_db_metadata_get_related_names (iface,
+ tracker_field_data_get_field_name (l->data));
g_string_append_printf (data.sql_join,
"\n INNER JOIN %s %s ON (S.ID = %s.ServiceID and %s.MetaDataID in (%s)) ",
tracker_field_data_get_table_name (l->data),
@@ -1295,7 +1360,6 @@
g_string_free (data.sql_from, TRUE);
g_string_free (data.sql_join, TRUE);
g_string_free (data.sql_where, TRUE);
-
}
g_slist_foreach (data.fields, (GFunc) g_object_unref, NULL);
Modified: branches/xesam-support/src/trackerd/tracker-xesam-query.h
==============================================================================
--- branches/xesam-support/src/trackerd/tracker-xesam-query.h (original)
+++ branches/xesam-support/src/trackerd/tracker-xesam-query.h Mon Jun 9 15:41:07 2008
@@ -1,4 +1,5 @@
-/* Tracker - indexer and metadata database engine
+/* -*- Mode: C; tab-width: 8; indent-tabs-mode: t; c-basic-offset: 8 -*- */
+/*
*
* Copyright (C) 2008, Nokia
* Authors: Ottela Mikael, (mikael ottela ixonos com)
@@ -19,20 +20,22 @@
* Boston, MA 02110-1301, USA.
*/
+#ifndef __TRACKERD_XESAM_QUERY_H__
+#define __TRACKERD_XESAM_QUERY_H__
+#include <glib.h>
-#ifndef _TRACKER_XESAM_QUERY_H_
-#define _TRACKER_XESAM_QUERY_H_
+#include <libtracker-db/tracker-db-manager.h>
-#include <glib.h>
+G_BEGIN_DECLS
-#include "tracker-db.h"
+void tracker_xesam_query_to_sql (TrackerDBInterface *iface,
+ const gchar *query,
+ gchar **from,
+ gchar **join,
+ gchar **where,
+ GError **error);
-void tracker_xesam_query_to_sql (DBConnection *db_con,
- const char *query,
- gchar **from,
- gchar **join,
- gchar **where,
- GError **error);
+G_END_DECLS
-#endif
+#endif /* __TRACKERD_XESAM_QUERY_H__ */
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 Mon Jun 9 15:41:07 2008
@@ -38,8 +38,6 @@
#include "tracker-indexer.h"
#include "tracker-marshal.h"
-#define GET_PRIV(obj) (G_TYPE_INSTANCE_GET_PRIVATE ((obj), TRACKER_TYPE_XESAM, TrackerXesamPriv))
-
enum {
XESAM_HITS_ADDED,
XESAM_HITS_REMOVED,
@@ -49,95 +47,14 @@
XESAM_LAST_SIGNAL
};
-enum {
- PROP_0,
- PROP_DB_CONNECTION,
-};
-
-typedef struct {
- DBConnection *db_con;
-} TrackerXesamPriv;
-
static GHashTable *sessions = NULL;
static guint signals[XESAM_LAST_SIGNAL] = {0};
G_DEFINE_TYPE(TrackerXesam, tracker_xesam, G_TYPE_OBJECT)
static void
-xesam_search_finalize (GObject *object)
-{
- G_OBJECT_CLASS (tracker_xesam_parent_class)->finalize (object);
-}
-
-void
-tracker_xesam_set_db_connection (TrackerXesam *object,
- DBConnection *db_con)
-{
- TrackerXesamPriv *priv;
-
- priv = GET_PRIV (object);
-
- priv->db_con = db_con;
-
- g_object_notify (G_OBJECT (object), "db-connection");
-}
-
-static void
-xesam_get_property (GObject *object,
- guint prop_id,
- GValue *value,
- GParamSpec *pspec)
-{
- TrackerXesamPriv *priv;
-
- priv = GET_PRIV (object);
-
- switch (prop_id) {
- case PROP_DB_CONNECTION:
- g_value_set_pointer (value, priv->db_con);
- break;
- default:
- G_OBJECT_WARN_INVALID_PROPERTY_ID (object, prop_id, pspec);
- break;
- };
-}
-
-static void
-xesam_set_property (GObject *object,
- guint param_id,
- const GValue *value,
- GParamSpec *pspec)
-{
- switch (param_id) {
- case PROP_DB_CONNECTION:
- tracker_xesam_set_db_connection (TRACKER_XESAM (object),
- g_value_get_pointer (value));
- break;
- default:
- G_OBJECT_WARN_INVALID_PROPERTY_ID (object, param_id, pspec);
- break;
- };
-}
-
-static void
tracker_xesam_class_init (TrackerXesamClass *klass)
{
- GObjectClass *object_class;
-
- object_class = G_OBJECT_CLASS (klass);
-
- object_class->finalize = xesam_search_finalize;
-
- object_class->set_property = xesam_set_property;
- object_class->get_property = xesam_get_property;
-
- g_object_class_install_property (object_class,
- PROP_DB_CONNECTION,
- g_param_spec_pointer ("db-connection",
- "DB connection",
- "Database connection to use in transactions",
- G_PARAM_WRITABLE|G_PARAM_READABLE));
-
signals[XESAM_HITS_ADDED] =
g_signal_new ("hits-added",
G_TYPE_FROM_CLASS (klass),
@@ -196,8 +113,6 @@
G_TYPE_NONE,
1,
G_TYPE_STRV);
-
- g_type_class_add_private (object_class, sizeof (TrackerXesamPriv));
}
static void
@@ -206,11 +121,9 @@
}
TrackerXesam *
-tracker_xesam_new (DBConnection *db_con)
+tracker_xesam_new (void)
{
- return g_object_new (TRACKER_TYPE_XESAM,
- "db-connection", db_con,
- NULL);
+ return g_object_new (TRACKER_TYPE_XESAM, NULL);
}
static void
Modified: branches/xesam-support/src/trackerd/tracker-xesam.h
==============================================================================
--- branches/xesam-support/src/trackerd/tracker-xesam.h (original)
+++ branches/xesam-support/src/trackerd/tracker-xesam.h Mon Jun 9 15:41:07 2008
@@ -26,7 +26,7 @@
#include <dbus/dbus-glib-bindings.h>
-#include "tracker-db-sqlite.h"
+#include "tracker-db.h"
#include "tracker-indexer.h"
#define TRACKER_XESAM_SERVICE "org.freedesktop.xesam.searcher"
@@ -54,7 +54,7 @@
};
GType tracker_xesam_get_type (void);
-TrackerXesam *tracker_xesam_new (DBConnection *db_con);
+TrackerXesam *tracker_xesam_new (void);
void tracker_xesam_new_session (TrackerXesam *object,
DBusGMethodInvocation *context);
void tracker_xesam_set_property (TrackerXesam *object,
@@ -111,8 +111,6 @@
const char *prev_owner,
const char *new_owner,
TrackerXesam *self);
-void tracker_xesam_set_db_connection (TrackerXesam *object,
- DBConnection *db_con);
G_END_DECLS
[
Date Prev][
Date Next] [
Thread Prev][
Thread Next]
[
Thread Index]
[
Date Index]
[
Author Index]