tracker r1930 - in branches/indexer-split: . src/libtracker-common src/libtracker-db src/tracker-indexer
- From: carlosg svn gnome org
- To: svn-commits-list gnome org
- Subject: tracker r1930 - in branches/indexer-split: . src/libtracker-common src/libtracker-db src/tracker-indexer
- Date: Thu, 24 Jul 2008 16:02:40 +0000 (UTC)
Author: carlosg
Date: Thu Jul 24 16:02:40 2008
New Revision: 1930
URL: http://svn.gnome.org/viewvc/tracker?rev=1930&view=rev
Log:
2008-07-24 Carlos Garnacho <carlos imendio com>
Store things in the correct DB based on the service type.
* src/libtracker-common/tracker-ontology.c
(tracker_ontology_get_db_for_service_type): Return
TRACKER_DB_TYPE_FILES by default, as most of the services want to end
up there.
* src/libtracker-db/tracker-db-manager.[ch]
(tracker_db_manager_get_db_interface_by_type): New function, returns a
non-attached interface given the service type and the data content we
want to deal with (contents/metadata).
* src/tracker-indexer/tracker-indexer-db.[ch]: Pass the TrackerService
instead of a TrackerDBInterface where it's relevant, so functions can
guess the correct database based on it.
* src/tracker-indexer/tracker-indexer.c: Adapt to API changes in
tracker-indexer-db.[ch].
Modified:
branches/indexer-split/ChangeLog
branches/indexer-split/src/libtracker-common/tracker-ontology.c
branches/indexer-split/src/libtracker-db/tracker-db-manager.c
branches/indexer-split/src/libtracker-db/tracker-db-manager.h
branches/indexer-split/src/tracker-indexer/tracker-indexer-db.c
branches/indexer-split/src/tracker-indexer/tracker-indexer-db.h
branches/indexer-split/src/tracker-indexer/tracker-indexer.c
Modified: branches/indexer-split/src/libtracker-common/tracker-ontology.c
==============================================================================
--- branches/indexer-split/src/libtracker-common/tracker-ontology.c (original)
+++ branches/indexer-split/src/libtracker-common/tracker-ontology.c Thu Jul 24 16:02:40 2008
@@ -334,11 +334,11 @@
TrackerDBType type;
gchar *str;
- type = TRACKER_DB_TYPE_DATA;
+ type = TRACKER_DB_TYPE_FILES;
str = g_utf8_strdown (service_str, -1);
- if (g_str_has_prefix (str, "emails") ||
- g_str_has_prefix (str, "attachments")) {
+ if (g_str_has_suffix (str, "emails") ||
+ g_str_has_suffix (str, "attachments")) {
type = TRACKER_DB_TYPE_EMAIL;
} else if (g_str_has_prefix (str, "files")) {
type = TRACKER_DB_TYPE_FILES;
Modified: branches/indexer-split/src/libtracker-db/tracker-db-manager.c
==============================================================================
--- branches/indexer-split/src/libtracker-db/tracker-db-manager.c (original)
+++ branches/indexer-split/src/libtracker-db/tracker-db-manager.c Thu Jul 24 16:02:40 2008
@@ -2583,6 +2583,43 @@
return iface;
}
+TrackerDBInterface *
+tracker_db_manager_get_db_interface_by_type (const gchar *service,
+ TrackerDBContentType content_type)
+{
+ TrackerDBType type;
+ TrackerDB db;
+
+ g_return_val_if_fail (initialized != FALSE, NULL);
+ g_return_val_if_fail (service != NULL, NULL);
+
+ type = tracker_ontology_get_db_for_service_type (service);
+
+ switch (type) {
+ case TRACKER_DB_TYPE_EMAIL:
+ if (content_type == TRACKER_DB_CONTENT_TYPE_METADATA) {
+ db = TRACKER_DB_EMAIL_METADATA;
+ } else {
+ db = TRACKER_DB_EMAIL_CONTENTS;
+ }
+
+ break;
+ case TRACKER_DB_TYPE_FILES:
+ if (content_type == TRACKER_DB_CONTENT_TYPE_METADATA) {
+ db = TRACKER_DB_FILE_METADATA;
+ } else {
+ db = TRACKER_DB_FILE_CONTENTS;
+ }
+
+ break;
+ default:
+ g_warning ("Database type not supported");
+ return NULL;
+ }
+
+ return tracker_db_manager_get_db_interface (db);
+}
+
gboolean
tracker_db_manager_are_db_too_big (void)
{
Modified: branches/indexer-split/src/libtracker-db/tracker-db-manager.h
==============================================================================
--- branches/indexer-split/src/libtracker-db/tracker-db-manager.h (original)
+++ branches/indexer-split/src/libtracker-db/tracker-db-manager.h Thu Jul 24 16:02:40 2008
@@ -40,6 +40,11 @@
} TrackerDB;
typedef enum {
+ TRACKER_DB_CONTENT_TYPE_METADATA,
+ TRACKER_DB_CONTENT_TYPE_CONTENTS
+} TrackerDBContentType;
+
+typedef enum {
TRACKER_DB_MANAGER_FORCE_REINDEX = 1 << 1,
TRACKER_DB_MANAGER_REMOVE_CACHE = 1 << 2,
TRACKER_DB_MANAGER_LOW_MEMORY_MODE = 1 << 3,
@@ -65,6 +70,9 @@
tracker_db_manager_get_db_interfaces (gint num, ...);
TrackerDBInterface *
tracker_db_manager_get_db_interface_by_service (const gchar *service);
+TrackerDBInterface *
+ tracker_db_manager_get_db_interface_by_type (const gchar *service,
+ TrackerDBContentType content_type);
gboolean tracker_db_manager_are_db_too_big (void);
G_END_DECLS
Modified: branches/indexer-split/src/tracker-indexer/tracker-indexer-db.c
==============================================================================
--- branches/indexer-split/src/tracker-indexer/tracker-indexer-db.c (original)
+++ branches/indexer-split/src/tracker-indexer/tracker-indexer-db.c Thu Jul 24 16:02:40 2008
@@ -130,22 +130,24 @@
}
guint
-tracker_db_check_service (TrackerDBInterface *iface,
- const gchar *path,
- GHashTable *metadata)
+tracker_db_check_service (TrackerService *service,
+ const gchar *path,
+ GHashTable *metadata)
{
+ TrackerDBInterface *iface;
TrackerDBResultSet *result_set;
gchar *dirname, *basename;
guint id;
get_dirname_and_basename (path, metadata, &dirname, &basename);
+ iface = tracker_db_manager_get_db_interface_by_type (tracker_service_get_name (service),
+ TRACKER_DB_CONTENT_TYPE_METADATA);
result_set = tracker_db_interface_execute_procedure (iface, NULL,
"GetServiceID",
dirname,
basename,
NULL);
-
g_free (dirname);
g_free (basename);
@@ -160,12 +162,12 @@
}
gboolean
-tracker_db_create_service (TrackerDBInterface *iface,
- guint32 id,
- TrackerService *service,
- const gchar *path,
- GHashTable *metadata)
+tracker_db_create_service (TrackerService *service,
+ guint32 id,
+ const gchar *path,
+ GHashTable *metadata)
{
+ TrackerDBInterface *iface;
gchar *id_str, *service_type_id_str;
gchar *dirname, *basename;
gboolean is_dir, is_symlink, enabled;
@@ -175,6 +177,8 @@
}
get_dirname_and_basename (path, metadata, &dirname, &basename);
+ iface = tracker_db_manager_get_db_interface_by_type (tracker_service_get_name (service),
+ TRACKER_DB_CONTENT_TYPE_METADATA);
id_str = tracker_guint32_to_string (id);
service_type_id_str = tracker_int_to_string (tracker_service_get_id (service));
@@ -216,15 +220,18 @@
}
void
-tracker_db_set_metadata (TrackerDBInterface *iface,
- guint32 id,
- TrackerField *field,
- const gchar *value,
- const gchar *parsed_value)
+tracker_db_set_metadata (TrackerService *service,
+ guint32 id,
+ TrackerField *field,
+ const gchar *value,
+ const gchar *parsed_value)
{
+ TrackerDBInterface *iface;
gchar *id_str;
id_str = tracker_guint32_to_string (id);
+ iface = tracker_db_manager_get_db_interface_by_type (tracker_service_get_name (service),
+ TRACKER_DB_CONTENT_TYPE_METADATA);
switch (tracker_field_get_data_type (field)) {
case TRACKER_FIELD_TYPE_KEYWORD:
@@ -256,10 +263,7 @@
NULL);
break;
case TRACKER_FIELD_TYPE_FULLTEXT:
- /* FIXME: missing DB connection to contents here */
- /*
- tracker_db_set_text (iface, id, value);
- */
+ tracker_db_set_text (service, id, value);
break;
case TRACKER_FIELD_TYPE_BLOB:
case TRACKER_FIELD_TYPE_STRUCT:
@@ -273,15 +277,18 @@
}
void
-tracker_db_set_text (TrackerDBInterface *iface,
- guint32 id,
- const gchar *text)
+tracker_db_set_text (TrackerService *service,
+ guint32 id,
+ const gchar *text)
{
+ TrackerDBInterface *iface;
TrackerField *field;
gchar *id_str;
id_str = tracker_guint32_to_string (id);
field = tracker_ontology_get_field_def ("File:Contents");
+ iface = tracker_db_manager_get_db_interface_by_type (tracker_service_get_name (service),
+ TRACKER_DB_CONTENT_TYPE_CONTENTS);
tracker_db_interface_execute_procedure (iface, NULL,
"SaveServiceContents",
Modified: branches/indexer-split/src/tracker-indexer/tracker-indexer-db.h
==============================================================================
--- branches/indexer-split/src/tracker-indexer/tracker-indexer-db.h (original)
+++ branches/indexer-split/src/tracker-indexer/tracker-indexer-db.h Thu Jul 24 16:02:40 2008
@@ -31,20 +31,19 @@
void tracker_db_increment_stats (TrackerDBInterface *iface,
TrackerService *service);
-guint tracker_db_check_service (TrackerDBInterface *iface,
+guint tracker_db_check_service (TrackerService *service,
const gchar *path,
GHashTable *metadata);
-gboolean tracker_db_create_service (TrackerDBInterface *iface,
+gboolean tracker_db_create_service (TrackerService *service,
guint32 id,
- TrackerService *service,
const gchar *path,
GHashTable *metadata);
-void tracker_db_set_metadata (TrackerDBInterface *iface,
+void tracker_db_set_metadata (TrackerService *service,
guint32 id,
TrackerField *field,
const gchar *value,
const gchar *parsed_value);
-void tracker_db_set_text (TrackerDBInterface *iface,
+void tracker_db_set_text (TrackerService *service,
guint32 id,
const gchar *text);
void tracker_db_create_event (TrackerDBInterface *iface,
Modified: branches/indexer-split/src/tracker-indexer/tracker-indexer.c
==============================================================================
--- branches/indexer-split/src/tracker-indexer/tracker-indexer.c (original)
+++ branches/indexer-split/src/tracker-indexer/tracker-indexer.c Thu Jul 24 16:02:40 2008
@@ -100,8 +100,10 @@
TrackerIndex *index;
- TrackerDBInterface *metadata;
- TrackerDBInterface *contents;
+ TrackerDBInterface *file_metadata;
+ TrackerDBInterface *file_contents;
+ TrackerDBInterface *email_metadata;
+ TrackerDBInterface *email_contents;
TrackerDBInterface *common;
TrackerDBInterface *cache;
@@ -133,7 +135,6 @@
struct MetadataForeachData {
TrackerIndex *index;
- TrackerDBInterface *db;
TrackerLanguage *language;
TrackerConfig *config;
@@ -192,8 +193,10 @@
indexer->private->in_transaction = TRUE;
tracker_db_interface_start_transaction (indexer->private->cache);
- tracker_db_interface_start_transaction (indexer->private->contents);
- tracker_db_interface_start_transaction (indexer->private->metadata);
+ tracker_db_interface_start_transaction (indexer->private->file_contents);
+ tracker_db_interface_start_transaction (indexer->private->email_contents);
+ tracker_db_interface_start_transaction (indexer->private->file_metadata);
+ tracker_db_interface_start_transaction (indexer->private->email_metadata);
tracker_db_interface_start_transaction (indexer->private->common);
}
@@ -201,8 +204,10 @@
stop_transaction (TrackerIndexer *indexer)
{
tracker_db_interface_end_transaction (indexer->private->common);
- tracker_db_interface_end_transaction (indexer->private->metadata);
- tracker_db_interface_end_transaction (indexer->private->contents);
+ tracker_db_interface_end_transaction (indexer->private->email_metadata);
+ tracker_db_interface_end_transaction (indexer->private->file_metadata);
+ tracker_db_interface_end_transaction (indexer->private->email_contents);
+ tracker_db_interface_end_transaction (indexer->private->file_contents);
tracker_db_interface_end_transaction (indexer->private->cache);
indexer->private->files_indexed += indexer->private->files_processed;
@@ -634,11 +639,17 @@
tracker_config_get_max_bucket_count (priv->config));
g_free (index_file);
- /* Set up databases */
+ /* Set up databases, these pointers are mostly used to
+ * start/stop transactions, since TrackerDBManager treats
+ * interfaces as singletons, it's safe to just ask it
+ * again for an interface.
+ */
priv->cache = tracker_db_manager_get_db_interface (TRACKER_DB_CACHE);
priv->common = tracker_db_manager_get_db_interface (TRACKER_DB_COMMON);
- priv->metadata = tracker_db_manager_get_db_interface (TRACKER_DB_FILE_METADATA);
- priv->contents = tracker_db_manager_get_db_interface (TRACKER_DB_FILE_CONTENTS);
+ priv->file_metadata = tracker_db_manager_get_db_interface (TRACKER_DB_FILE_METADATA);
+ priv->file_contents = tracker_db_manager_get_db_interface (TRACKER_DB_FILE_CONTENTS);
+ priv->email_metadata = tracker_db_manager_get_db_interface (TRACKER_DB_EMAIL_METADATA);
+ priv->email_contents = tracker_db_manager_get_db_interface (TRACKER_DB_EMAIL_CONTENTS);
/* Set up timer to know how long the process will take and took */
priv->timer = g_timer_new ();
@@ -729,7 +740,7 @@
tracker_field_get_weight (field));
}
- tracker_db_set_metadata (data->db, data->id, field, (gchar *) value, parsed_value);
+ tracker_db_set_metadata (data->service, data->id, field, (gchar *) value, parsed_value);
g_free (parsed_value);
g_strfreev (arr);
@@ -744,7 +755,6 @@
MetadataForeachData data;
data.index = indexer->private->index;
- data.db = indexer->private->metadata;
data.language = indexer->private->language;
data.config = indexer->private->config;
data.service = service;
@@ -775,20 +785,25 @@
if (metadata) {
TrackerService *service_def;
- gchar *service_type, *mimetype, *text;
+ gchar *service_type, *text;
guint32 id;
- mimetype = tracker_file_get_mime_type (info->file->path);
- service_type = tracker_ontology_get_service_type_for_mime (mimetype);
- service_def = tracker_ontology_get_service_type_by_name (service_type);
+ /* FIXME: We clearly need a better way to define the service type for a given item */
+ service_type = g_strdup (tracker_module_config_get_index_service (info->file->module_name));
+ if (!service_type || !service_type[0]) {
+ gchar *mimetype;
+
+ mimetype = tracker_file_get_mime_type (info->file->path);
+ service_type = tracker_ontology_get_service_type_for_mime (mimetype);
+ g_free (mimetype);
+ }
+
+ service_def = tracker_ontology_get_service_type_by_name (service_type);
g_free (service_type);
- g_free (mimetype);
if (service_def) {
- id = tracker_db_check_service (indexer->private->metadata,
- info->file->path,
- metadata);
+ id = tracker_db_check_service (service_def, info->file->path, metadata);
/* FIXME: should check mtime and reindex if necessary */
@@ -796,8 +811,8 @@
/* Service wasn't previously indexed */
id = tracker_db_get_new_service_id (indexer->private->common);
- tracker_db_create_service (indexer->private->metadata,
- id, service_def,
+ tracker_db_create_service (service_def,
+ id,
info->file->path,
metadata);
@@ -809,7 +824,7 @@
text = tracker_indexer_module_file_get_text (info->module, info->file);
if (text) {
- tracker_db_set_text (indexer->private->contents, id, text);
+ tracker_db_set_text (service_def, id, text);
g_free (text);
}
}
@@ -1259,4 +1274,3 @@
g_error_free (actual_error);
}
}
-
[
Date Prev][
Date Next] [
Thread Prev][
Thread Next]
[
Thread Index]
[
Date Index]
[
Author Index]