You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@marmotta.apache.org by ss...@apache.org on 2014/10/30 12:21:53 UTC
git commit: fix complex subselects
Repository: marmotta
Updated Branches:
refs/heads/develop 71d5dd167 -> 4daf7bdf7
fix complex subselects
Project: http://git-wip-us.apache.org/repos/asf/marmotta/repo
Commit: http://git-wip-us.apache.org/repos/asf/marmotta/commit/4daf7bdf
Tree: http://git-wip-us.apache.org/repos/asf/marmotta/tree/4daf7bdf
Diff: http://git-wip-us.apache.org/repos/asf/marmotta/diff/4daf7bdf
Branch: refs/heads/develop
Commit: 4daf7bdf7eb8a61cfbfa5f8463269fc8523843e7
Parents: 71d5dd1
Author: Sebastian Schaffert <ss...@apache.org>
Authored: Thu Oct 30 12:22:29 2014 +0100
Committer: Sebastian Schaffert <ss...@apache.org>
Committed: Thu Oct 30 12:22:29 2014 +0100
----------------------------------------------------------------------
.../kiwi/sparql/builder/SQLBuilder.java | 20 ++++++++++++++------
.../kiwi/sparql/builder/SQLFragment.java | 5 ++++-
.../kiwi/sparql/builder/SQLSubQuery.java | 4 +++-
3 files changed, 21 insertions(+), 8 deletions(-)
----------------------------------------------------------------------
http://git-wip-us.apache.org/repos/asf/marmotta/blob/4daf7bdf/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 41fc13e..8087a16 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
@@ -487,8 +487,8 @@ public class SQLBuilder {
// the conditions of the first fragment need to be placed in the WHERE part of the query, because
// there is not necessarily a JOIN ... ON where we can put it
f.setConditionPosition(SQLFragment.ConditionPosition.WHERE);
- first = false;
}
+ first = false;
for (SQLPattern p : f.getPatterns()) {
for(Map.Entry<SQLPattern.TripleColumns, Var> fieldEntry : p.getTripleFields().entrySet()) {
@@ -584,7 +584,7 @@ public class SQLBuilder {
// 1. for the first pattern of the first fragment, we add the conditions to the WHERE clause
for(SQLFragment fragment : fragments) {
- if(fragment.getConditionPosition() == SQLFragment.ConditionPosition.WHERE) {
+ if(fragment.getConditionPosition() != SQLFragment.ConditionPosition.JOIN) {
whereConditions.add(fragment.buildConditionClause());
}
}
@@ -627,20 +627,28 @@ public class SQLBuilder {
private StringBuilder buildHavingClause() {
// list of where conditions that will later be connected by AND
- List<String> havingConditions = new LinkedList<String>();
+ List<CharSequence> havingConditions = new LinkedList<CharSequence>();
// 1. for the first pattern of the first fragment, we add the conditions to the WHERE clause
for(SQLFragment fragment : fragments) {
if(fragment.getConditionPosition() == SQLFragment.ConditionPosition.HAVING) {
- havingConditions.add(fragment.buildConditionClause());
+ StringBuilder conditionClause = new StringBuilder();
+ for(Iterator<String> cit = fragment.getConditions().iterator(); cit.hasNext(); ) {
+ if(conditionClause.length() > 0) {
+ conditionClause.append("\n AND ");
+ }
+ conditionClause.append(cit.next());
+ }
+
+ havingConditions.add(conditionClause);
}
}
// construct the having clause
StringBuilder havingClause = new StringBuilder();
- for(Iterator<String> it = havingConditions.iterator(); it.hasNext(); ) {
- String condition = it.next();
+ for(Iterator<CharSequence> it = havingConditions.iterator(); it.hasNext(); ) {
+ CharSequence condition = it.next();
if(condition.length() > 0) {
havingClause.append(condition);
havingClause.append("\n ");
http://git-wip-us.apache.org/repos/asf/marmotta/blob/4daf7bdf/libraries/kiwi/kiwi-sparql/src/main/java/org/apache/marmotta/kiwi/sparql/builder/SQLFragment.java
----------------------------------------------------------------------
diff --git a/libraries/kiwi/kiwi-sparql/src/main/java/org/apache/marmotta/kiwi/sparql/builder/SQLFragment.java b/libraries/kiwi/kiwi-sparql/src/main/java/org/apache/marmotta/kiwi/sparql/builder/SQLFragment.java
index 155339b..552f08b 100644
--- a/libraries/kiwi/kiwi-sparql/src/main/java/org/apache/marmotta/kiwi/sparql/builder/SQLFragment.java
+++ b/libraries/kiwi/kiwi-sparql/src/main/java/org/apache/marmotta/kiwi/sparql/builder/SQLFragment.java
@@ -151,6 +151,7 @@ public class SQLFragment extends SQLClause {
* Build the combined condition clause for this fragment. This will be the empty string when the conditionPosition is JOIN.
* @return
*/
+ @Override
public String buildConditionClause() {
StringBuilder conditionClause = new StringBuilder();
@@ -160,13 +161,15 @@ public class SQLFragment extends SQLClause {
// in case we add the condition to the JOIN, build first the conditions for the pattern; otherwise, the
// conditions for the pattern will be added to the WHERE clause
- if(conditionClause.length() > 0) {
+ if (conditionClause.length() > 0) {
conditionClause.append("\n AND ");
}
conditionClause.append(p.buildConditionClause());
}
+ }
+ if(conditionPosition == ConditionPosition.WHERE) {
// in case the pattern is the last of the fragment, also add the filter conditions of the fragment
// if this is the last pattern of the fragment, add the filter conditions
for(Iterator<String> cit = getConditions().iterator(); cit.hasNext(); ) {
http://git-wip-us.apache.org/repos/asf/marmotta/blob/4daf7bdf/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 d2bb74a..08acda5 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
@@ -54,7 +54,9 @@ public class SQLSubQuery extends SQLAbstractSubquery {
builder = new SQLBuilder(query.getArg(), bindings, dataset, converter, dialect, projectedVars);
for(SQLVariable svl : builder.getVariables().values()) {
- variables.add(svl);
+ if(projectedVars.contains(svl.getSparqlName())) {
+ variables.add(svl);
+ }
}
}