diff options
author | Philip Van Hoof <philip@codeminded.be> | 2011-09-13 13:35:16 +0200 |
---|---|---|
committer | Jürg Billeter <j@bitron.ch> | 2011-09-13 14:31:10 +0200 |
commit | 9eabf6a15014219565ef318af804ef7ac5d156a4 (patch) | |
tree | b2ee576d92a68bd02d9c0ddbace0213da596d4ca /src/libtracker-data/tracker-data-manager.c | |
parent | a21d497f621796c5cbded31778f084ab8330f67f (diff) | |
download | tracker-9eabf6a15014219565ef318af804ef7ac5d156a4.tar.gz |
libtracker-data: Support for removing rdfs:subPropertyOf
Fixes NB#281335.
Diffstat (limited to 'src/libtracker-data/tracker-data-manager.c')
-rw-r--r-- | src/libtracker-data/tracker-data-manager.c | 39 |
1 files changed, 31 insertions, 8 deletions
diff --git a/src/libtracker-data/tracker-data-manager.c b/src/libtracker-data/tracker-data-manager.c index 020c56c3c..487a6ad68 100644 --- a/src/libtracker-data/tracker-data-manager.c +++ b/src/libtracker-data/tracker-data-manager.c @@ -1393,6 +1393,7 @@ check_for_deleted_super_properties (TrackerProperty *property, GError **error) { TrackerProperty **last_super_properties; + GList *to_remove = NULL; last_super_properties = tracker_property_get_last_super_properties (property); @@ -1418,18 +1419,40 @@ check_for_deleted_super_properties (TrackerProperty *property, } if (!found) { - const gchar *ontology_path = "Unknown"; - const gchar *subject = tracker_property_get_uri (property); - - handle_unsupported_ontology_change (ontology_path, - subject, - "rdfs:subPropertyOf", "-", "-", - error); - return; + to_remove = g_list_prepend (to_remove, last_super_property); } last_super_properties++; } + + if (to_remove) { + GList *copy = to_remove; + + while (copy) { + GError *n_error = NULL; + TrackerProperty *prop_to_remove = copy->data; + const gchar *object = tracker_property_get_uri (prop_to_remove); + const gchar *subject = tracker_property_get_uri (property); + + tracker_property_del_super_property (property, prop_to_remove); + + tracker_data_delete_statement (NULL, subject, + RDFS_PREFIX "subPropertyOf", + object, &n_error); + + if (!n_error) { + tracker_data_update_buffer_flush (&n_error); + } + + if (n_error) { + g_propagate_error (error, n_error); + return; + } + + copy = copy->next; + } + g_list_free (to_remove); + } } static void |