[
https://issues.apache.org/jira/browse/MARMOTTA-657?page=com.atlassian.jira.plugin.system.issuetabpanels:comment-tabpanel&focusedCommentId=15966932#comment-15966932
]
ASF GitHub Bot commented on MARMOTTA-657:
-----------------------------------------
Github user cuent commented on a diff in the pull request:
https://github.com/apache/marmotta/pull/27#discussion_r111057387
--- Diff:
libraries/kiwi/kiwi-sparql/src/main/java/org/apache/marmotta/kiwi/sparql/builder/SQLBuilder.java
---
@@ -796,13 +848,13 @@ private StringBuilder buildGroupClause() {
}
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(", ");
+ String expr = evaluateExpression(elem.getExpr(),
ValueType.STRING);
+ if (StringUtils.indexOfAny(expr, aggregateFuncs) !=
-1) {
+ continue;
}
+ groupClause.append(", ").append(expr);
--- End diff --
Another option to avoid aggregation functions.
- **Disadvantage** Longer code.
- **Advantage** Don't need to use a specific list.
```java
if (orderby.size() > 0) {
for(Iterator<OrderElem> it = orderby.iterator();
it.hasNext(); ) {
OrderElem elem = it.next();
ValueExpr expr = elem.getExpr();
if (expr instanceof Var){
Var var = (Var)expr;
SQLVariable sv = variables.get(var.getName());
List<ValueExpr> bindings1 = sv.getBindings();
if (bindings1!= null)
{
boolean aggregateOpPresent=false;
for (ValueExpr vexpr: bindings1){
if (vexpr instanceof AggregateOperator){
aggregateOpPresent=true;
break;
}
}
if (aggregateOpPresent){
continue;
}
}
}
groupClause.append(",
").append(evaluateExpression(expr, ValueType.STRING));
}
}
```
> SPARQL query GROUP BY with ORDER BY clause fails
> ------------------------------------------------
>
> Key: MARMOTTA-657
> URL: https://issues.apache.org/jira/browse/MARMOTTA-657
> Project: Marmotta
> Issue Type: Bug
> Affects Versions: 3.4.0
> Environment: Ubuntu 16.04
> PostgreSQL 9.5.4 (empty database)
> openjdk version "1.8.0_91"
> OpenJDK Runtime Environment (build 1.8.0_91-8u91-b14-3ubuntu1~16.04.1-b14)
> OpenJDK 64-Bit Server VM (build 25.91-b14, mixed mode)
> Reporter: Osma Suominen
> Labels: sparql
> Fix For: 3.4.0
>
>
> I noticed that the following SPARQL query, used to count the number of
> triples in different graphs, fails on the current 3.4.0-SNAPSHOT (using
> PostgreSQL 9.5 as backend, starting from an empty database). It works on
> 3.3.0 using the same database.
> {noformat}
> SELECT ?g (COUNT(*) AS ?c) {
> GRAPH ?g {
> ?s ?p ?o
> }
> }
> GROUP BY ?g
> ORDER BY DESC(?c)
> {noformat}
> The error in the Tomcat log is:
> {noformat}
> 09:32:30.101 ERROR - error while evaluating query: {}
> org.openrdf.query.QueryEvaluationException:
> org.postgresql.util.PSQLException: ERROR: aggregate functions are not allowed
> in GROUP BY
> Position: 183
> at
> org.openrdf.repository.sail.SailTupleQuery.evaluate(SailTupleQuery.java:67)
> at
> org.openrdf.repository.sail.SailTupleQuery.evaluate(SailTupleQuery.java:75)
> at
> org.apache.marmotta.platform.sparql.services.sparql.SparqlServiceImpl.query(SparqlServiceImpl.java:344)
> at
> org.apache.marmotta.platform.sparql.services.sparql.SparqlServiceImpl.query(SparqlServiceImpl.java:351)
> at
> org.apache.marmotta.platform.sparql.services.sparql.SparqlServiceImpl.access$700(SparqlServiceImpl.java:60)
> at
> org.apache.marmotta.platform.sparql.services.sparql.SparqlServiceImpl$5.call(SparqlServiceImpl.java:290)
> at
> org.apache.marmotta.platform.sparql.services.sparql.SparqlServiceImpl$5.call(SparqlServiceImpl.java:279)
> at java.util.concurrent.FutureTask.run(FutureTask.java:266)
> at
> java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1142)
> at
> java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:617)
> at java.lang.Thread.run(Thread.java:745)
> Caused by: org.openrdf.sail.SailException: org.postgresql.util.PSQLException:
> ERROR: aggregate functions are not allowed in GROUP BY
> Position: 183
> at
> org.apache.marmotta.kiwi.sparql.sail.KiWiSparqlSailConnection.evaluate(KiWiSparqlSailConnection.java:101)
> at
> org.openrdf.sail.helpers.SailConnectionWrapper.evaluate(SailConnectionWrapper.java:95)
> at
> org.openrdf.repository.sail.SailTupleQuery.evaluate(SailTupleQuery.java:60)
> ... 10 common frames omitted
> Caused by: org.openrdf.query.QueryEvaluationException:
> org.postgresql.util.PSQLException: ERROR: aggregate functions are not allowed
> in GROUP BY
> Position: 183
> at
> org.apache.marmotta.kiwi.sparql.evaluation.KiWiEvaluationStrategy.evaluateNative(KiWiEvaluationStrategy.java:398)
> at
> org.apache.marmotta.kiwi.sparql.evaluation.KiWiEvaluationStrategy.evaluate(KiWiEvaluationStrategy.java:133)
> at
> org.openrdf.query.algebra.evaluation.impl.EvaluationStrategyImpl.evaluate(EvaluationStrategyImpl.java:616)
> at
> org.openrdf.query.algebra.evaluation.impl.EvaluationStrategyImpl.evaluate(EvaluationStrategyImpl.java:207)
> at
> org.openrdf.query.algebra.evaluation.impl.EvaluationStrategyImpl.evaluate(EvaluationStrategyImpl.java:687)
> at
> org.apache.marmotta.kiwi.sparql.evaluation.KiWiEvaluationStrategy.evaluate(KiWiEvaluationStrategy.java:108)
> at
> org.openrdf.query.algebra.evaluation.impl.EvaluationStrategyImpl.evaluate(EvaluationStrategyImpl.java:589)
> at
> org.openrdf.query.algebra.evaluation.impl.EvaluationStrategyImpl.evaluate(EvaluationStrategyImpl.java:207)
> at
> org.openrdf.query.algebra.evaluation.impl.EvaluationStrategyImpl.evaluate(EvaluationStrategyImpl.java:621)
> at
> org.openrdf.query.algebra.evaluation.impl.EvaluationStrategyImpl.evaluate(EvaluationStrategyImpl.java:207)
> at
> org.apache.marmotta.kiwi.sparql.sail.KiWiSparqlSailConnection.evaluate(KiWiSparqlSailConnection.java:98)
> ... 12 common frames omitted
> Caused by: org.postgresql.util.PSQLException: ERROR: aggregate functions are
> not allowed in GROUP BY
> Position: 183
> at
> org.postgresql.core.v3.QueryExecutorImpl.receiveErrorResponse(QueryExecutorImpl.java:2161)
> at
> org.postgresql.core.v3.QueryExecutorImpl.processResults(QueryExecutorImpl.java:1890)
> at
> org.postgresql.core.v3.QueryExecutorImpl.execute(QueryExecutorImpl.java:255)
> at
> org.postgresql.jdbc2.AbstractJdbc2Statement.execute(AbstractJdbc2Statement.java:560)
> at
> org.postgresql.jdbc2.AbstractJdbc2Statement.executeWithFlags(AbstractJdbc2Statement.java:417)
> at
> org.postgresql.jdbc2.AbstractJdbc2Statement.executeQuery(AbstractJdbc2Statement.java:302)
> at
> org.apache.marmotta.kiwi.sparql.evaluation.KiWiEvaluationStrategy$1.call(KiWiEvaluationStrategy.java:217)
> at
> org.apache.marmotta.kiwi.sparql.evaluation.KiWiEvaluationStrategy$1.call(KiWiEvaluationStrategy.java:213)
> ... 4 common frames omitted
> {noformat}
> Originally reported on users@marmotta:
> https://lists.apache.org/thread.html/7df333d6678a853e0ae013178660a78cd7bc5438caaf8ee207ff643f@%3Cusers.marmotta.apache.org%3E
--
This message was sent by Atlassian JIRA
(v6.3.15#6346)