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 @@ -1965,6 +1965,13 @@ private boolean needNewSubQuery(
return true;
}

if (rel instanceof Aggregate
Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

seems you need an extra check for null here

Copy link
Copy Markdown
Contributor Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Done, the wrong reference object was used here.

&& (clauses.contains(Clause.ORDER_BY)
|| clauses.contains(Clause.FETCH)
|| clauses.contains(Clause.OFFSET))) {
return true;
}

// Cannot merge two window functions
boolean containsOver = containsOver(node);
if (rel instanceof Project
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -8616,6 +8616,28 @@ private void checkLiteral2(String expression, String expected) {
.withSpark().ok(sparkExpected);
}

/** Test case for
* <a href="https://issues.apache.org/jira/browse/CALCITE-6748">[CALCITE-6748]
* RelToSqlConverter returns the wrong result when Aggregate is on Sort</a>. */
@Test void testAggregateOnSort() {
final String query0 = "select max(\"product_class_id\") "
+ "from (select * from \"product\" order by \"brand_name\" asc limit 10) t";
final String expected0 = "SELECT MAX(\"product_class_id\")\n"
+ "FROM (SELECT \"product_class_id\"\n"
+ "FROM \"foodmart\".\"product\"\n"
+ "ORDER BY \"brand_name\"\n"
+ "FETCH NEXT 10 ROWS ONLY) AS \"t1\"";
sql(query0).ok(expected0);

final String query1 = "select max(\"product_class_id\") "
+ "from (select * from \"product\" offset 10 ) t";
final String expected1 = "SELECT MAX(\"product_class_id\")\n"
+ "FROM (SELECT \"product_class_id\"\n"
+ "FROM \"foodmart\".\"product\"\n"
+ "OFFSET 10 ROWS) AS \"t1\"";
sql(query1).ok(expected1);
}

@Test void testNullCollationAscNullFirst() {
final String query = "select * from \"product\" order by \"brand_name\" asc nulls first";
final String expected = "SELECT *\n"
Expand Down
11 changes: 5 additions & 6 deletions piglet/src/test/java/org/apache/calcite/test/PigRelOpTest.java
Original file line number Diff line number Diff line change
Expand Up @@ -479,17 +479,16 @@ private Fluent pig(String script) {
+ "HIREDATE, SAL, COMM, DEPTNO)) AS A\n"
+ " FROM scott.EMP\n"
+ " GROUP BY DEPTNO) AS $cor4,\n"
+ " LATERAL (SELECT X\n"
+ " FROM (SELECT 'all' AS $f0, COLLECT(ROW(ENAME, JOB, DEPTNO, SAL)) AS X\n"
+ " LATERAL (SELECT COLLECT($f1) AS X\n"
+ " FROM (SELECT 'all' AS $f0, ROW(ENAME, JOB, DEPTNO, SAL) AS $f1\n"
+ " FROM UNNEST (SELECT $cor4.A AS $f0\n"
+ " FROM (VALUES (0)) AS t (ZERO)) "
+ "AS t2 (EMPNO, ENAME, JOB, MGR, HIREDATE, SAL, COMM, DEPTNO)\n"
+ " WHERE JOB <> 'CLERK'\n"
+ " GROUP BY 'all'\n"
+ " ORDER BY SAL) AS t7) AS t8) AS $cor5,\n"
+ " ORDER BY SAL) AS t6\n"
+ " GROUP BY $f0) AS t8) AS $cor5,\n"
+ " LATERAL UNNEST (SELECT $cor5.X AS $f0\n"
+ " FROM (VALUES (0)) AS t (ZERO)) "
+ "AS t11 (ENAME, JOB, DEPTNO, SAL) AS t110\n"
+ " FROM (VALUES (0)) AS t (ZERO)) AS t11 (ENAME, JOB, DEPTNO, SAL) AS t110\n"
+ "ORDER BY $cor5.group";
pig(script).assertRel(hasTree(plan))
.assertResult(is(result))
Expand Down