cover the case of UNION with BIND (MARMOTTA-538)

Project: http://git-wip-us.apache.org/repos/asf/marmotta/repo
Commit: http://git-wip-us.apache.org/repos/asf/marmotta/commit/6d81ef53
Tree: http://git-wip-us.apache.org/repos/asf/marmotta/tree/6d81ef53
Diff: http://git-wip-us.apache.org/repos/asf/marmotta/diff/6d81ef53

Branch: refs/heads/ldp
Commit: 6d81ef5345ff1f47e19d939868d8a5bfbc4d1329
Parents: 4a33f41
Author: Sebastian Schaffert <[email protected]>
Authored: Wed Sep 17 18:24:38 2014 +0200
Committer: Sebastian Schaffert <[email protected]>
Committed: Wed Sep 17 18:24:38 2014 +0200

----------------------------------------------------------------------
 .../sparql/builder/SQLAbstractSubquery.java     |  8 ------
 .../kiwi/sparql/builder/SQLBuilder.java         |  2 +-
 .../kiwi/sparql/builder/SQLSubQuery.java        | 11 ---------
 .../marmotta/kiwi/sparql/builder/SQLUnion.java  | 15 -----------
 .../kiwi/sparql/test/KiWiSparqlJoinTest.java    |  9 ++++++-
 .../marmotta/kiwi/sparql/test/query28.sparql    | 26 ++++++++++++++++++++
 6 files changed, 35 insertions(+), 36 deletions(-)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/marmotta/blob/6d81ef53/libraries/kiwi/kiwi-sparql/src/main/java/org/apache/marmotta/kiwi/sparql/builder/SQLAbstractSubquery.java
----------------------------------------------------------------------
diff --git 
a/libraries/kiwi/kiwi-sparql/src/main/java/org/apache/marmotta/kiwi/sparql/builder/SQLAbstractSubquery.java
 
b/libraries/kiwi/kiwi-sparql/src/main/java/org/apache/marmotta/kiwi/sparql/builder/SQLAbstractSubquery.java
index e0c6e49..f2dd814 100644
--- 
a/libraries/kiwi/kiwi-sparql/src/main/java/org/apache/marmotta/kiwi/sparql/builder/SQLAbstractSubquery.java
+++ 
b/libraries/kiwi/kiwi-sparql/src/main/java/org/apache/marmotta/kiwi/sparql/builder/SQLAbstractSubquery.java
@@ -17,8 +17,6 @@
 
 package org.apache.marmotta.kiwi.sparql.builder;
 
-import org.openrdf.query.algebra.ValueExpr;
-
 import java.util.Set;
 
 /**
@@ -44,10 +42,4 @@ public abstract class SQLAbstractSubquery extends SQLClause {
      */
     public abstract Set<SQLVariable> getQueryVariables();
 
-    /**
-     * Return the projection type of an expression in this subquery. Needed 
for propagation up to the parent.
-     * @param expr
-     * @return
-     */
-    protected abstract ProjectionType getProjectionType(ValueExpr expr);
 }

http://git-wip-us.apache.org/repos/asf/marmotta/blob/6d81ef53/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 804fda9..c90b6da 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
@@ -281,7 +281,7 @@ public class SQLBuilder {
 
                         // select those variables that are really projected 
and not only needed in a grouping construct
                         if(new 
SQLProjectionFinder(query,sq_v.getSparqlName()).found) {
-                            sv.setProjectionType(ProjectionType.NODE);   // 
TODO: might need other types as well in case a value is created in children
+                            sv.setProjectionType(sq_v.getProjectionType());
                         }
 
                         addVariable(sv);

http://git-wip-us.apache.org/repos/asf/marmotta/blob/6d81ef53/libraries/kiwi/kiwi-sparql/src/main/java/org/apache/marmotta/kiwi/sparql/builder/SQLSubQuery.java
----------------------------------------------------------------------
diff --git 
a/libraries/kiwi/kiwi-sparql/src/main/java/org/apache/marmotta/kiwi/sparql/builder/SQLSubQuery.java
 
b/libraries/kiwi/kiwi-sparql/src/main/java/org/apache/marmotta/kiwi/sparql/builder/SQLSubQuery.java
index 1881122..b6c7215 100644
--- 
a/libraries/kiwi/kiwi-sparql/src/main/java/org/apache/marmotta/kiwi/sparql/builder/SQLSubQuery.java
+++ 
b/libraries/kiwi/kiwi-sparql/src/main/java/org/apache/marmotta/kiwi/sparql/builder/SQLSubQuery.java
@@ -22,7 +22,6 @@ import 
org.apache.marmotta.kiwi.sparql.exception.UnsatisfiableQueryException;
 import org.openrdf.query.BindingSet;
 import org.openrdf.query.Dataset;
 import org.openrdf.query.algebra.SubQueryValueOperator;
-import org.openrdf.query.algebra.ValueExpr;
 
 import java.util.HashSet;
 import java.util.Set;
@@ -78,14 +77,4 @@ public class SQLSubQuery extends SQLAbstractSubquery {
         return fromClause.toString();
     }
 
-    /**
-     * Return the projection type of an expression in this subquery. Needed 
for propagation up to the parent.
-     *
-     * @param expr
-     * @return
-     */
-    @Override
-    protected ProjectionType getProjectionType(ValueExpr expr) {
-        return builder.getProjectionType(expr);
-    }
 }

