Repository: marmotta Updated Branches: refs/heads/develop 11cb38902 -> 90620e29a
SPARQL: - fix extension use in statement patterns Project: http://git-wip-us.apache.org/repos/asf/marmotta/repo Commit: http://git-wip-us.apache.org/repos/asf/marmotta/commit/90620e29 Tree: http://git-wip-us.apache.org/repos/asf/marmotta/tree/90620e29 Diff: http://git-wip-us.apache.org/repos/asf/marmotta/diff/90620e29 Branch: refs/heads/develop Commit: 90620e29ad6fe016515b4b00fb2867196844ed88 Parents: 11cb389 Author: Sebastian Schaffert <[email protected]> Authored: Sun Nov 9 18:10:54 2014 +0100 Committer: Sebastian Schaffert <[email protected]> Committed: Sun Nov 9 18:10:54 2014 +0100 ---------------------------------------------------------------------- .../kiwi/sparql/builder/SQLBuilder.java | 26 +++++++++++++++++++- .../sparql/builder/collect/ConditionFinder.java | 12 ++++----- 2 files changed, 30 insertions(+), 8 deletions(-) ---------------------------------------------------------------------- http://git-wip-us.apache.org/repos/asf/marmotta/blob/90620e29/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 bf79193..ac24190 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 @@ -342,6 +342,9 @@ public class SQLBuilder { try { sv.getExpressions().add(evaluateExpression(ext.getExpr(), ValueType.NODE)); + if(sv.getProjectionType() == ValueType.NODE && getProjectionType(ext.getExpr()) != ValueType.NODE) { + sv.setProjectionType(getProjectionType(ext.getExpr())); + } } catch(IllegalStateException ex) { deferredExtensions.add(ext); } @@ -364,7 +367,28 @@ public class SQLBuilder { // if the variable has been used before, add a join condition to the first occurrence if(sv.getExpressions().size() > 0) { - p.getConditions().add(sv.getExpressions().get(0) + " = " + pName + "." + positions[i]); + switch (sv.getProjectionType()) { + case INT: + p.getConditions().add(sv.getExpressions().get(0) + " = " + sv.getAlias() + ".ivalue"); + break; + case DOUBLE: + p.getConditions().add(sv.getExpressions().get(0) + " = " + sv.getAlias() + ".dvalue"); + break; + case DATE: + p.getConditions().add(sv.getExpressions().get(0) + " = " + sv.getAlias() + ".tvalue"); + break; + case BOOL: + p.getConditions().add(sv.getExpressions().get(0) + " = " + sv.getAlias() + ".bvalue"); + break; + case URI: + case STRING: + p.getConditions().add(sv.getExpressions().get(0) + " = " + sv.getAlias() + ".svalue"); + break; + + default: + p.getConditions().add(sv.getExpressions().get(0) + " = " + pName + "." + positions[i]); + break; + } } sv.getExpressions().add(pName + "." + positions[i]); http://git-wip-us.apache.org/repos/asf/marmotta/blob/90620e29/libraries/kiwi/kiwi-sparql/src/main/java/org/apache/marmotta/kiwi/sparql/builder/collect/ConditionFinder.java ---------------------------------------------------------------------- diff --git a/libraries/kiwi/kiwi-sparql/src/main/java/org/apache/marmotta/kiwi/sparql/builder/collect/ConditionFinder.java b/libraries/kiwi/kiwi-sparql/src/main/java/org/apache/marmotta/kiwi/sparql/builder/collect/ConditionFinder.java index 81519ca..64fd830 100644 --- a/libraries/kiwi/kiwi-sparql/src/main/java/org/apache/marmotta/kiwi/sparql/builder/collect/ConditionFinder.java +++ b/libraries/kiwi/kiwi-sparql/src/main/java/org/apache/marmotta/kiwi/sparql/builder/collect/ConditionFinder.java @@ -253,13 +253,11 @@ public class ConditionFinder extends QueryModelVisitorBase<RuntimeException> { @Override public void meet(ExtensionElem node) throws RuntimeException { - if(neededVariables.contains(node.getName())) { - valueNeeded++; - super.meet(node); - valueNeeded--; - } else { - super.meet(node); - } + neededVariables.add(node.getName()); + + valueNeeded++; + super.meet(node); + valueNeeded--; } }
