This is an automated email from the ASF dual-hosted git repository.
gian pushed a commit to branch master
in repository https://gitbox.apache.org/repos/asf/incubator-druid.git
The following commit(s) were added to refs/heads/master by this push:
new bc671ac SQL: Fix ordering of sort, sortProject in DruidSemiJoin.
(#6769)
bc671ac is described below
commit bc671ac436e7934ac9322c28c09885669e1a18ec
Author: Gian Merlino <[email protected]>
AuthorDate: Thu Jan 3 10:36:28 2019 -0800
SQL: Fix ordering of sort, sortProject in DruidSemiJoin. (#6769)
They were added in the wrong order, leading to this error message
when evaluating rules:
"Cannot move from stage[AGGREGATE] to stage[SORT_PROJECT]"
---
.../druid/sql/calcite/rel/DruidSemiJoin.java | 8 +--
.../apache/druid/sql/calcite/CalciteQueryTest.java | 73 +++++++++++++++++++++-
2 files changed, 76 insertions(+), 5 deletions(-)
diff --git
a/sql/src/main/java/org/apache/druid/sql/calcite/rel/DruidSemiJoin.java
b/sql/src/main/java/org/apache/druid/sql/calcite/rel/DruidSemiJoin.java
index f5f023d..aff8434 100644
--- a/sql/src/main/java/org/apache/druid/sql/calcite/rel/DruidSemiJoin.java
+++ b/sql/src/main/java/org/apache/druid/sql/calcite/rel/DruidSemiJoin.java
@@ -375,14 +375,14 @@ public class DruidSemiJoin extends DruidRel<DruidSemiJoin>
newPartialQuery =
newPartialQuery.withAggregateProject(leftPartialQuery.getAggregateProject());
}
- if (leftPartialQuery.getSortProject() != null) {
- newPartialQuery =
newPartialQuery.withSortProject(leftPartialQuery.getSortProject());
- }
-
if (leftPartialQuery.getSort() != null) {
newPartialQuery = newPartialQuery.withSort(leftPartialQuery.getSort());
}
+ if (leftPartialQuery.getSortProject() != null) {
+ newPartialQuery =
newPartialQuery.withSortProject(leftPartialQuery.getSortProject());
+ }
+
return left.withPartialQuery(newPartialQuery);
} else {
return null;
diff --git
a/sql/src/test/java/org/apache/druid/sql/calcite/CalciteQueryTest.java
b/sql/src/test/java/org/apache/druid/sql/calcite/CalciteQueryTest.java
index 2bacbe0..179157e 100644
--- a/sql/src/test/java/org/apache/druid/sql/calcite/CalciteQueryTest.java
+++ b/sql/src/test/java/org/apache/druid/sql/calcite/CalciteQueryTest.java
@@ -6768,7 +6768,7 @@ public class CalciteQueryTest extends BaseCalciteQueryTest
}
@Test
- public void testSemiJoinWithOuterTimeExtract() throws Exception
+ public void testSemiJoinWithOuterTimeExtractScan() throws Exception
{
testQuery(
"SELECT dim1, EXTRACT(MONTH FROM __time) FROM druid.foo\n"
@@ -6809,6 +6809,77 @@ public class CalciteQueryTest extends
BaseCalciteQueryTest
}
@Test
+ public void testSemiJoinWithOuterTimeExtractAggregateWithOrderBy() throws
Exception
+ {
+ testQuery(
+ "SELECT COUNT(DISTINCT dim1), EXTRACT(MONTH FROM __time) FROM
druid.foo\n"
+ + " WHERE dim2 IN (\n"
+ + " SELECT dim2\n"
+ + " FROM druid.foo\n"
+ + " WHERE dim1 = 'def'\n"
+ + " ) AND dim1 <> ''"
+ + "GROUP BY EXTRACT(MONTH FROM __time)\n"
+ + "ORDER BY EXTRACT(MONTH FROM __time)",
+ ImmutableList.of(
+ GroupByQuery
+ .builder()
+ .setDataSource(CalciteTests.DATASOURCE1)
+ .setInterval(QSS(Filtration.eternity()))
+ .setGranularity(Granularities.ALL)
+ .setDimensions(DIMS(new DefaultDimensionSpec("dim2", "d0")))
+ .setDimFilter(SELECTOR("dim1", "def", null))
+ .setContext(QUERY_CONTEXT_DEFAULT)
+ .build(),
+ GroupByQuery
+ .builder()
+ .setDataSource(CalciteTests.DATASOURCE1)
+ .setVirtualColumns(
+ EXPRESSION_VIRTUAL_COLUMN("d0:v",
"timestamp_extract(\"__time\",'MONTH','UTC')", ValueType.LONG)
+ )
+ .setDimFilter(
+ AND(
+ NOT(SELECTOR("dim1", "", null)),
+ SELECTOR("dim2", "abc", null)
+ )
+ )
+ .setDimensions(DIMS(new DefaultDimensionSpec("d0:v", "d0",
ValueType.LONG)))
+ .setInterval(QSS(Filtration.eternity()))
+ .setGranularity(Granularities.ALL)
+ .setAggregatorSpecs(
+ AGGS(
+ new CardinalityAggregatorFactory(
+ "a0",
+ null,
+ ImmutableList.of(
+ new DefaultDimensionSpec("dim1", "dim1",
ValueType.STRING)
+ ),
+ false,
+ true
+ )
+ )
+ )
+ .setLimitSpec(
+ new DefaultLimitSpec(
+ ImmutableList.of(
+ new OrderByColumnSpec(
+ "d0",
+ OrderByColumnSpec.Direction.ASCENDING,
+ StringComparators.NUMERIC
+ )
+ ),
+ Integer.MAX_VALUE
+ )
+ )
+ .setContext(QUERY_CONTEXT_DEFAULT)
+ .build()
+ ),
+ ImmutableList.of(
+ new Object[]{1L, 1L}
+ )
+ );
+ }
+
+ @Test
public void testUsingSubqueryWithExtractionFns() throws Exception
{
testQuery(
---------------------------------------------------------------------
To unsubscribe, e-mail: [email protected]
For additional commands, e-mail: [email protected]