http://git-wip-us.apache.org/repos/asf/marmotta/blob/6d81ef53/libraries/kiwi/kiwi-sparql/src/main/java/org/apache/marmotta/kiwi/sparql/builder/SQLUnion.java
----------------------------------------------------------------------
diff --git 
a/libraries/kiwi/kiwi-sparql/src/main/java/org/apache/marmotta/kiwi/sparql/builder/SQLUnion.java
 
b/libraries/kiwi/kiwi-sparql/src/main/java/org/apache/marmotta/kiwi/sparql/builder/SQLUnion.java
index c681216..bb93260 100644
--- 
a/libraries/kiwi/kiwi-sparql/src/main/java/org/apache/marmotta/kiwi/sparql/builder/SQLUnion.java
+++ 
b/libraries/kiwi/kiwi-sparql/src/main/java/org/apache/marmotta/kiwi/sparql/builder/SQLUnion.java
@@ -22,7 +22,6 @@ import 
org.apache.marmotta.kiwi.sparql.exception.UnsatisfiableQueryException;
 import org.openrdf.query.BindingSet;
 import org.openrdf.query.Dataset;
 import org.openrdf.query.algebra.Union;
-import org.openrdf.query.algebra.ValueExpr;
 import org.slf4j.Logger;
 import org.slf4j.LoggerFactory;
 
@@ -126,20 +125,6 @@ public class SQLUnion extends SQLAbstractSubquery {
     }
 
 
-    /**
-     * Return the projection type of an expression in this subquery. Needed 
for propagation up to the parent.
-     *
-     * @param expr
-     * @return
-     */
-    @Override
-    protected ProjectionType getProjectionType(ValueExpr expr) {
-        ProjectionType r = left.getProjectionType(expr);
-        if(r == ProjectionType.STRING) {
-            r = right.getProjectionType(expr);
-        }
-        return r;
-    }
 }
 
 

http://git-wip-us.apache.org/repos/asf/marmotta/blob/6d81ef53/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 26291b8..1ac3343 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
@@ -290,6 +290,13 @@ public class KiWiSparqlJoinTest {
         testQuery("query26.sparql");
     }
 
+    // union with bind
+    @Test
+    public void testQuery28() throws Exception {
+        testQuery("query28.sparql");
+    }
+
+
     // INSERT/UPDATE
     @Test
     public void testUpdate01() throws Exception {
@@ -382,7 +389,7 @@ public class KiWiSparqlJoinTest {
             Assert.assertTrue(result1.hasNext());
 
 
-            compareResults(result1,result2);
+            compareResults(result1, result2);
 
         } catch(RepositoryException ex) {
             con1.rollback();

http://git-wip-us.apache.org/repos/asf/marmotta/blob/6d81ef53/libraries/kiwi/kiwi-sparql/src/test/resources/org/apache/marmotta/kiwi/sparql/test/query28.sparql
----------------------------------------------------------------------
diff --git 
a/libraries/kiwi/kiwi-sparql/src/test/resources/org/apache/marmotta/kiwi/sparql/test/query28.sparql
 
b/libraries/kiwi/kiwi-sparql/src/test/resources/org/apache/marmotta/kiwi/sparql/test/query28.sparql
new file mode 100644
index 0000000..6e68332
--- /dev/null
+++ 
b/libraries/kiwi/kiwi-sparql/src/test/resources/org/apache/marmotta/kiwi/sparql/test/query28.sparql
@@ -0,0 +1,26 @@
+#
+# 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/>
+
+SELECT ?p ?name ?likes ?fname ?isperson WHERE {
+    ?p foaf:name ?name .
+    { ?p foaf:knows ?likes . ?likes foaf:name ?fname bind(true as ?isperson) }
+    UNION
+    { ?p foaf:interest ?likes bind(false as ?isperson)}
+
+}
\ No newline at end of file

Reply via email to