diff --git a/core/queryparser/sparql/src/main/java/org/eclipse/rdf4j/query/parser/sparql/TupleExprBuilder.java b/core/queryparser/sparql/src/main/java/org/eclipse/rdf4j/query/parser/sparql/TupleExprBuilder.java index 0578f7152a9..a76e9143629 100644 --- a/core/queryparser/sparql/src/main/java/org/eclipse/rdf4j/query/parser/sparql/TupleExprBuilder.java +++ b/core/queryparser/sparql/src/main/java/org/eclipse/rdf4j/query/parser/sparql/TupleExprBuilder.java @@ -686,8 +686,9 @@ public TupleExpr visit(ASTSelect node, Object data) throws VisitorException { private static boolean isIllegalCombinedWithGroupByExpression(ValueExpr expr, List elements, Set groupNames) { - if (expr instanceof ValueConstant) + if (expr instanceof ValueConstant) { return false; + } VarNameCollector varNameCollector = new VarNameCollector(); expr.visit(varNameCollector); @@ -704,6 +705,10 @@ private static boolean isIllegalCombinedWithGroupByExpression(ValueExpr expr, Li private static boolean isIllegalCombinedWithGroupByExpression(String varName, List elements, Set groupNames) { + if (groupNames.contains(varName)) { + return false; + } + do { String prev = varName; diff --git a/core/queryparser/sparql/src/test/java/org/eclipse/rdf4j/query/parser/sparql/SPARQLParserTest.java b/core/queryparser/sparql/src/test/java/org/eclipse/rdf4j/query/parser/sparql/SPARQLParserTest.java index 2a2b48b6b1b..4097b924db9 100644 --- a/core/queryparser/sparql/src/test/java/org/eclipse/rdf4j/query/parser/sparql/SPARQLParserTest.java +++ b/core/queryparser/sparql/src/test/java/org/eclipse/rdf4j/query/parser/sparql/SPARQLParserTest.java @@ -517,4 +517,14 @@ public void testGroupByProjectionHandling_renameVariableWithAggregation() { parser.parseQuery(query, null); } + @Test + public void testGroupByProjectionHandling_function() { + String query = "select (strlen(concat(strlen(?s)+2, \"abc\", count(?o))) as ?len) where { \n" + + "?s ?p ?o .\n" + + "} group by ?s"; + + // should parse without error + parser.parseQuery(query, null); + } + }