[tracker/disable-fts: 10/10] libtracker-data: Support disabling FTS
- From: Martyn James Russell <mr src gnome org>
- To: commits-list gnome org
- Cc:
- Subject: [tracker/disable-fts: 10/10] libtracker-data: Support disabling FTS
- Date: Thu, 24 Jun 2010 14:28:01 +0000 (UTC)
commit fb1b148fd2a016bedb5d8d67273f9120697b53e5
Author: Aleksander Morgado <aleksander lanedo com>
Date: Tue Jun 15 14:09:10 2010 +0200
libtracker-data: Support disabling FTS
src/libtracker-data/tracker-data-manager.c | 24 ++++--
src/libtracker-data/tracker-data-update.c | 115 +++++++++++++++++-----------
2 files changed, 87 insertions(+), 52 deletions(-)
---
diff --git a/src/libtracker-data/tracker-data-manager.c b/src/libtracker-data/tracker-data-manager.c
index 359d253..e931808 100644
--- a/src/libtracker-data/tracker-data-manager.c
+++ b/src/libtracker-data/tracker-data-manager.c
@@ -32,7 +32,9 @@
#include <libtracker-common/tracker-common.h>
+#if HAVE_TRACKER_FTS
#include <libtracker-fts/tracker-fts.h>
+#endif
#include <libtracker-db/tracker-db-interface-sqlite.h>
#include <libtracker-db/tracker-db-manager.h>
@@ -741,7 +743,7 @@ tracker_data_ontology_process_changes (GPtrArray *seen_classes,
gint i;
/* This updates property-property changes and marks classes for necessity
- * of having their tables recreated later. There's support for
+ * of having their tables recreated later. There's support for
* tracker:notify, tracker:writeback and tracker:indexed */
if (seen_classes) {
@@ -833,7 +835,7 @@ tracker_data_ontology_process_changes (GPtrArray *seen_classes,
}
if (update_property_value ("rdfs:range", subject, RDFS_PREFIX "range",
- tracker_class_get_uri (tracker_property_get_range (property)),
+ tracker_class_get_uri (tracker_property_get_range (property)),
allowed_range_conversions,
NULL, property)) {
TrackerClass *class;
@@ -1913,9 +1915,9 @@ create_decomposed_metadata_tables (TrackerDBInterface *iface,
if (in_update) {
g_debug ("%sAltering database for class '%s' property '%s': single value (%s)",
- in_alter ? "" : " ",
- service_name,
- field_name,
+ in_alter ? "" : " ",
+ service_name,
+ field_name,
in_alter ? "alter" : "create");
}
@@ -2110,7 +2112,7 @@ create_decomposed_transient_metadata_tables (TrackerDBInterface *iface)
}
}
-void
+void
tracker_data_ontology_import_finished (void)
{
TrackerClass **classes;
@@ -2277,7 +2279,9 @@ tracker_data_manager_init (TrackerDBManagerFlags flags,
return FALSE;
}
+#if HAVE_TRACKER_FTS
tracker_fts_set_map_function (tracker_ontologies_get_uri_by_id);
+#endif
if (first_time != NULL) {
*first_time = is_first_time_index;
@@ -2319,14 +2323,17 @@ tracker_data_manager_init (TrackerDBManagerFlags flags,
/* Read first ontology and commit it into the DB */
tracker_data_begin_db_transaction_for_replay (tracker_db_journal_reader_get_time ());
+
+ /* This is a no-op when FTS is disabled */
tracker_db_interface_sqlite_fts_init (iface, TRUE);
+
tracker_data_ontology_import_into_db (FALSE);
tracker_data_commit_db_transaction ();
tracker_db_journal_reader_shutdown ();
/* Start replay. Ontology changes might happen during replay of the journal. */
- tracker_data_replay_journal (classes, properties, id_uri_map,
+ tracker_data_replay_journal (classes, properties, id_uri_map,
busy_callback, busy_user_data, busy_status);
in_journal_replay = FALSE;
@@ -2375,7 +2382,9 @@ tracker_data_manager_init (TrackerDBManagerFlags flags,
/* Not an ontology transaction: this is the first ontology */
tracker_db_journal_start_transaction (time (NULL));
+ /* This is a no-op when FTS is disabled */
tracker_db_interface_sqlite_fts_init (iface, TRUE);
+
tracker_data_ontology_import_into_db (FALSE);
/* store ontology in database */
@@ -2413,6 +2422,7 @@ tracker_data_manager_init (TrackerDBManagerFlags flags,
create_decomposed_transient_metadata_tables (iface);
check_ontology = TRUE;
+ /* This is a no-op when FTS is disabled */
tracker_db_interface_sqlite_fts_init (iface, FALSE);
}
diff --git a/src/libtracker-data/tracker-data-update.c b/src/libtracker-data/tracker-data-update.c
index a8ab034..789f190 100644
--- a/src/libtracker-data/tracker-data-update.c
+++ b/src/libtracker-data/tracker-data-update.c
@@ -29,7 +29,9 @@
#include <libtracker-common/tracker-file-utils.h>
#include <libtracker-common/tracker-ontologies.h>
+#if HAVE_TRACKER_FTS
#include <libtracker-fts/tracker-fts.h>
+#endif
#include <libtracker-db/tracker-db-manager.h>
#include <libtracker-db/tracker-db-dbus.h>
@@ -70,30 +72,39 @@ struct _TrackerDataUpdateBuffer {
GHashTable *resources_by_id;
/* the following two fields are valid per sqlite transaction, not just for same subject */
- gboolean fts_ever_updated;
/* TrackerClass -> integer */
GHashTable *class_counts;
+
+#if HAVE_TRACKER_FTS
+ gboolean fts_ever_updated;
+#endif
};
struct _TrackerDataUpdateBufferResource {
const gchar *subject;
gint id;
gboolean create;
- gboolean fts_updated;
/* TrackerProperty -> GValueArray */
GHashTable *predicates;
/* string -> TrackerDataUpdateBufferTable */
GHashTable *tables;
/* TrackerClass */
GPtrArray *types;
+
+#if HAVE_TRACKER_FTS
+ gboolean fts_updated;
+#endif
};
struct _TrackerDataUpdateBufferProperty {
const gchar *name;
GValue value;
gint graph;
- gboolean fts : 1;
gboolean date_time : 1;
+
+#if HAVE_TRACKER_FTS
+ gboolean fts : 1;
+#endif
};
struct _TrackerDataUpdateBufferTable {
@@ -482,7 +493,9 @@ cache_insert_value (const gchar *table_name,
property.value = *value;
property.graph = graph;
+#if TRACKER_HAVE_FTS
property.fts = fts;
+#endif
property.date_time = date_time;
table = cache_ensure_table (table_name, multiple_values);
@@ -513,7 +526,9 @@ cache_delete_value (const gchar *table_name,
property.name = field_name;
property.value = *value;
property.graph = 0;
+#if TRACKER_HAVE_FTS
property.fts = fts;
+#endif
property.date_time = date_time;
table = cache_ensure_table (table_name, multiple_values);
@@ -639,7 +654,7 @@ tracker_data_resource_buffer_flush (GError **error)
TrackerDataUpdateBufferProperty *property;
GHashTableIter iter;
const gchar *table_name;
- GString *sql, *fts;
+ GString *sql;
gint i, param;
GError *actual_error = NULL;
@@ -834,6 +849,7 @@ tracker_data_resource_buffer_flush (GError **error)
}
}
+#if HAVE_TRACKER_FTS
if (resource_buffer->fts_updated) {
TrackerProperty *prop;
GValueArray *values;
@@ -843,6 +859,8 @@ tracker_data_resource_buffer_flush (GError **error)
g_hash_table_iter_init (&iter, resource_buffer->predicates);
while (g_hash_table_iter_next (&iter, (gpointer*) &prop, (gpointer*) &values)) {
if (tracker_property_get_fulltext_indexed (prop)) {
+ GString *fts;
+
fts = g_string_new ("");
for (i = 0; i < values->n_values; i++) {
g_string_append (fts, g_value_get_string (g_value_array_get_nth (values, i)));
@@ -855,6 +873,7 @@ tracker_data_resource_buffer_flush (GError **error)
}
}
}
+#endif
}
static void resource_buffer_free (TrackerDataUpdateBufferResource *resource)
@@ -918,8 +937,10 @@ tracker_data_update_buffer_clear (void)
g_hash_table_remove_all (update_buffer.resources_by_id);
resource_buffer = NULL;
+#if HAVE_TRACKER_FTS
tracker_fts_update_rollback ();
update_buffer.fts_ever_updated = FALSE;
+#endif
if (update_buffer.class_counts) {
/* revert class count changes */
@@ -1220,12 +1241,8 @@ static GValueArray *
get_old_property_values (TrackerProperty *property,
GError **error)
{
- gboolean fts;
- TrackerProperty **properties, *prop;
GValueArray *old_values;
- fts = tracker_property_get_fulltext_indexed (property);
-
/* read existing property values */
old_values = g_hash_table_lookup (resource_buffer->predicates, property);
if (old_values == NULL) {
@@ -1238,44 +1255,51 @@ get_old_property_values (TrackerProperty *property,
return NULL;
}
- if (fts && !resource_buffer->fts_updated && !resource_buffer->create) {
- guint i, n_props;
+#if HAVE_TRACKER_FTS
+ if (tracker_property_get_fulltext_indexed (property)) {
+ if (!resource_buffer->fts_updated && !resource_buffer->create) {
+ guint i, n_props;
+ TrackerProperty **properties, *prop;
- /* first fulltext indexed property to be modified
- * retrieve values of all fulltext indexed properties
- */
- tracker_fts_update_init (resource_buffer->id);
+ /* first fulltext indexed property to be modified
+ * retrieve values of all fulltext indexed properties
+ */
+ tracker_fts_update_init (resource_buffer->id);
- properties = tracker_ontologies_get_properties (&n_props);
+ properties = tracker_ontologies_get_properties (&n_props);
- for (i = 0; i < n_props; i++) {
- prop = properties[i];
+ for (i = 0; i < n_props; i++) {
+ prop = properties[i];
- if (tracker_property_get_fulltext_indexed (prop)
- && check_property_domain (prop)) {
- gint i;
+ if (tracker_property_get_fulltext_indexed (prop)
+ && check_property_domain (prop)) {
+ gint i;
- old_values = get_property_values (prop);
+ old_values = get_property_values (prop);
- /* delete old fts entries */
- for (i = 0; i < old_values->n_values; i++) {
- tracker_fts_update_text (resource_buffer->id, -1,
- g_value_get_string (g_value_array_get_nth (old_values, i)),
- !tracker_property_get_fulltext_no_limit (prop));
+ /* delete old fts entries */
+ for (i = 0; i < old_values->n_values; i++) {
+ tracker_fts_update_text (resource_buffer->id, -1,
+ g_value_get_string (g_value_array_get_nth (old_values, i)),
+ !tracker_property_get_fulltext_no_limit (prop));
+ }
}
}
- }
- update_buffer.fts_ever_updated = TRUE;
+ update_buffer.fts_ever_updated = TRUE;
- old_values = g_hash_table_lookup (resource_buffer->predicates, property);
- } else {
- old_values = get_property_values (property);
- }
+ old_values = g_hash_table_lookup (resource_buffer->predicates, property);
+ } else {
+ old_values = get_property_values (property);
+ }
- if (fts) {
resource_buffer->fts_updated = TRUE;
+ } else {
+ old_values = get_property_values (property);
}
+#else
+ old_values = get_property_values (property);
+#endif
}
return old_values;
@@ -1332,7 +1356,7 @@ cache_set_metadata_decomposed (TrackerProperty *property,
gint graph_id,
GError **error)
{
- gboolean multiple_values, fts;
+ gboolean multiple_values;
const gchar *table_name;
const gchar *field_name;
TrackerProperty **super_properties;
@@ -1357,8 +1381,6 @@ cache_set_metadata_decomposed (TrackerProperty *property,
table_name = tracker_property_get_table_name (property);
field_name = tracker_property_get_name (property);
- fts = tracker_property_get_fulltext_indexed (property);
-
/* read existing property values */
old_values = get_old_property_values (property, &new_error);
if (new_error) {
@@ -1414,7 +1436,8 @@ cache_set_metadata_decomposed (TrackerProperty *property,
} else {
cache_insert_value (table_name, field_name, &gvalue,
graph != NULL ? ensure_resource_id (graph, NULL) : graph_id,
- multiple_values, fts,
+ multiple_values,
+ tracker_property_get_fulltext_indexed (property),
tracker_property_get_data_type (property) == TRACKER_PROPERTY_TYPE_DATETIME);
change = TRUE;
@@ -1429,7 +1452,7 @@ delete_metadata_decomposed (TrackerProperty *property,
gint value_id,
GError **error)
{
- gboolean multiple_values, fts;
+ gboolean multiple_values;
const gchar *table_name;
const gchar *field_name;
TrackerProperty **super_properties;
@@ -1442,8 +1465,6 @@ delete_metadata_decomposed (TrackerProperty *property,
table_name = tracker_property_get_table_name (property);
field_name = tracker_property_get_name (property);
- fts = tracker_property_get_fulltext_indexed (property);
-
/* read existing property values */
old_values = get_old_property_values (property, &new_error);
if (new_error) {
@@ -1466,7 +1487,8 @@ delete_metadata_decomposed (TrackerProperty *property,
/* value not found */
g_value_unset (&gvalue);
} else {
- cache_delete_value (table_name, field_name, &gvalue, multiple_values, fts,
+ cache_delete_value (table_name, field_name, &gvalue, multiple_values,
+ tracker_property_get_fulltext_indexed (property),
tracker_property_get_data_type (property) == TRACKER_PROPERTY_TYPE_DATETIME);
change = TRUE;
@@ -1547,7 +1569,7 @@ cache_delete_resource_type (TrackerClass *class,
properties = tracker_ontologies_get_properties (&n_props);
for (p = 0; p < n_props; p++) {
- gboolean multiple_values, fts;
+ gboolean multiple_values;
const gchar *table_name;
const gchar *field_name;
GValueArray *old_values;
@@ -1563,8 +1585,6 @@ cache_delete_resource_type (TrackerClass *class,
table_name = tracker_property_get_table_name (prop);
field_name = tracker_property_get_name (prop);
- fts = tracker_property_get_fulltext_indexed (prop);
-
old_values = get_old_property_values (prop, NULL);
for (i = old_values->n_values - 1; i >= 0 ; i--) {
@@ -1576,7 +1596,8 @@ cache_delete_resource_type (TrackerClass *class,
g_value_copy (old_gvalue, &gvalue);
value_set_remove_value (old_values, &gvalue);
- cache_delete_value (table_name, field_name, &gvalue, multiple_values, fts,
+ cache_delete_value (table_name, field_name, &gvalue, multiple_values,
+ tracker_property_get_fulltext_indexed (prop),
tracker_property_get_data_type (prop) == TRACKER_PROPERTY_TYPE_DATETIME);
}
}
@@ -1638,7 +1659,9 @@ resource_buffer_switch (const gchar *graph,
} else {
resource_buffer->id = ensure_resource_id (resource_buffer->subject, &resource_buffer->create);
}
+#if HAVE_TRACKER_FTS
resource_buffer->fts_updated = FALSE;
+#endif
if (resource_buffer->create) {
resource_buffer->types = g_ptr_array_new ();
} else {
@@ -2063,10 +2086,12 @@ tracker_data_commit_db_transaction (void)
tracker_data_update_buffer_flush (NULL);
+#if HAVE_TRACKER_FTS
if (update_buffer.fts_ever_updated) {
tracker_fts_update_commit ();
update_buffer.fts_ever_updated = FALSE;
}
+#endif
if (update_buffer.class_counts) {
/* successful transaction, no need to rollback class counts,
[
Date Prev][
Date Next] [
Thread Prev][
Thread Next]
[
Thread Index]
[
Date Index]
[
Author Index]