diff options
author | Carlos Garnacho <carlosg@gnome.org> | 2016-02-29 13:04:00 +0100 |
---|---|---|
committer | Carlos Garnacho <carlosg@gnome.org> | 2016-02-29 13:07:41 +0100 |
commit | b324a0fd4329f8a1de3a476a1788e6c4c94c50be (patch) | |
tree | 02c5aae07a4641a224121491c53c3c481009cfb1 | |
parent | 88dcce8f727f903c198d94ba51fd85d375af8c7b (diff) | |
download | tracker-b324a0fd4329f8a1de3a476a1788e6c4c94c50be.tar.gz |
libtracker-data: Handle tracker:fulltextIndexed changes
We no longer have a reason to deem this change incompatible. Since
no actual text is stored in the FTS tables, and it merely updates
its tokenization info from the original class tables, we can just
drop this info and reconstruct at will. So there's no longer need
to consider tracker:fulltextIndexed changes as incompatible.
-rw-r--r-- | src/libtracker-data/tracker-data-manager.c | 42 | ||||
-rw-r--r-- | src/libtracker-data/tracker-property.c | 26 | ||||
-rw-r--r-- | src/libtracker-data/tracker-property.h | 3 |
3 files changed, 43 insertions, 28 deletions
diff --git a/src/libtracker-data/tracker-data-manager.c b/src/libtracker-data/tracker-data-manager.c index c8dab4a8a..b7d2ffea2 100644 --- a/src/libtracker-data/tracker-data-manager.c +++ b/src/libtracker-data/tracker-data-manager.c @@ -650,6 +650,7 @@ tracker_data_ontology_load_statement (const gchar *ontology_path, tracker_property_set_is_inverse_functional_property (property, FALSE); tracker_property_set_default_value (property, NULL); tracker_property_set_multiple_values (property, TRUE); + tracker_property_set_fulltext_indexed (property, FALSE); } return; } @@ -1140,29 +1141,8 @@ tracker_data_ontology_load_statement (const gchar *ontology_path, return; } - is_new = tracker_property_get_is_new (property); - if (is_new != in_update) { - /* Detect unsupported ontology change (this needs a journal replay) */ - if (in_update == TRUE && is_new == FALSE) { - if (check_unsupported_property_value_change (ontology_path, - "tracker:fulltextIndexed", - subject, - predicate, - object)) { - handle_unsupported_ontology_change (ontology_path, - tracker_property_get_name (property), - "tracker:fulltextIndexed", - tracker_property_get_fulltext_indexed (property) ? "true" : "false", - g_strcmp0 (object, "true") == 0 ? "true" : "false", - error); - } - } - return; - } - - if (strcmp (object, "true") == 0) { - tracker_property_set_fulltext_indexed (property, TRUE); - } + tracker_property_set_fulltext_indexed (property, + strcmp (object, "true") == 0); } else if (g_strcmp0 (predicate, TRACKER_PREFIX_TRACKER "defaultValue") == 0) { TrackerProperty *property; @@ -2436,6 +2416,7 @@ db_get_static_data (TrackerDBInterface *iface, tracker_property_set_secondary_index (property, tracker_ontologies_get_property_by_uri (secondary_index_uri)); } + tracker_property_set_orig_fulltext_indexed (property, fulltext_indexed); tracker_property_set_fulltext_indexed (property, fulltext_indexed); tracker_property_set_is_inverse_functional_property (property, is_inverse_functional_property); @@ -3614,11 +3595,11 @@ load_ontologies_gvdb (GError **error) #if HAVE_TRACKER_FTS static gboolean ontology_get_fts_properties (gboolean only_new, - GHashTable **fts_properties, - GHashTable **multivalued) + GHashTable **fts_properties, + GHashTable **multivalued) { TrackerProperty **properties; - gboolean has_new = FALSE; + gboolean has_changed = FALSE; guint i, len; properties = tracker_ontologies_get_properties (&len); @@ -3630,11 +3611,16 @@ ontology_get_fts_properties (gboolean only_new, const gchar *name, *table_name; GList *list; + if (tracker_property_get_fulltext_indexed (properties[i]) != + tracker_property_get_orig_fulltext_indexed (properties[i])) { + has_changed |= TRUE; + } + if (!tracker_property_get_fulltext_indexed (properties[i])) { continue; } - has_new |= tracker_property_get_is_new (properties[i]); + has_changed |= tracker_property_get_is_new (properties[i]); table_name = tracker_property_get_table_name (properties[i]); name = tracker_property_get_name (properties[i]); list = g_hash_table_lookup (*fts_properties, table_name); @@ -3652,7 +3638,7 @@ ontology_get_fts_properties (gboolean only_new, } } - return has_new; + return has_changed; } static void diff --git a/src/libtracker-data/tracker-property.c b/src/libtracker-data/tracker-property.c index 1d19ee2ec..3f14c3881 100644 --- a/src/libtracker-data/tracker-property.c +++ b/src/libtracker-data/tracker-property.c @@ -55,6 +55,7 @@ struct _TrackerPropertyPrivate { gint id; gboolean indexed; TrackerProperty *secondary_index; + gboolean orig_fulltext_indexed; gboolean fulltext_indexed; gboolean multiple_values; gboolean last_multiple_values; @@ -491,6 +492,18 @@ tracker_property_get_fulltext_indexed (TrackerProperty *property) } gboolean +tracker_property_get_orig_fulltext_indexed (TrackerProperty *property) +{ + TrackerPropertyPrivate *priv; + + g_return_val_if_fail (property != NULL, FALSE); + + priv = GET_PRIV (property); + + return priv->orig_fulltext_indexed; +} + +gboolean tracker_property_get_is_new (TrackerProperty *property) { TrackerPropertyPrivate *priv; @@ -999,6 +1012,19 @@ tracker_property_set_cardinality_changed (TrackerProperty *property, } void +tracker_property_set_orig_fulltext_indexed (TrackerProperty *property, + gboolean value) +{ + TrackerPropertyPrivate *priv; + + g_return_if_fail (TRACKER_IS_PROPERTY (property)); + + priv = GET_PRIV (property); + + priv->orig_fulltext_indexed = value; +} + +void tracker_property_set_fulltext_indexed (TrackerProperty *property, gboolean value) { diff --git a/src/libtracker-data/tracker-property.h b/src/libtracker-data/tracker-property.h index 328d130ee..fdc6883b2 100644 --- a/src/libtracker-data/tracker-property.h +++ b/src/libtracker-data/tracker-property.h @@ -85,6 +85,7 @@ gint tracker_property_get_weight (TrackerProperty gint tracker_property_get_id (TrackerProperty *property); gboolean tracker_property_get_indexed (TrackerProperty *property); TrackerProperty * tracker_property_get_secondary_index (TrackerProperty *property); +gboolean tracker_property_get_orig_fulltext_indexed(TrackerProperty *property); gboolean tracker_property_get_fulltext_indexed (TrackerProperty *property); gboolean tracker_property_get_multiple_values (TrackerProperty *property); gboolean tracker_property_get_last_multiple_values(TrackerProperty *property); @@ -120,6 +121,8 @@ void tracker_property_set_indexed (TrackerProperty gboolean value); void tracker_property_set_secondary_index (TrackerProperty *property, TrackerProperty *value); +void tracker_property_set_orig_fulltext_indexed(TrackerProperty *property, + gboolean value); void tracker_property_set_fulltext_indexed (TrackerProperty *property, gboolean value); void tracker_property_set_multiple_values (TrackerProperty *property, |