From e2ab8e662dd8edbcc9e030c13283e72758a96906 Mon Sep 17 00:00:00 2001 From: Soumyava Das Date: Sat, 9 Apr 2022 22:14:27 -0700 Subject: [PATCH 1/6] Handling planning with alias for time for group by and order by --- .../sql/calcite/rel/DruidOuterQueryRel.java | 16 +++-- .../druid/sql/calcite/CalciteQueryTest.java | 59 +++++++++++++++++++ 2 files changed, 71 insertions(+), 4 deletions(-) diff --git a/sql/src/main/java/org/apache/druid/sql/calcite/rel/DruidOuterQueryRel.java b/sql/src/main/java/org/apache/druid/sql/calcite/rel/DruidOuterQueryRel.java index 6c0160760d2e..93be4e45a2b9 100644 --- a/sql/src/main/java/org/apache/druid/sql/calcite/rel/DruidOuterQueryRel.java +++ b/sql/src/main/java/org/apache/druid/sql/calcite/rel/DruidOuterQueryRel.java @@ -114,12 +114,20 @@ public DruidQuery toDruidQuery(final boolean finalizeAggregations) @Override public DruidQuery toDruidQueryForExplaining() { + final RowSignature sourceRowSignature; + if (sourceRel instanceof DruidRel) { + final DruidQuery subQuery = ((DruidRel) sourceRel).toDruidQueryForExplaining(); + sourceRowSignature = subQuery.getOutputRowSignature(); + } else { + // fallback for .. reasons? + sourceRowSignature = RowSignatures.fromRelDataType( + sourceRel.getRowType().getFieldNames(), + sourceRel.getRowType() + ); + } return partialQuery.build( DUMMY_DATA_SOURCE, - RowSignatures.fromRelDataType( - sourceRel.getRowType().getFieldNames(), - sourceRel.getRowType() - ), + sourceRowSignature, getPlannerContext(), getCluster().getRexBuilder(), false 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 ad68fd8e4531..1b6e97bbc6f7 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 @@ -11100,6 +11100,65 @@ public void testUnicodeFilterAndGroupBy() throws Exception ); } + + @Test + public void testOrderByAlongWithAliasOrderByTimeGroupByMulti() throws Exception + { + testQuery( + "select __time as bug, dim2 from druid.foo group by 1, 2 order by 1 limit 1", + ImmutableList.of( + GroupByQuery.builder() + .setDataSource(CalciteTests.DATASOURCE1) + .setInterval(querySegmentSpec(Filtration.eternity())) + .setGranularity(Granularities.ALL) + .setDimensions( + dimensions( + new DefaultDimensionSpec("__time", "d0", ColumnType.LONG), + new DefaultDimensionSpec("dim2", "d1", ColumnType.STRING) + ) + ) + .setLimitSpec( + new DefaultLimitSpec( + Collections.singletonList( + new OrderByColumnSpec("d0", Direction.ASCENDING, StringComparators.NUMERIC) + ), + 1 + ) + ) + .setContext(QUERY_CONTEXT_DEFAULT) + .build() + ), + ImmutableList.of( + new Object[]{946684800000L, "a"} + ) + ); + } + + + @Test + public void testOrderByAlongWithAliasOrderByTimeGroupByOneCol() throws Exception + { + testQuery( + "select __time as bug from druid.foo group by 1 order by 1 limit 1", + ImmutableList.of( + new TopNQueryBuilder() + .dataSource(CalciteTests.DATASOURCE1) + .intervals(querySegmentSpec(Filtration.eternity())) + .granularity(Granularities.ALL) + .dimension( + new DefaultDimensionSpec("__time", "d0", ColumnType.LONG) + ) + .threshold(1) + .metric(new DimensionTopNMetricSpec(null, StringComparators.NUMERIC)) + .context(QUERY_CONTEXT_DEFAULT) + .build() + ), + ImmutableList.of( + new Object[]{946684800000L} + ) + ); + } + @Test public void testProjectAfterSort() throws Exception { From c921ac103522fad3e9edad76bbb5b6f7b0ff623f Mon Sep 17 00:00:00 2001 From: Soumyava Das Date: Sat, 9 Apr 2022 22:21:36 -0700 Subject: [PATCH 2/6] Minor change --- .../org/apache/druid/sql/calcite/rel/DruidOuterQueryRel.java | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/sql/src/main/java/org/apache/druid/sql/calcite/rel/DruidOuterQueryRel.java b/sql/src/main/java/org/apache/druid/sql/calcite/rel/DruidOuterQueryRel.java index 93be4e45a2b9..cd8a8fba23c0 100644 --- a/sql/src/main/java/org/apache/druid/sql/calcite/rel/DruidOuterQueryRel.java +++ b/sql/src/main/java/org/apache/druid/sql/calcite/rel/DruidOuterQueryRel.java @@ -119,7 +119,7 @@ public DruidQuery toDruidQueryForExplaining() final DruidQuery subQuery = ((DruidRel) sourceRel).toDruidQueryForExplaining(); sourceRowSignature = subQuery.getOutputRowSignature(); } else { - // fallback for .. reasons? + // fallback for cases other than group by inner query with order by with alias on __time column sourceRowSignature = RowSignatures.fromRelDataType( sourceRel.getRowType().getFieldNames(), sourceRel.getRowType() From 2b20025cfcd897b3f36d01188b8bdb95f51fee3c Mon Sep 17 00:00:00 2001 From: Soumyava Das Date: Wed, 13 Apr 2022 11:31:30 -0700 Subject: [PATCH 3/6] Handling Druid rules, adding tests --- .idea/misc.xml | 14 +++-- .../sql/calcite/rel/DruidOuterQueryRel.java | 16 ++--- .../druid/sql/calcite/rule/DruidRules.java | 11 +++- .../sql/calcite/CalciteJoinQueryTest.java | 58 +++++++++++++++++++ 4 files changed, 82 insertions(+), 17 deletions(-) diff --git a/.idea/misc.xml b/.idea/misc.xml index bf2061d7392d..ecf79c8fde01 100644 --- a/.idea/misc.xml +++ b/.idea/misc.xml @@ -46,7 +46,7 @@ @@ -84,7 +87,10 @@ - + - + + + \ No newline at end of file diff --git a/sql/src/main/java/org/apache/druid/sql/calcite/rel/DruidOuterQueryRel.java b/sql/src/main/java/org/apache/druid/sql/calcite/rel/DruidOuterQueryRel.java index cd8a8fba23c0..6c0160760d2e 100644 --- a/sql/src/main/java/org/apache/druid/sql/calcite/rel/DruidOuterQueryRel.java +++ b/sql/src/main/java/org/apache/druid/sql/calcite/rel/DruidOuterQueryRel.java @@ -114,20 +114,12 @@ public DruidQuery toDruidQuery(final boolean finalizeAggregations) @Override public DruidQuery toDruidQueryForExplaining() { - final RowSignature sourceRowSignature; - if (sourceRel instanceof DruidRel) { - final DruidQuery subQuery = ((DruidRel) sourceRel).toDruidQueryForExplaining(); - sourceRowSignature = subQuery.getOutputRowSignature(); - } else { - // fallback for cases other than group by inner query with order by with alias on __time column - sourceRowSignature = RowSignatures.fromRelDataType( - sourceRel.getRowType().getFieldNames(), - sourceRel.getRowType() - ); - } return partialQuery.build( DUMMY_DATA_SOURCE, - sourceRowSignature, + RowSignatures.fromRelDataType( + sourceRel.getRowType().getFieldNames(), + sourceRel.getRowType() + ), getPlannerContext(), getCluster().getRexBuilder(), false diff --git a/sql/src/main/java/org/apache/druid/sql/calcite/rule/DruidRules.java b/sql/src/main/java/org/apache/druid/sql/calcite/rule/DruidRules.java index 113f37d896fb..a95106b5dcf7 100644 --- a/sql/src/main/java/org/apache/druid/sql/calcite/rule/DruidRules.java +++ b/sql/src/main/java/org/apache/druid/sql/calcite/rule/DruidRules.java @@ -30,9 +30,11 @@ import org.apache.calcite.rel.core.Sort; import org.apache.druid.java.util.common.StringUtils; import org.apache.druid.sql.calcite.planner.PlannerContext; +import org.apache.druid.sql.calcite.rel.CannotBuildQueryException; import org.apache.druid.sql.calcite.rel.DruidOuterQueryRel; import org.apache.druid.sql.calcite.rel.DruidRel; import org.apache.druid.sql.calcite.rel.PartialDruidQuery; +import org.apache.druid.utils.Throwables; import java.util.List; import java.util.function.BiFunction; @@ -223,7 +225,14 @@ public void onMatch(final RelOptRuleCall call) .withSort(sort) ); if (outerQueryRel.isValidDruidQuery()) { - call.transformTo(outerQueryRel); + try { + call.transformTo(outerQueryRel); + } + catch (Exception ex) { + if (Throwables.getCauseOfType(ex, CannotBuildQueryException.class) == null) { + throw ex; + } + } } } }; diff --git a/sql/src/test/java/org/apache/druid/sql/calcite/CalciteJoinQueryTest.java b/sql/src/test/java/org/apache/druid/sql/calcite/CalciteJoinQueryTest.java index 2f58c6cd79bf..2d5b3b043dc5 100644 --- a/sql/src/test/java/org/apache/druid/sql/calcite/CalciteJoinQueryTest.java +++ b/sql/src/test/java/org/apache/druid/sql/calcite/CalciteJoinQueryTest.java @@ -104,6 +104,64 @@ @RunWith(JUnitParamsRunner.class) public class CalciteJoinQueryTest extends BaseCalciteQueryTest { + + @Test + public void testInnerJoinWithLimitAndAlias() throws Exception + { + minTopNThreshold = 1; + Map context = new HashMap<>(QUERY_CONTEXT_DEFAULT); + context.put(PlannerConfig.CTX_KEY_USE_APPROXIMATE_TOPN, false); + testQuery( + "select t1.b1 from (select __time as b1 from numfoo group by 1 order by 1) as t1 inner join (\n" + + " select __time as b2 from foo group by 1 order by 1\n" + + ") as t2 on t1.b1 = t2.b2 ", + context, // turn on exact topN + ImmutableList.of( + newScanQueryBuilder() + .intervals(querySegmentSpec(Filtration.eternity())) + .dataSource( + JoinDataSource.create( + new QueryDataSource( + GroupByQuery.builder() + .setInterval(querySegmentSpec(Filtration.eternity())) + .setGranularity(Granularities.ALL) + .setDataSource(new TableDataSource("numfoo")) + .setDimensions(new DefaultDimensionSpec("__time", "_d0", ColumnType.LONG)) + .setContext(context) + .build() + ), + new QueryDataSource( + GroupByQuery.builder() + .setInterval(querySegmentSpec(Filtration.eternity())) + .setGranularity(Granularities.ALL) + .setDataSource(new TableDataSource("foo")) + .setDimensions(new DefaultDimensionSpec("__time", "d0", ColumnType.LONG)) + .setContext(context) + .build() + ), + "j0.", + "(\"_d0\" == \"j0.d0\")", + JoinType.INNER, + null, + ExprMacroTable.nil() + ) + ) + .columns("_d0") + .context(context) + .build() + ), + ImmutableList.of( + new Object[]{946684800000L}, + new Object[]{946771200000L}, + new Object[]{946857600000L}, + new Object[]{978307200000L}, + new Object[]{978393600000L}, + new Object[]{978480000000L} + ) + ); + } + + @Test public void testExactTopNOnInnerJoinWithLimit() throws Exception { From 1c56ec664b3e308969c89fa70318aa6abb360d1f Mon Sep 17 00:00:00 2001 From: Soumyava Das Date: Wed, 13 Apr 2022 18:16:29 -0700 Subject: [PATCH 4/6] ordering scan by __time from a subquery is probably almost never going to be cool, so scan should be invalid for query datasource if it has order by --- .../sql/calcite/rel/DruidOuterQueryRel.java | 6 ++++-- .../druid/sql/calcite/rel/DruidQuery.java | 21 ++++++++++++------- .../druid/sql/calcite/rule/DruidRules.java | 9 +------- .../druid/sql/calcite/CalciteQueryTest.java | 10 +++++++-- 4 files changed, 26 insertions(+), 20 deletions(-) diff --git a/sql/src/main/java/org/apache/druid/sql/calcite/rel/DruidOuterQueryRel.java b/sql/src/main/java/org/apache/druid/sql/calcite/rel/DruidOuterQueryRel.java index 6c0160760d2e..d9bd16343ef1 100644 --- a/sql/src/main/java/org/apache/druid/sql/calcite/rel/DruidOuterQueryRel.java +++ b/sql/src/main/java/org/apache/druid/sql/calcite/rel/DruidOuterQueryRel.java @@ -32,8 +32,8 @@ import org.apache.calcite.rel.metadata.RelMetadataQuery; import org.apache.calcite.rel.type.RelDataType; import org.apache.druid.java.util.common.StringUtils; +import org.apache.druid.query.Druids; import org.apache.druid.query.QueryDataSource; -import org.apache.druid.query.TableDataSource; import org.apache.druid.segment.column.RowSignature; import org.apache.druid.sql.calcite.planner.PlannerContext; import org.apache.druid.sql.calcite.table.RowSignatures; @@ -46,7 +46,9 @@ */ public class DruidOuterQueryRel extends DruidRel { - private static final TableDataSource DUMMY_DATA_SOURCE = new TableDataSource("__subquery__"); + private static final QueryDataSource DUMMY_DATA_SOURCE = new QueryDataSource( + Druids.newScanQueryBuilder().dataSource("__subquery__").eternityInterval().build() + ); private final PartialDruidQuery partialQuery; private RelNode sourceRel; diff --git a/sql/src/main/java/org/apache/druid/sql/calcite/rel/DruidQuery.java b/sql/src/main/java/org/apache/druid/sql/calcite/rel/DruidQuery.java index 1fa63ff6d609..88c51e1a5da9 100644 --- a/sql/src/main/java/org/apache/druid/sql/calcite/rel/DruidQuery.java +++ b/sql/src/main/java/org/apache/druid/sql/calcite/rel/DruidQuery.java @@ -1199,14 +1199,19 @@ private ScanQuery toScanQuery(final QueryFeatureInspector queryFeatureInspector) orderByColumns = Collections.emptyList(); } - if (!queryFeatureInspector.feature(QueryFeature.SCAN_CAN_ORDER_BY_NON_TIME) - && (orderByColumns.size() > 1 - || orderByColumns.stream() - .anyMatch(orderBy -> !orderBy.getColumnName().equals(ColumnHolder.TIME_COLUMN_NAME)))) { - // Cannot handle this ordering. - // Scan cannot ORDER BY non-time columns. - plannerContext.setPlanningError("SQL query requires order by non-time column %s that is not supported.", orderByColumns); - return null; + if (!queryFeatureInspector.feature(QueryFeature.SCAN_CAN_ORDER_BY_NON_TIME) && !orderByColumns.isEmpty()) { + if (orderByColumns.size() > 1 || !ColumnHolder.TIME_COLUMN_NAME.equals(orderByColumns.get(0).getColumnName())) { + // Cannot handle this ordering. + // Scan cannot ORDER BY non-time columns. + plannerContext.setPlanningError("SQL query requires order by non-time column %s that is not supported.", orderByColumns); + return null; + } + if (!dataSource.isConcrete() ) { + // Cannot handle this ordering. + // Scan cannot ORDER BY non-time columns. + plannerContext.setPlanningError("SQL query requires order by non-time column on a datasource[%s], which is not supported.", dataSource); + return null; + } } // Compute the list of columns to select, sorted and deduped. diff --git a/sql/src/main/java/org/apache/druid/sql/calcite/rule/DruidRules.java b/sql/src/main/java/org/apache/druid/sql/calcite/rule/DruidRules.java index a95106b5dcf7..36709b077a47 100644 --- a/sql/src/main/java/org/apache/druid/sql/calcite/rule/DruidRules.java +++ b/sql/src/main/java/org/apache/druid/sql/calcite/rule/DruidRules.java @@ -225,14 +225,7 @@ public void onMatch(final RelOptRuleCall call) .withSort(sort) ); if (outerQueryRel.isValidDruidQuery()) { - try { - call.transformTo(outerQueryRel); - } - catch (Exception ex) { - if (Throwables.getCauseOfType(ex, CannotBuildQueryException.class) == null) { - throw ex; - } - } + call.transformTo(outerQueryRel); } } }; 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 1b6e97bbc6f7..333591d981ce 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 @@ -6719,6 +6719,12 @@ public void testMinMaxAvgDailyCountWithLimit() throws Exception ) ) .setInterval(querySegmentSpec(Filtration.eternity())) + .setLimitSpec( + new DefaultLimitSpec( + ImmutableList.of(), + 1 + ) + ) .setGranularity(Granularities.ALL) .setAggregatorSpecs( useDefault @@ -6752,7 +6758,7 @@ public void testMinMaxAvgDailyCountWithLimit() throws Exception new FieldAccessPostAggregator(null, "_a2:count") ) ), - expressionPostAgg("p0", "timestamp_extract(\"_a3\",'EPOCH','UTC')") + expressionPostAgg("s0", "timestamp_extract(\"_a3\",'EPOCH','UTC')") ) ) .setContext(QUERY_CONTEXT_DEFAULT) @@ -7002,7 +7008,7 @@ public void testExplainExactCountDistinctOfSemiJoinResult() throws Exception + " )\n" + ")"; final String legacyExplanation = - "DruidOuterQueryRel(query=[{\"queryType\":\"timeseries\",\"dataSource\":{\"type\":\"table\",\"name\":\"__subquery__\"},\"intervals\":{\"type\":\"intervals\",\"intervals\":[\"-146136543-09-08T08:23:32.096Z/146140482-04-24T15:36:27.903Z\"]},\"descending\":false,\"virtualColumns\":[],\"filter\":null,\"granularity\":{\"type\":\"all\"},\"aggregations\":[{\"type\":\"count\",\"name\":\"a0\"}],\"postAggregations\":[],\"limit\":2147483647,\"context\":{\"defaultTimeout\":300000,\"maxScatterGatherBytes\":9223372036854775807,\"sqlCurrentTimestamp\":\"2000-01-01T00:00:00Z\",\"sqlQueryId\":\"dummy\",\"vectorize\":\"false\",\"vectorizeVirtualColumns\":\"false\"}}], signature=[{a0:LONG}])\n" + "DruidOuterQueryRel(query=[{\"queryType\":\"groupBy\",\"dataSource\":{\"type\":\"query\",\"query\":{\"queryType\":\"scan\",\"dataSource\":{\"type\":\"table\",\"name\":\"__subquery__\"},\"intervals\":{\"type\":\"intervals\",\"intervals\":[\"-146136543-09-08T08:23:32.096Z/146140482-04-24T15:36:27.903Z\"]},\"virtualColumns\":[],\"resultFormat\":\"list\",\"batchSize\":20480,\"filter\":null,\"context\":null,\"descending\":false,\"granularity\":{\"type\":\"all\"}}},\"intervals\":{\"type\":\"intervals\",\"intervals\":[\"-146136543-09-08T08:23:32.096Z/146140482-04-24T15:36:27.903Z\"]},\"virtualColumns\":[],\"filter\":null,\"granularity\":{\"type\":\"all\"},\"dimensions\":[],\"aggregations\":[{\"type\":\"count\",\"name\":\"a0\"}],\"postAggregations\":[],\"having\":null,\"limitSpec\":{\"type\":\"NoopLimitSpec\"},\"context\":{\"defaultTimeout\":300000,\"maxScatterGatherBytes\":9223372036854775807,\"sqlCurrentTimestamp\":\"2000-01-01T00:00:00Z\",\"sqlQueryId\":\"dummy\",\"vectorize\":\"false\",\"vectorizeVirtualColumns\":\"false\"},\"descending\":false}], signature=[{a0:LONG}])\n" + " DruidJoinQueryRel(condition=[=(SUBSTRING($3, 1, 1), $8)], joinType=[inner], query=[{\"queryType\":\"groupBy\",\"dataSource\":{\"type\":\"table\",\"name\":\"__join__\"},\"intervals\":{\"type\":\"intervals\",\"intervals\":[\"-146136543-09-08T08:23:32.096Z/146140482-04-24T15:36:27.903Z\"]},\"virtualColumns\":[],\"filter\":null,\"granularity\":{\"type\":\"all\"},\"dimensions\":[{\"type\":\"default\",\"dimension\":\"dim2\",\"outputName\":\"d0\",\"outputType\":\"STRING\"}],\"aggregations\":[],\"postAggregations\":[],\"having\":null,\"limitSpec\":{\"type\":\"NoopLimitSpec\"},\"context\":{\"defaultTimeout\":300000,\"maxScatterGatherBytes\":9223372036854775807,\"sqlCurrentTimestamp\":\"2000-01-01T00:00:00Z\",\"sqlQueryId\":\"dummy\",\"vectorize\":\"false\",\"vectorizeVirtualColumns\":\"false\"},\"descending\":false}], signature=[{d0:STRING}])\n" + " DruidQueryRel(query=[{\"queryType\":\"scan\",\"dataSource\":{\"type\":\"table\",\"name\":\"foo\"},\"intervals\":{\"type\":\"intervals\",\"intervals\":[\"-146136543-09-08T08:23:32.096Z/146140482-04-24T15:36:27.903Z\"]},\"virtualColumns\":[],\"resultFormat\":\"compactedList\",\"batchSize\":20480,\"filter\":null,\"columns\":[\"__time\",\"cnt\",\"dim1\",\"dim2\",\"dim3\",\"m1\",\"m2\",\"unique_dim1\"],\"legacy\":false,\"context\":{\"defaultTimeout\":300000,\"maxScatterGatherBytes\":9223372036854775807,\"sqlCurrentTimestamp\":\"2000-01-01T00:00:00Z\",\"sqlQueryId\":\"dummy\",\"vectorize\":\"false\",\"vectorizeVirtualColumns\":\"false\"},\"descending\":false,\"granularity\":{\"type\":\"all\"}}], signature=[{__time:LONG, cnt:LONG, dim1:STRING, dim2:STRING, dim3:STRING, m1:FLOAT, m2:DOUBLE, unique_dim1:COMPLEX}])\n" + " DruidQueryRel(query=[{\"queryType\":\"groupBy\",\"dataSource\":{\"type\":\"table\",\"name\":\"foo\"},\"intervals\":{\"type\":\"intervals\",\"intervals\":[\"-146136543-09-08T08:23:32.096Z/146140482-04-24T15:36:27.903Z\"]},\"virtualColumns\":[],\"filter\":{\"type\":\"not\",\"field\":{\"type\":\"selector\",\"dimension\":\"dim1\",\"value\":null,\"extractionFn\":null}},\"granularity\":{\"type\":\"all\"},\"dimensions\":[{\"type\":\"extraction\",\"dimension\":\"dim1\",\"outputName\":\"d0\",\"outputType\":\"STRING\",\"extractionFn\":{\"type\":\"substring\",\"index\":0,\"length\":1}}],\"aggregations\":[],\"postAggregations\":[],\"having\":null,\"limitSpec\":{\"type\":\"NoopLimitSpec\"},\"context\":{\"defaultTimeout\":300000,\"maxScatterGatherBytes\":9223372036854775807,\"sqlCurrentTimestamp\":\"2000-01-01T00:00:00Z\",\"sqlQueryId\":\"dummy\",\"vectorize\":\"false\",\"vectorizeVirtualColumns\":\"false\"},\"descending\":false}], signature=[{d0:STRING}])\n"; From 76cf13b60c7d775e20037a077a48062a1c4e9077 Mon Sep 17 00:00:00 2001 From: Soumyava Das Date: Wed, 13 Apr 2022 18:19:44 -0700 Subject: [PATCH 5/6] oops checkstyle --- .../org/apache/druid/sql/calcite/rel/DruidQuery.java | 12 +++++++++--- .../apache/druid/sql/calcite/rule/DruidRules.java | 2 -- 2 files changed, 9 insertions(+), 5 deletions(-) diff --git a/sql/src/main/java/org/apache/druid/sql/calcite/rel/DruidQuery.java b/sql/src/main/java/org/apache/druid/sql/calcite/rel/DruidQuery.java index 88c51e1a5da9..a0627dfa4f18 100644 --- a/sql/src/main/java/org/apache/druid/sql/calcite/rel/DruidQuery.java +++ b/sql/src/main/java/org/apache/druid/sql/calcite/rel/DruidQuery.java @@ -1203,13 +1203,19 @@ private ScanQuery toScanQuery(final QueryFeatureInspector queryFeatureInspector) if (orderByColumns.size() > 1 || !ColumnHolder.TIME_COLUMN_NAME.equals(orderByColumns.get(0).getColumnName())) { // Cannot handle this ordering. // Scan cannot ORDER BY non-time columns. - plannerContext.setPlanningError("SQL query requires order by non-time column %s that is not supported.", orderByColumns); + plannerContext.setPlanningError( + "SQL query requires order by non-time column %s that is not supported.", + orderByColumns + ); return null; } - if (!dataSource.isConcrete() ) { + if (!dataSource.isConcrete()) { // Cannot handle this ordering. // Scan cannot ORDER BY non-time columns. - plannerContext.setPlanningError("SQL query requires order by non-time column on a datasource[%s], which is not supported.", dataSource); + plannerContext.setPlanningError( + "SQL query requires order by non-time column on a datasource[%s], which is not supported.", + dataSource + ); return null; } } diff --git a/sql/src/main/java/org/apache/druid/sql/calcite/rule/DruidRules.java b/sql/src/main/java/org/apache/druid/sql/calcite/rule/DruidRules.java index 36709b077a47..113f37d896fb 100644 --- a/sql/src/main/java/org/apache/druid/sql/calcite/rule/DruidRules.java +++ b/sql/src/main/java/org/apache/druid/sql/calcite/rule/DruidRules.java @@ -30,11 +30,9 @@ import org.apache.calcite.rel.core.Sort; import org.apache.druid.java.util.common.StringUtils; import org.apache.druid.sql.calcite.planner.PlannerContext; -import org.apache.druid.sql.calcite.rel.CannotBuildQueryException; import org.apache.druid.sql.calcite.rel.DruidOuterQueryRel; import org.apache.druid.sql.calcite.rel.DruidRel; import org.apache.druid.sql.calcite.rel.PartialDruidQuery; -import org.apache.druid.utils.Throwables; import java.util.List; import java.util.function.BiFunction; From 30c2d4b2c99996131168346b2912e72a2a5ac056 Mon Sep 17 00:00:00 2001 From: Soumyava Das Date: Thu, 14 Apr 2022 09:01:25 -0700 Subject: [PATCH 6/6] Reverting to old misc.xml --- .idea/misc.xml | 14 ++++---------- 1 file changed, 4 insertions(+), 10 deletions(-) diff --git a/.idea/misc.xml b/.idea/misc.xml index ecf79c8fde01..bf2061d7392d 100644 --- a/.idea/misc.xml +++ b/.idea/misc.xml @@ -46,7 +46,7 @@ @@ -87,10 +84,7 @@ - + - - - \ No newline at end of file +