[tracker/domain-specific-indexes-review: 5/13] libtracker-data: Also write to the domain class' table in case of domain specific index
- From: Philip Van Hoof <pvanhoof src gnome org>
- To: commits-list gnome org
- Cc:
- Subject: [tracker/domain-specific-indexes-review: 5/13] libtracker-data: Also write to the domain class' table in case of domain specific index
- Date: Tue, 6 Jul 2010 11:49:53 +0000 (UTC)
commit 62101e7d6b195e1df1f72bdfe7a7b7b1efc62efc
Author: Philip Van Hoof <philip codeminded be>
Date: Thu Jul 1 15:18:03 2010 +0200
libtracker-data: Also write to the domain class' table in case of domain specific index
src/libtracker-data/tracker-data-manager.c | 3 +
src/libtracker-data/tracker-data-update.c | 58 +++++++++++++++++++++++++++-
src/libtracker-data/tracker-property.c | 36 +++++++++++++++++
src/libtracker-data/tracker-property.h | 3 +
4 files changed, 99 insertions(+), 1 deletions(-)
---
diff --git a/src/libtracker-data/tracker-data-manager.c b/src/libtracker-data/tracker-data-manager.c
index 5d8ec32..6ca459f 100644
--- a/src/libtracker-data/tracker-data-manager.c
+++ b/src/libtracker-data/tracker-data-manager.c
@@ -560,6 +560,7 @@ tracker_data_ontology_load_statement (const gchar *ontology_path,
if (!ignore) {
tracker_property_set_is_new_domain_index (property, in_update);
tracker_class_add_domain_index (class, property);
+ tracker_property_set_domain_index (property, class);
}
} else if (g_strcmp0 (predicate, TRACKER_PREFIX "writeback") == 0) {
@@ -1304,6 +1305,7 @@ class_add_domain_indexes_from_db (TrackerDBInterface *iface,
domain_index_uri = tracker_db_cursor_get_string (cursor, 0, NULL);
domain_index = tracker_ontologies_get_property_by_uri (domain_index_uri);
tracker_class_add_domain_index (class, domain_index);
+ tracker_property_set_domain_index (domain_index, class);
}
g_object_unref (cursor);
@@ -1638,6 +1640,7 @@ db_get_static_data (TrackerDBInterface *iface)
default_value = tracker_db_cursor_get_string (cursor, 13, NULL);
+ tracker_property_set_domain_index (property, NULL);
tracker_property_set_is_new_domain_index (property, FALSE);
tracker_property_set_is_new (property, FALSE);
tracker_property_set_transient (property, transient);
diff --git a/src/libtracker-data/tracker-data-update.c b/src/libtracker-data/tracker-data-update.c
index e2d5d82..f33a4e8 100644
--- a/src/libtracker-data/tracker-data-update.c
+++ b/src/libtracker-data/tracker-data-update.c
@@ -1369,7 +1369,7 @@ cache_set_metadata_decomposed (TrackerProperty *property,
super_properties = tracker_property_get_super_properties (property);
while (*super_properties) {
change |= cache_set_metadata_decomposed (*super_properties, value, value_id,
- graph, graph_id, &new_error);
+ graph, graph_id, &new_error);
if (new_error) {
g_propagate_error (error, new_error);
return FALSE;
@@ -1434,12 +1434,32 @@ cache_set_metadata_decomposed (TrackerProperty *property,
g_value_unset (&gvalue);
} else {
+
cache_insert_value (table_name, field_name, &gvalue,
graph != NULL ? ensure_resource_id (graph, NULL) : graph_id,
multiple_values,
tracker_property_get_fulltext_indexed (property),
tracker_property_get_data_type (property) == TRACKER_PROPERTY_TYPE_DATETIME);
+ if (!multiple_values) {
+ TrackerClass *domain_index_class;
+
+ domain_index_class = tracker_property_get_domain_index (property);
+
+ if (domain_index_class) {
+ GValue gvalue_copy = { 0 };
+
+ g_value_init (&gvalue_copy, G_VALUE_TYPE (&gvalue));
+ g_value_copy (&gvalue, &gvalue_copy);
+
+ cache_insert_value (tracker_class_get_name (domain_index_class), field_name, &gvalue_copy,
+ graph != NULL ? ensure_resource_id (graph, NULL) : graph_id,
+ multiple_values,
+ tracker_property_get_fulltext_indexed (property),
+ tracker_property_get_data_type (property) == TRACKER_PROPERTY_TYPE_DATETIME);
+ }
+ }
+
change = TRUE;
}
@@ -1491,6 +1511,23 @@ delete_metadata_decomposed (TrackerProperty *property,
tracker_property_get_fulltext_indexed (property),
tracker_property_get_data_type (property) == TRACKER_PROPERTY_TYPE_DATETIME);
+ if (!multiple_values) {
+ TrackerClass *domain_index_class;
+
+ domain_index_class = tracker_property_get_domain_index (property);
+
+ if (domain_index_class) {
+ GValue gvalue_copy = { 0 };
+
+ g_value_init (&gvalue_copy, G_VALUE_TYPE (&gvalue));
+ g_value_copy (&gvalue, &gvalue_copy);
+
+ cache_delete_value (tracker_class_get_name (domain_index_class), field_name, &gvalue_copy, multiple_values,
+ tracker_property_get_fulltext_indexed (property),
+ tracker_property_get_data_type (property) == TRACKER_PROPERTY_TYPE_DATETIME);
+ }
+ }
+
change = TRUE;
}
@@ -1599,6 +1636,25 @@ cache_delete_resource_type (TrackerClass *class,
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);
+
+
+ if (!multiple_values) {
+ TrackerClass *domain_index_class;
+
+ domain_index_class = tracker_property_get_domain_index (prop);
+
+ if (domain_index_class) {
+ GValue gvalue_copy = { 0 };
+
+ g_value_init (&gvalue_copy, G_VALUE_TYPE (&gvalue));
+ g_value_copy (&gvalue, &gvalue_copy);
+
+ cache_delete_value (tracker_class_get_name (domain_index_class), field_name, &gvalue_copy, multiple_values,
+ tracker_property_get_fulltext_indexed (prop),
+ tracker_property_get_data_type (prop) == TRACKER_PROPERTY_TYPE_DATETIME);
+ }
+ }
+
}
}
diff --git a/src/libtracker-data/tracker-property.c b/src/libtracker-data/tracker-property.c
index 72e3dd2..77ca25c 100644
--- a/src/libtracker-data/tracker-property.c
+++ b/src/libtracker-data/tracker-property.c
@@ -47,6 +47,7 @@ struct _TrackerPropertyPrivate {
TrackerPropertyType data_type;
TrackerClass *domain;
+ TrackerClass *domain_index;
TrackerClass *range;
gint weight;
gint id;
@@ -273,6 +274,21 @@ tracker_property_get_domain (TrackerProperty *property)
}
TrackerClass *
+tracker_property_get_domain_index (TrackerProperty *property)
+{
+ TrackerPropertyPrivate *priv;
+
+ /* Removed for performance:
+ g_return_val_if_fail (TRACKER_IS_PROPERTY (property), NULL); */
+
+ g_return_val_if_fail (property != NULL, NULL);
+
+ priv = GET_PRIV (property);
+
+ return priv->domain_index;
+}
+
+TrackerClass *
tracker_property_get_range (TrackerProperty *property)
{
TrackerPropertyPrivate *priv;
@@ -543,6 +559,26 @@ tracker_property_set_domain (TrackerProperty *property,
}
void
+tracker_property_set_domain_index (TrackerProperty *property,
+ TrackerClass *value)
+{
+ TrackerPropertyPrivate *priv;
+
+ g_return_if_fail (TRACKER_IS_PROPERTY (property));
+
+ priv = GET_PRIV (property);
+
+ if (priv->domain_index) {
+ g_object_unref (priv->domain_index);
+ priv->domain_index = NULL;
+ }
+
+ if (value) {
+ priv->domain_index = g_object_ref (value);
+ }
+}
+
+void
tracker_property_set_secondary_index (TrackerProperty *property,
TrackerProperty *value)
{
diff --git a/src/libtracker-data/tracker-property.h b/src/libtracker-data/tracker-property.h
index d9c9c01..7b7d70c 100644
--- a/src/libtracker-data/tracker-property.h
+++ b/src/libtracker-data/tracker-property.h
@@ -80,6 +80,7 @@ const gchar * tracker_property_get_table_name (TrackerProperty
TrackerPropertyType tracker_property_get_data_type (TrackerProperty *property);
TrackerClass * tracker_property_get_domain (TrackerProperty *property);
TrackerClass * tracker_property_get_range (TrackerProperty *property);
+TrackerClass * tracker_property_get_domain_index (TrackerProperty *property);
gint tracker_property_get_weight (TrackerProperty *property);
gint tracker_property_get_id (TrackerProperty *property);
gboolean tracker_property_get_indexed (TrackerProperty *property);
@@ -101,6 +102,8 @@ void tracker_property_set_uri (TrackerProperty
const gchar *value);
void tracker_property_set_domain (TrackerProperty *property,
TrackerClass *value);
+void tracker_property_set_domain_index (TrackerProperty *property,
+ TrackerClass *value);
void tracker_property_set_range (TrackerProperty *property,
TrackerClass *range);
void tracker_property_set_weight (TrackerProperty *property,
[
Date Prev][
Date Next] [
Thread Prev][
Thread Next]
[
Thread Index]
[
Date Index]
[
Author Index]