Repository: marmotta
Updated Branches:
  refs/heads/develop 4b41f6f92 -> f1e457b77


internal test case with complex query now running


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

Branch: refs/heads/develop
Commit: f1e457b778410f2c787ec603b476c9014a3e88f9
Parents: 4b41f6f
Author: Sebastian Schaffert <[email protected]>
Authored: Thu Sep 18 15:08:34 2014 +0200
Committer: Sebastian Schaffert <[email protected]>
Committed: Thu Sep 18 15:08:34 2014 +0200

----------------------------------------------------------------------
 .../sparql/builder/SQLAbstractSubquery.java     | 21 ++++++++++++++++++++
 .../kiwi/sparql/builder/SQLBuilder.java         |  9 +++++++++
 .../kiwi/sparql/builder/SQLSubQuery.java        |  2 +-
 .../marmotta/kiwi/sparql/builder/SQLUnion.java  |  2 +-
 4 files changed, 32 insertions(+), 2 deletions(-)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/marmotta/blob/f1e457b7/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 a0857ad..e57eeed 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
@@ -52,6 +52,27 @@ public abstract class SQLAbstractSubquery extends SQLClause {
     }
 
     /**
+     * Return true when the pattern involves JOINs with the NODES table; in 
this case we need to enclose the
+     * FROM clause with parentheses before joining with previous clauses.
+     * @return
+     */
+    public boolean hasJoinFields() {
+        return joinFields.size() > 0;
+    }
+
+
+    /**
+     * Return true if the FROM clause requires parenthesis before
+     *
+     * @return
+     */
+    @Override
+    public boolean needsParentheses() {
+        return hasJoinFields();
+    }
+
+
+    /**
      * Return the SQL variables used by the subquery; we need this to do 
proper mapping in the parent query.
      * @return
      */

http://git-wip-us.apache.org/repos/asf/marmotta/blob/f1e457b7/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 d65eac1..c6f3eb4 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
@@ -522,6 +522,7 @@ public class SQLBuilder {
         List<SQLVariable> vars = new ArrayList<>(variables.values());
         Collections.sort(vars, SQLVariable.sparqlNameComparator);
 
+
         for(SQLVariable v : vars) {
             if(v.getProjectionType() != ProjectionType.NONE) {
                 String projectedName = v.getName();
@@ -531,6 +532,14 @@ public class SQLBuilder {
             }
         }
 
+        // SQL enforces ORDER BY variables to occur in the select part in case 
distinct is set
+        int counter = 0;
+        if(distinct) {
+            for(OrderElem e : orderby) {
+                projections.add(evaluateExpression(e.getExpr(), OPTypes.VALUE) 
+ " AS _OB" + (++counter));
+            }
+        }
+
 
         StringBuilder selectClause = new StringBuilder();
 

http://git-wip-us.apache.org/repos/asf/marmotta/blob/f1e457b7/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 3c535cc..99da670 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
@@ -76,7 +76,7 @@ public class SQLSubQuery extends SQLAbstractSubquery {
                 .append(alias);
 
         for(VariableMapping var : getJoinFields()) {
-            fromClause.append(" INNER JOIN nodes AS ");
+            fromClause.append(" LEFT OUTER JOIN nodes AS ");  // outer join 
because binding might be NULL
             fromClause.append(alias + "_" + var.getParentName());
 
             fromClause.append(" ON " + alias + "." + var.getSubqueryName() + " 
= " + alias + "_" + var.getParentName() + ".id ");

http://git-wip-us.apache.org/repos/asf/marmotta/blob/f1e457b7/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 b270fb9..dbc1fd8 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
@@ -123,7 +123,7 @@ public class SQLUnion extends SQLAbstractSubquery {
                 .append(alias);
 
         for(VariableMapping var : getJoinFields()) {
-            fromClause.append(" INNER JOIN nodes AS ");
+            fromClause.append(" LEFT OUTER JOIN nodes AS "); // outer join 
because binding might be NULL
             fromClause.append(alias + "_" + var.getParentName());
 
             fromClause.append(" ON " + alias + "." + var.getSubqueryName() + " 
= " + alias + "_" + var.getParentName() + ".id ");

Reply via email to