Repository: marmotta Updated Branches: refs/heads/develop 8e0160f8d -> 1e30102ae
fixes MARMOTTA-546 (SPARQL bound bug) Project: http://git-wip-us.apache.org/repos/asf/marmotta/repo Commit: http://git-wip-us.apache.org/repos/asf/marmotta/commit/d8e0e30c Tree: http://git-wip-us.apache.org/repos/asf/marmotta/tree/d8e0e30c Diff: http://git-wip-us.apache.org/repos/asf/marmotta/diff/d8e0e30c Branch: refs/heads/develop Commit: d8e0e30ce8e088a0b9f1eff6f5ad07e5a8f2ea5b Parents: 3bd8124 Author: Sebastian Schaffert <[email protected]> Authored: Mon Oct 6 11:27:47 2014 +0200 Committer: Sebastian Schaffert <[email protected]> Committed: Mon Oct 6 11:27:47 2014 +0200 ---------------------------------------------------------------------- .../kiwi/sparql/builder/SQLBuilder.java | 10 +++++++ .../evaluation/KiWiEvaluationStrategyImpl.java | 2 ++ .../kiwi/sparql/test/KiWiSparqlJoinTest.java | 23 +++++++++++++++- .../marmotta/kiwi/sparql/test/query34.sparql | 28 ++++++++++++++++++++ 4 files changed, 62 insertions(+), 1 deletion(-) ---------------------------------------------------------------------- http://git-wip-us.apache.org/repos/asf/marmotta/blob/d8e0e30c/libraries/kiwi/kiwi-sparql/src/main/java/org/apache/marmotta/kiwi/sparql/builder/SQLBuilder.java ---------------------------------------------------------------------- diff --git a/libraries/kiwi/kiwi-sparql/src/main/java/org/apache/marmotta/kiwi/sparql/builder/SQLBuilder.java b/libraries/kiwi/kiwi-sparql/src/main/java/org/apache/marmotta/kiwi/sparql/builder/SQLBuilder.java index a160806..f2f5dde 100644 --- a/libraries/kiwi/kiwi-sparql/src/main/java/org/apache/marmotta/kiwi/sparql/builder/SQLBuilder.java +++ b/libraries/kiwi/kiwi-sparql/src/main/java/org/apache/marmotta/kiwi/sparql/builder/SQLBuilder.java @@ -759,6 +759,16 @@ public class SQLBuilder { } else { return "(" + value + " = '"+pattern.getValue().stringValue()+"' OR " + dialect.getILike(value, "'" + pattern.getValue().stringValue() + "-%' )"); } + } else if(expr instanceof Bound) { + ValueExpr arg = ((Bound)expr).getArg(); + + if(arg instanceof ValueConstant) { + return Boolean.toString(true); + } else if(arg instanceof Var) { + + return "(" + evaluateExpression(arg, optype) + " IS NOT NULL)"; + } + } else if(expr instanceof IsResource) { ValueExpr arg = ((UnaryValueOperator)expr).getArg(); http://git-wip-us.apache.org/repos/asf/marmotta/blob/d8e0e30c/libraries/kiwi/kiwi-sparql/src/main/java/org/apache/marmotta/kiwi/sparql/evaluation/KiWiEvaluationStrategyImpl.java ---------------------------------------------------------------------- diff --git a/libraries/kiwi/kiwi-sparql/src/main/java/org/apache/marmotta/kiwi/sparql/evaluation/KiWiEvaluationStrategyImpl.java b/libraries/kiwi/kiwi-sparql/src/main/java/org/apache/marmotta/kiwi/sparql/evaluation/KiWiEvaluationStrategyImpl.java index e625a17..14e69d8 100644 --- a/libraries/kiwi/kiwi-sparql/src/main/java/org/apache/marmotta/kiwi/sparql/evaluation/KiWiEvaluationStrategyImpl.java +++ b/libraries/kiwi/kiwi-sparql/src/main/java/org/apache/marmotta/kiwi/sparql/evaluation/KiWiEvaluationStrategyImpl.java @@ -335,6 +335,8 @@ public class KiWiEvaluationStrategyImpl extends EvaluationStrategyImpl{ return isAtomic(((Str) expr).getArg()); } else if(expr instanceof Label) { return isAtomic(((UnaryValueOperator) expr).getArg()); + } else if(expr instanceof Bound) { + return true; } else if(expr instanceof IsResource) { return isAtomic(((UnaryValueOperator) expr).getArg()); } else if(expr instanceof IsURI) { http://git-wip-us.apache.org/repos/asf/marmotta/blob/d8e0e30c/libraries/kiwi/kiwi-sparql/src/test/java/org/apache/marmotta/kiwi/sparql/test/KiWiSparqlJoinTest.java ---------------------------------------------------------------------- diff --git a/libraries/kiwi/kiwi-sparql/src/test/java/org/apache/marmotta/kiwi/sparql/test/KiWiSparqlJoinTest.java b/libraries/kiwi/kiwi-sparql/src/test/java/org/apache/marmotta/kiwi/sparql/test/KiWiSparqlJoinTest.java index db78564..9450126 100644 --- a/libraries/kiwi/kiwi-sparql/src/test/java/org/apache/marmotta/kiwi/sparql/test/KiWiSparqlJoinTest.java +++ b/libraries/kiwi/kiwi-sparql/src/test/java/org/apache/marmotta/kiwi/sparql/test/KiWiSparqlJoinTest.java @@ -36,6 +36,7 @@ import org.junit.*; import org.junit.rules.TestWatcher; import org.junit.runner.Description; import org.junit.runner.RunWith; +import org.openrdf.model.BNode; import org.openrdf.model.Statement; import org.openrdf.model.URI; import org.openrdf.model.impl.URIImpl; @@ -331,6 +332,13 @@ public class KiWiSparqlJoinTest { testQuery("query33.sparql"); } + // MARMOTTA-546 + @Test + public void testQuery34() throws Exception { + testQuery("query34.sparql"); + } + + // INSERT/UPDATE @Test @@ -502,6 +510,14 @@ public class KiWiSparqlJoinTest { Set<Set<Pair>> set1 = new HashSet<Set<Pair>>(Lists.transform(bindingSets1,new BindingSetPairFunction())); Set<Set<Pair>> set2 = new HashSet<Set<Pair>>(Lists.transform(bindingSets2,new BindingSetPairFunction())); + for(Set<Pair> p : set1) { + Assert.assertTrue("binding " + p + " from result set not found in reference set", set2.contains(p)); + } + for(Set<Pair> p : set2) { + Assert.assertTrue("binding " + p + " from reference set not found in result set", set1.contains(p)); + } + + Assert.assertTrue(CollectionUtils.isEqualCollection(set1, set2)); } @@ -512,7 +528,7 @@ public class KiWiSparqlJoinTest { Set<Pair> result = new HashSet<Pair>(); for(Binding b : input) { - Pair p = new Pair(b.getName(), b.getValue() != null ? b.getValue().stringValue() : null); + Pair p = new Pair(b.getName(), b.getValue() != null ? (b.getValue() instanceof BNode ? "_" : b.getValue().stringValue()) : null); result.add(p); } @@ -555,6 +571,11 @@ public class KiWiSparqlJoinTest { result = 31 * result + (value != null ? value.hashCode() : 0); return result; } + + @Override + public String toString() { + return key + " = " + value; + } } http://git-wip-us.apache.org/repos/asf/marmotta/blob/d8e0e30c/libraries/kiwi/kiwi-sparql/src/test/resources/org/apache/marmotta/kiwi/sparql/test/query34.sparql ---------------------------------------------------------------------- diff --git a/libraries/kiwi/kiwi-sparql/src/test/resources/org/apache/marmotta/kiwi/sparql/test/query34.sparql b/libraries/kiwi/kiwi-sparql/src/test/resources/org/apache/marmotta/kiwi/sparql/test/query34.sparql new file mode 100644 index 0000000..7b73b41 --- /dev/null +++ b/libraries/kiwi/kiwi-sparql/src/test/resources/org/apache/marmotta/kiwi/sparql/test/query34.sparql @@ -0,0 +1,28 @@ +# +# Licensed to the Apache Software Foundation (ASF) under one +# or more contributor license agreements. See the NOTICE file +# distributed with this work for additional information +# regarding copyright ownership. The ASF licenses this file +# to you under the Apache License, Version 2.0 (the +# "License"); you may not use this file except in compliance +# with the License. You may obtain a copy of the License at +# +# http://www.apache.org/licenses/LICENSE-2.0 +# +# Unless required by applicable law or agreed to in writing, software +# distributed under the License is distributed on an "AS IS" BASIS, +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +# See the License for the specific language governing permissions and +# limitations under the License. +# +PREFIX foaf: <http://xmlns.com/foaf/0.1/> +PREFIX dc: <http://purl.org/dc/elements/1.1/> + + +# Test for MARMOTTA-546 + +SELECT DISTINCT ?property ?hasValue ?isValueOf WHERE { + { <http://localhost:8080/LMF/resource/hans_meier> ?property ?hasValue } +UNION + { ?isValueOf ?property <http://localhost:8080/LMF/resource/hans_meier> } +} ORDER BY (!BOUND(?hasValue)) ?property ?hasValue ?isValueOf \ No newline at end of file
