From 721191635aa719e8b82caacae7621478ab3b6ca5 Mon Sep 17 00:00:00 2001 From: Gian Merlino Date: Sun, 14 Apr 2019 15:03:36 -0700 Subject: [PATCH] SQL: Include virtual columns used for filtering in ScanQuery. (#7472) PR #6902 introduced the ability to use virtual columns for filters, but they were being omitted from "scan" queries, so filters would refer to a null column instead of the intended virtual column. --- .../druid/sql/calcite/rel/DruidQuery.java | 2 +- .../druid/sql/calcite/CalciteQueryTest.java | 24 +++++++++++++++++++ 2 files changed, 25 insertions(+), 1 deletion(-) 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 43f87513659..c5a7320bf4b 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 @@ -1011,7 +1011,7 @@ public class DruidQuery return new ScanQuery( dataSource, filtration.getQuerySegmentSpec(), - selectProjection != null ? VirtualColumns.create(selectProjection.getVirtualColumns()) : VirtualColumns.EMPTY, + getVirtualColumns(true), ScanQuery.ResultFormat.RESULT_FORMAT_COMPACTED_LIST, 0, scanLimit, 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 2a9049dd902..1e4d799a299 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 @@ -575,6 +575,30 @@ public class CalciteQueryTest extends BaseCalciteQueryTest ); } + @Test + public void testSelectWithExpressionFilter() throws Exception + { + testQuery( + "SELECT dim1 FROM druid.foo WHERE m1 + 1 = 7", + ImmutableList.of( + newScanQueryBuilder() + .dataSource(CalciteTests.DATASOURCE1) + .intervals(querySegmentSpec(Filtration.eternity())) + .virtualColumns( + expressionVirtualColumn("v0", "(\"m1\" + 1)", ValueType.FLOAT) + ) + .filters(selector("v0", "7", null)) + .columns("dim1") + .resultFormat(ScanQuery.ResultFormat.RESULT_FORMAT_COMPACTED_LIST) + .context(QUERY_CONTEXT_DEFAULT) + .build() + ), + ImmutableList.of( + new Object[]{"abc"} + ) + ); + } + @Test public void testSelectStarWithLimitTimeDescending() throws Exception {