diff options
author | Sam Thursfield <sam@afuera.me.uk> | 2020-05-13 18:37:22 +0000 |
---|---|---|
committer | Sam Thursfield <sam@afuera.me.uk> | 2020-05-13 18:37:22 +0000 |
commit | 3a740a34fdb3e1f5e108637512ba0dde73753f72 (patch) | |
tree | c7f802ea9670836dd9f814fbb808f75c976a351a | |
parent | a6e0f8af460a753358c34baacfa8cbfa36c9f706 (diff) | |
parent | 75c73934312b554bcb584c37dd1831d16deae6c5 (diff) | |
download | tracker-3a740a34fdb3e1f5e108637512ba0dde73753f72.tar.gz |
Merge branch 'wip/carlosg/ontology-single-value-updates' into 'master'
Handle generic single-value changes during ontology updates
See merge request GNOME/tracker!245
6 files changed, 170 insertions, 3 deletions
diff --git a/src/libtracker-data/tracker-data-manager.c b/src/libtracker-data/tracker-data-manager.c index 9ef0096c7..316fe3465 100644 --- a/src/libtracker-data/tracker-data-manager.c +++ b/src/libtracker-data/tracker-data-manager.c @@ -1917,6 +1917,7 @@ tracker_data_ontology_process_statement (TrackerDataManager *manager, const gchar *object, gboolean in_update) { + TrackerProperty *property; GError *error = NULL; GBytes *bytes; @@ -1994,10 +1995,19 @@ tracker_data_ontology_process_statement (TrackerDataManager *manager, } bytes = g_bytes_new (object, strlen (object) + 1); + property = tracker_ontologies_get_property_by_uri (manager->ontologies, predicate); + + if (tracker_property_get_is_new (property) || + tracker_property_get_multiple_values (property)) { + tracker_data_insert_statement (manager->data_update, NULL, + subject, predicate, bytes, + &error); + } else { + tracker_data_update_statement (manager->data_update, NULL, + subject, predicate, bytes, + &error); + } - tracker_data_insert_statement (manager->data_update, NULL, subject, - predicate, bytes, - &error); g_bytes_unref (bytes); if (error != NULL) { diff --git a/tests/libtracker-data/change/change-test-6.out b/tests/libtracker-data/change/change-test-6.out new file mode 100644 index 000000000..18dd8162b --- /dev/null +++ b/tests/libtracker-data/change/change-test-6.out @@ -0,0 +1 @@ +"It ain't nothing but a label" "It ain't nothing but a comment" diff --git a/tests/libtracker-data/change/change-test-6.rq b/tests/libtracker-data/change/change-test-6.rq new file mode 100644 index 000000000..65cc5b729 --- /dev/null +++ b/tests/libtracker-data/change/change-test-6.rq @@ -0,0 +1,2 @@ +SELECT ?l ?c { example:labeled rdfs:label ?l ; + rdfs:comment ?c } diff --git a/tests/libtracker-data/change/source/99-example.ontology.v12 b/tests/libtracker-data/change/source/99-example.ontology.v12 new file mode 100644 index 000000000..de9d48466 --- /dev/null +++ b/tests/libtracker-data/change/source/99-example.ontology.v12 @@ -0,0 +1,76 @@ +@prefix example: <http://example/> . +@prefix rdf: <http://www.w3.org/1999/02/22-rdf-syntax-ns#> . +@prefix rdfs: <http://www.w3.org/2000/01/rdf-schema#> . +@prefix tracker: <http://tracker.api.gnome.org/ontology/v3/tracker#> . +@prefix xsd: <http://www.w3.org/2001/XMLSchema#> . +@prefix nrl: <http://tracker.api.gnome.org/ontology/v3/nrl#> . + +example: a tracker:Namespace, tracker:Ontology ; + tracker:lastModified "2010-03-23T11:00:11Z" ; + tracker:prefix "example" . + +example:A a rdfs:Class ; + rdfs:subClassOf rdfs:Resource . + +# We remove a domainIndex +example:DomA a rdfs:Class ; + tracker:domainIndex example:single2 ; + rdfs:subClassOf example:A . + +example:B a rdfs:Class ; + rdfs:subClassOf rdfs:Resource . + +example:b a rdf:Property ; + rdfs:domain example:A ; + rdfs:range example:B . + +example:i1 a rdf:Property ; + rdfs:domain example:A ; + rdfs:range xsd:integer . + +example:i2 a rdf:Property ; + rdfs:domain example:A ; + rdfs:range xsd:integer . + +example:single1 a rdf:Property ; + rdfs:domain example:A ; + rdfs:range xsd:integer ; + nrl:maxCardinality 1 ; + tracker:indexed false . + +example:single2 a rdf:Property ; + rdfs:domain example:A ; + rdfs:range xsd:integer ; + nrl:maxCardinality 1 ; + tracker:indexed false . + +example:ib a rdf:Property ; + rdfs:domain example:B ; + rdfs:range xsd:integer . + +example:sb a rdf:Property ; + rdfs:domain example:B ; + rdfs:range xsd:string . + +example:fts1 a rdf:Property ; + rdfs:domain example:A ; + rdfs:range xsd:string ; + tracker:fulltextIndexed true . + +example:fts2 a rdf:Property ; + rdfs:domain example:B ; + rdfs:range xsd:string ; + nrl:maxCardinality 1 . + +example:nonFts a rdf:Property ; + rdfs:domain example:A ; + rdfs:range xsd:integer ; + nrl:maxCardinality 1 . + +# Add a property with label/comment +example:labeled a rdf:Property ; + rdfs:label "This is a label" ; + rdfs:comment "This is a comment" ; + rdfs:domain example:A ; + rdfs:range xsd:integer ; + nrl:maxCardinality 1 . diff --git a/tests/libtracker-data/change/source/99-example.ontology.v13 b/tests/libtracker-data/change/source/99-example.ontology.v13 new file mode 100644 index 000000000..b952987a4 --- /dev/null +++ b/tests/libtracker-data/change/source/99-example.ontology.v13 @@ -0,0 +1,76 @@ +@prefix example: <http://example/> . +@prefix rdf: <http://www.w3.org/1999/02/22-rdf-syntax-ns#> . +@prefix rdfs: <http://www.w3.org/2000/01/rdf-schema#> . +@prefix tracker: <http://tracker.api.gnome.org/ontology/v3/tracker#> . +@prefix xsd: <http://www.w3.org/2001/XMLSchema#> . +@prefix nrl: <http://tracker.api.gnome.org/ontology/v3/nrl#> . + +example: a tracker:Namespace, tracker:Ontology ; + tracker:lastModified "2010-03-23T11:00:12Z" ; + tracker:prefix "example" . + +example:A a rdfs:Class ; + rdfs:subClassOf rdfs:Resource . + +# We remove a domainIndex +example:DomA a rdfs:Class ; + tracker:domainIndex example:single2 ; + rdfs:subClassOf example:A . + +example:B a rdfs:Class ; + rdfs:subClassOf rdfs:Resource . + +example:b a rdf:Property ; + rdfs:domain example:A ; + rdfs:range example:B . + +example:i1 a rdf:Property ; + rdfs:domain example:A ; + rdfs:range xsd:integer . + +example:i2 a rdf:Property ; + rdfs:domain example:A ; + rdfs:range xsd:integer . + +example:single1 a rdf:Property ; + rdfs:domain example:A ; + rdfs:range xsd:integer ; + nrl:maxCardinality 1 ; + tracker:indexed false . + +example:single2 a rdf:Property ; + rdfs:domain example:A ; + rdfs:range xsd:integer ; + nrl:maxCardinality 1 ; + tracker:indexed false . + +example:ib a rdf:Property ; + rdfs:domain example:B ; + rdfs:range xsd:integer . + +example:sb a rdf:Property ; + rdfs:domain example:B ; + rdfs:range xsd:string . + +example:fts1 a rdf:Property ; + rdfs:domain example:A ; + rdfs:range xsd:string ; + tracker:fulltextIndexed true . + +example:fts2 a rdf:Property ; + rdfs:domain example:B ; + rdfs:range xsd:string ; + nrl:maxCardinality 1 . + +example:nonFts a rdf:Property ; + rdfs:domain example:A ; + rdfs:range xsd:integer ; + nrl:maxCardinality 1 . + +# Change label/comment +example:labeled a rdf:Property ; + rdfs:label "It ain't nothing but a label" ; + rdfs:comment "It ain't nothing but a comment" ; + rdfs:domain example:A ; + rdfs:range xsd:integer ; + nrl:maxCardinality 1 . diff --git a/tests/libtracker-data/tracker-ontology-change-test.c b/tests/libtracker-data/tracker-ontology-change-test.c index 38ef73246..228ed3ec8 100644 --- a/tests/libtracker-data/tracker-ontology-change-test.c +++ b/tests/libtracker-data/tracker-ontology-change-test.c @@ -67,6 +67,8 @@ const ChangeInfo changes[] = { { "99-example.ontology.v9", "99-example.queries.v9", NULL, NULL }, { "99-example.ontology.v10", "99-example.queries.v10", NULL, NULL }, { "99-example.ontology.v11", "99-example.queries.v11", "change/change-test-5", NULL }, + { "99-example.ontology.v12", "99-example.queries.v11", "change/change-test-5", NULL }, + { "99-example.ontology.v13", "99-example.queries.v11", "change/change-test-6", NULL }, { NULL } }; |