summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorSam Thursfield <sam@afuera.me.uk>2020-05-13 18:37:22 +0000
committerSam Thursfield <sam@afuera.me.uk>2020-05-13 18:37:22 +0000
commit3a740a34fdb3e1f5e108637512ba0dde73753f72 (patch)
treec7f802ea9670836dd9f814fbb808f75c976a351a
parenta6e0f8af460a753358c34baacfa8cbfa36c9f706 (diff)
parent75c73934312b554bcb584c37dd1831d16deae6c5 (diff)
downloadtracker-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
-rw-r--r--src/libtracker-data/tracker-data-manager.c16
-rw-r--r--tests/libtracker-data/change/change-test-6.out1
-rw-r--r--tests/libtracker-data/change/change-test-6.rq2
-rw-r--r--tests/libtracker-data/change/source/99-example.ontology.v1276
-rw-r--r--tests/libtracker-data/change/source/99-example.ontology.v1376
-rw-r--r--tests/libtracker-data/tracker-ontology-change-test.c2
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 }
};