MARMOTTA-578: added missing variables to GROUP BY that required to be present by its usage in ORDER BY
Project: http://git-wip-us.apache.org/repos/asf/marmotta/repo Commit: http://git-wip-us.apache.org/repos/asf/marmotta/commit/247e0369 Tree: http://git-wip-us.apache.org/repos/asf/marmotta/tree/247e0369 Diff: http://git-wip-us.apache.org/repos/asf/marmotta/diff/247e0369 Branch: refs/heads/develop Commit: 247e036959c54c5642451384122f6969d0964f14 Parents: 0b586c0 Author: Sergio Fernández <[email protected]> Authored: Tue Dec 9 19:59:22 2014 +0100 Committer: Sergio Fernández <[email protected]> Committed: Tue Dec 9 19:59:22 2014 +0100 ---------------------------------------------------------------------- .../marmotta/kiwi/sparql/builder/SQLBuilder.java | 19 +++++++++++++++---- 1 file changed, 15 insertions(+), 4 deletions(-) ---------------------------------------------------------------------- http://git-wip-us.apache.org/repos/asf/marmotta/blob/247e0369/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 fb6d60a..0b61ae6 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 @@ -45,7 +45,8 @@ import java.util.*; /** * A builder for translating SPARQL queries into SQL. * - * @author Sebastian Schaffert ([email protected]) + * @author Sebastian Schaffert + * @author Sergio Fernández */ public class SQLBuilder { @@ -165,7 +166,6 @@ public class SQLBuilder { prepareBuilder(); } - public Map<String, SQLVariable> getVariables() { return variables; } @@ -610,7 +610,6 @@ public class SQLBuilder { } } - private StringBuilder buildSelectClause() { List<String> projections = new ArrayList<>(); @@ -618,7 +617,6 @@ public class SQLBuilder { List<SQLVariable> vars = new ArrayList<>(variables.values()); Collections.sort(vars, SQLVariable.sparqlNameComparator); - for(SQLVariable v : vars) { if(v.getProjectionType() != ValueType.NONE && (projectedVars.isEmpty() || projectedVars.contains(v.getSparqlName()))) { String projectedName = v.getName(); @@ -791,6 +789,7 @@ public class SQLBuilder { private StringBuilder buildGroupClause() { StringBuilder groupClause = new StringBuilder(); + if(groupLabels.size() > 0) { for(Iterator<String> it = groupLabels.iterator(); it.hasNext(); ) { SQLVariable sv = variables.get(it.next()); @@ -809,6 +808,18 @@ public class SQLBuilder { groupClause.append(", "); } } + + if (orderby.size() > 0) { + groupClause.append(", "); + for(Iterator<OrderElem> it = orderby.iterator(); it.hasNext(); ) { + OrderElem elem = it.next(); + groupClause.append(evaluateExpression(elem.getExpr(), ValueType.STRING)); + if (it.hasNext()) { + groupClause.append(", "); + } + } + } + groupClause.append(" \n"); }
