Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
Original file line number Diff line number Diff line change
Expand Up @@ -103,7 +103,6 @@ public Query toNextQuery(AskQueryAst askQueryAst) {
*/
public Query toNextQuery(SelectQueryAst selectQueryAst) {
Objects.requireNonNull(selectQueryAst, "selectQueryAst");
rejectUnsupportedSelectClauses(selectQueryAst);

WhereCompiler compiler = whereCompiler.withPrologue(selectQueryAst.prologue());
Query query = createQuery(
Expand All @@ -114,6 +113,7 @@ public Query toNextQuery(SelectQueryAst selectQueryAst) {
compiler);
applyGroupBy(query, selectQueryAst.solutionModifier(), compiler);
applyProjection(query, selectQueryAst.projection(), compiler);
// Full deduplication or preserving cardinality is permitted by SELECT REDUCED.
query.setDistinct(selectQueryAst.solutionModifier().distinct());
applyOrderBy(query, selectQueryAst.solutionModifier(), compiler);
applyHaving(query, selectQueryAst.solutionModifier(), compiler);
Expand Down Expand Up @@ -220,23 +220,6 @@ private static void rejectUnsupportedAskClauses(AskQueryAst askQueryAst) {
}
}

/**
* Rejects unsupported clauses for {@code SELECT} queries.
*
* <p>Planned roadmap items:
* <ul>
* <li>Issue #387: {@code GROUP BY} / {@code HAVING} require aggregate semantics, not only AST field propagation.</li>
* <li>Issue #387: {@code REDUCED} support aligned with next-pipeline query-form policy.</li>
* </ul>
* </p>
*/
private static void rejectUnsupportedSelectClauses(SelectQueryAst selectQueryAst) {
SolutionModifierAst solutionModifier = selectQueryAst.solutionModifier();
if (solutionModifier.reduced()) {
throw new UnsupportedQueryFeatureException("REDUCED is not supported yet by the next pipeline for SELECT");
}
}

/**
* Rejects unsupported clauses for {@code DESCRIBE} queries.
*
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -90,6 +90,36 @@ void selectJoinRunsEndToEnd() {
assertFalse(result.hasNext());
}

@Test
@DisplayName("SELECT REDUCED executes and returns projected bindings")
void selectReducedExecutesAndReturnsBindings() {
try (var result = executor.evaluateTuple("""
SELECT REDUCED ?name WHERE {
VALUES (?name ?id) { ("Alice" 1) ("Bob" 3) }
} ORDER BY ?name
""")) {
assertEquals(List.of("name"), result.getBindingNames());
assertTrue(result.hasNext());
assertEquals(valueFactory.createLiteral("Alice"), result.next().getValue("name"));
assertTrue(result.hasNext());
assertEquals(valueFactory.createLiteral("Bob"), result.next().getValue("name"));
assertFalse(result.hasNext());
}
}

@Test
@DisplayName("SELECT REDUCED * executes without error")
void selectReducedStarExecutes() {
try (var result = executor.evaluateTuple("""
SELECT REDUCED * WHERE { VALUES ?name { "Alice" } }
""")) {
assertEquals(List.of("name"), result.getBindingNames());
assertTrue(result.hasNext());
assertEquals(valueFactory.createLiteral("Alice"), result.next().getValue("name"));
assertFalse(result.hasNext());
}
}

@Test
@DisplayName("FILTER evaluates native numeric expressions")
void filterRunsThroughNativeExpressionEvaluator() {
Expand Down
Loading