fix issue when distinct grouping dimensions are optimized into the same virtual column expression (#9429)

* fix issue when distinct grouping dimensions are optimized into the same virtual column expression

* fix tests

* more better

* fixes
This commit is contained in:
Clint Wylie 2020-03-09 17:48:29 -07:00 committed by GitHub
parent 0136dba95d
commit f8b1f2f7f3
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23
8 changed files with 193 additions and 120 deletions

View File

@ -375,7 +375,7 @@ public class HllSketchSqlAggregatorTest extends CalciteTestBase
Collections.singletonList( Collections.singletonList(
new DefaultDimensionSpec( new DefaultDimensionSpec(
"v0", "v0",
"v0", "d0",
ValueType.LONG ValueType.LONG
) )
) )

View File

@ -371,7 +371,7 @@ public class ThetaSketchSqlAggregatorTest extends CalciteTestBase
Collections.singletonList( Collections.singletonList(
new DefaultDimensionSpec( new DefaultDimensionSpec(
"v0", "v0",
"v0", "d0",
ValueType.LONG ValueType.LONG
) )
) )

View File

@ -174,7 +174,10 @@ public class BloomFilterSqlAggregator implements SqlAggregator
inputOperand.getType().getSqlTypeName() inputOperand.getType().getSqlTypeName()
); );
virtualColumns.add(virtualColumn); virtualColumns.add(virtualColumn);
spec = new DefaultDimensionSpec(virtualColumn.getOutputName(), virtualColumn.getOutputName()); spec = new DefaultDimensionSpec(
virtualColumn.getOutputName(),
StringUtils.format("%s:%s", name, virtualColumn.getOutputName())
);
} }
aggregatorFactory = new BloomFilterAggregatorFactory( aggregatorFactory = new BloomFilterAggregatorFactory(

View File

@ -529,7 +529,7 @@ public class BloomFilterSqlAggregatorTest extends InitializedNullHandlingTest
ImmutableList.of( ImmutableList.of(
new BloomFilterAggregatorFactory( new BloomFilterAggregatorFactory(
"a0:agg", "a0:agg",
new DefaultDimensionSpec("v0", "v0"), new DefaultDimensionSpec("v0", "a0:v0"),
TEST_NUM_ENTRIES TEST_NUM_ENTRIES
) )
) )
@ -597,7 +597,7 @@ public class BloomFilterSqlAggregatorTest extends InitializedNullHandlingTest
ImmutableList.of( ImmutableList.of(
new BloomFilterAggregatorFactory( new BloomFilterAggregatorFactory(
"a0:agg", "a0:agg",
new DefaultDimensionSpec("v0", "v0"), new DefaultDimensionSpec("v0", "a0:v0"),
TEST_NUM_ENTRIES TEST_NUM_ENTRIES
) )
) )
@ -665,7 +665,7 @@ public class BloomFilterSqlAggregatorTest extends InitializedNullHandlingTest
ImmutableList.of( ImmutableList.of(
new BloomFilterAggregatorFactory( new BloomFilterAggregatorFactory(
"a0:agg", "a0:agg",
new DefaultDimensionSpec("v0", "v0"), new DefaultDimensionSpec("v0", "a0:v0"),
TEST_NUM_ENTRIES TEST_NUM_ENTRIES
) )
) )

View File

@ -19,6 +19,7 @@
package org.apache.druid.sql.calcite.aggregation; package org.apache.druid.sql.calcite.aggregation;
import com.google.common.base.Preconditions;
import org.apache.druid.query.dimension.DefaultDimensionSpec; import org.apache.druid.query.dimension.DefaultDimensionSpec;
import org.apache.druid.query.dimension.DimensionSpec; import org.apache.druid.query.dimension.DimensionSpec;
import org.apache.druid.segment.column.ValueType; import org.apache.druid.segment.column.ValueType;
@ -28,21 +29,55 @@ import java.util.Objects;
public class DimensionExpression public class DimensionExpression
{ {
private final String outputName; /**
private final DruidExpression expression; * Create a dimension expression for direct column access or simple extractions
private final ValueType outputType; */
public static DimensionExpression ofSimpleColumn(
public DimensionExpression(
final String outputName, final String outputName,
final DruidExpression expression, final DruidExpression expression,
final ValueType outputType final ValueType outputType
) )
{ {
return new DimensionExpression(outputName, outputName, expression, outputType);
}
/**
* Create a dimension expression for a virtual column
*/
public static DimensionExpression ofVirtualColumn(
final String virtualColumn,
final String outputName,
final DruidExpression expression,
final ValueType outputType
)
{
return new DimensionExpression(virtualColumn, outputName, expression, outputType);
}
private final String virtualColumn;
private final String outputName;
private final DruidExpression expression;
private final ValueType outputType;
private DimensionExpression(
final String virtualColumn,
final String outputName,
final DruidExpression expression,
final ValueType outputType
)
{
Preconditions.checkArgument(!expression.isSimpleExtraction() || outputName.equals(virtualColumn));
this.virtualColumn = virtualColumn;
this.outputName = outputName; this.outputName = outputName;
this.expression = expression; this.expression = expression;
this.outputType = outputType; this.outputType = outputType;
} }
public String getVirtualColumn()
{
return virtualColumn;
}
public String getOutputName() public String getOutputName()
{ {
return outputName; return outputName;
@ -58,7 +93,7 @@ public class DimensionExpression
if (expression.isSimpleExtraction()) { if (expression.isSimpleExtraction()) {
return expression.getSimpleExtraction().toDimensionSpec(outputName, outputType); return expression.getSimpleExtraction().toDimensionSpec(outputName, outputType);
} else { } else {
return new DefaultDimensionSpec(getOutputName(), getOutputName(), outputType); return new DefaultDimensionSpec(virtualColumn, outputName, outputType);
} }
} }
@ -72,7 +107,8 @@ public class DimensionExpression
return false; return false;
} }
final DimensionExpression that = (DimensionExpression) o; final DimensionExpression that = (DimensionExpression) o;
return Objects.equals(outputName, that.outputName) && return Objects.equals(virtualColumn, that.virtualColumn) &&
Objects.equals(outputName, that.outputName) &&
Objects.equals(expression, that.expression) && Objects.equals(expression, that.expression) &&
outputType == that.outputType; outputType == that.outputType;
} }
@ -80,14 +116,15 @@ public class DimensionExpression
@Override @Override
public int hashCode() public int hashCode()
{ {
return Objects.hash(outputName, expression, outputType); return Objects.hash(virtualColumn, outputName, expression, outputType);
} }
@Override @Override
public String toString() public String toString()
{ {
return "DimensionExpression{" + return "DimensionExpression{" +
"outputName='" + outputName + '\'' + "virtualColumn='" + virtualColumn + '\'' +
", outputName='" + outputName + '\'' +
", expression=" + expression + ", expression=" + expression +
", outputType=" + outputType + ", outputType=" + outputType +
'}'; '}';

View File

@ -401,19 +401,18 @@ public class DruidQuery
final VirtualColumn virtualColumn; final VirtualColumn virtualColumn;
final String dimOutputName;
final String dimOutputName = outputNamePrefix + outputNameCounter++;
if (!druidExpression.isSimpleExtraction()) { if (!druidExpression.isSimpleExtraction()) {
virtualColumn = virtualColumnRegistry.getOrCreateVirtualColumnForExpression( virtualColumn = virtualColumnRegistry.getOrCreateVirtualColumnForExpression(
plannerContext, plannerContext,
druidExpression, druidExpression,
sqlTypeName sqlTypeName
); );
dimOutputName = virtualColumn.getOutputName(); dimensions.add(DimensionExpression.ofVirtualColumn(virtualColumn.getOutputName(), dimOutputName, druidExpression, outputType));
} else { } else {
dimOutputName = outputNamePrefix + outputNameCounter++; dimensions.add(DimensionExpression.ofSimpleColumn(dimOutputName, druidExpression, outputType));
} }
dimensions.add(new DimensionExpression(dimOutputName, druidExpression, outputType));
} }
return dimensions; return dimensions;
@ -623,8 +622,8 @@ public class DruidQuery
if (grouping != null) { if (grouping != null) {
if (includeDimensions) { if (includeDimensions) {
for (DimensionExpression expression : grouping.getDimensions()) { for (DimensionExpression expression : grouping.getDimensions()) {
if (virtualColumnRegistry.isVirtualColumnDefined(expression.getOutputName())) { if (virtualColumnRegistry.isVirtualColumnDefined(expression.getVirtualColumn())) {
virtualColumns.add(virtualColumnRegistry.getVirtualColumn(expression.getOutputName())); virtualColumns.add(virtualColumnRegistry.getVirtualColumn(expression.getVirtualColumn()));
} }
} }
} }

View File

@ -636,7 +636,7 @@ public class CalciteParameterQueryTest extends BaseCalciteQueryTest
ValueType.STRING ValueType.STRING
) )
) )
.setDimensions(dimensions(new DefaultDimensionSpec("v0", "v0", ValueType.STRING))) .setDimensions(dimensions(new DefaultDimensionSpec("v0", "d0", ValueType.STRING)))
.setAggregatorSpecs(aggregators(new CountAggregatorFactory("a0"))) .setAggregatorSpecs(aggregators(new CountAggregatorFactory("a0")))
.setContext(QUERY_CONTEXT_DEFAULT) .setContext(QUERY_CONTEXT_DEFAULT)
.build() .build()

View File

@ -3146,7 +3146,7 @@ public class CalciteQueryTest extends BaseCalciteQueryTest
ValueType.STRING ValueType.STRING
) )
) )
.setDimensions(dimensions(new DefaultDimensionSpec("v0", "v0"))) .setDimensions(dimensions(new DefaultDimensionSpec("v0", "d0")))
.setAggregatorSpecs(aggregators(new CountAggregatorFactory("a0"))) .setAggregatorSpecs(aggregators(new CountAggregatorFactory("a0")))
.setContext(QUERY_CONTEXT_DEFAULT) .setContext(QUERY_CONTEXT_DEFAULT)
.build() .build()
@ -3183,7 +3183,7 @@ public class CalciteQueryTest extends BaseCalciteQueryTest
ValueType.STRING ValueType.STRING
) )
) )
.setDimensions(dimensions(new DefaultDimensionSpec("v0", "v0"))) .setDimensions(dimensions(new DefaultDimensionSpec("v0", "d0")))
.setAggregatorSpecs(aggregators(new CountAggregatorFactory("a0"))) .setAggregatorSpecs(aggregators(new CountAggregatorFactory("a0")))
.setContext(QUERY_CONTEXT_DEFAULT) .setContext(QUERY_CONTEXT_DEFAULT)
.build() .build()
@ -3568,7 +3568,7 @@ public class CalciteQueryTest extends BaseCalciteQueryTest
ValueType.STRING ValueType.STRING
) )
) )
.setDimensions(dimensions(new DefaultDimensionSpec("v0", "v0", ValueType.STRING))) .setDimensions(dimensions(new DefaultDimensionSpec("v0", "d0", ValueType.STRING)))
.setAggregatorSpecs(aggregators(new CountAggregatorFactory("a0"))) .setAggregatorSpecs(aggregators(new CountAggregatorFactory("a0")))
.setContext(QUERY_CONTEXT_DEFAULT) .setContext(QUERY_CONTEXT_DEFAULT)
.build() .build()
@ -4617,13 +4617,13 @@ public class CalciteQueryTest extends BaseCalciteQueryTest
expressionVirtualColumn("v0", "(floor((\"m1\" / 2)) * 2)", ValueType.FLOAT) expressionVirtualColumn("v0", "(floor((\"m1\" / 2)) * 2)", ValueType.FLOAT)
) )
.setDimFilter(bound("v0", "-1", null, true, false, null, StringComparators.NUMERIC)) .setDimFilter(bound("v0", "-1", null, true, false, null, StringComparators.NUMERIC))
.setDimensions(dimensions(new DefaultDimensionSpec("v0", "v0", ValueType.FLOAT))) .setDimensions(dimensions(new DefaultDimensionSpec("v0", "d0", ValueType.FLOAT)))
.setAggregatorSpecs(aggregators(new CountAggregatorFactory("a0"))) .setAggregatorSpecs(aggregators(new CountAggregatorFactory("a0")))
.setLimitSpec( .setLimitSpec(
new DefaultLimitSpec( new DefaultLimitSpec(
ImmutableList.of( ImmutableList.of(
new OrderByColumnSpec( new OrderByColumnSpec(
"v0", "d0",
OrderByColumnSpec.Direction.DESCENDING, OrderByColumnSpec.Direction.DESCENDING,
StringComparators.NUMERIC StringComparators.NUMERIC
) )
@ -4668,13 +4668,13 @@ public class CalciteQueryTest extends BaseCalciteQueryTest
.setDimFilter( .setDimFilter(
bound("v0", "-1", null, true, false, null, StringComparators.NUMERIC) bound("v0", "-1", null, true, false, null, StringComparators.NUMERIC)
) )
.setDimensions(dimensions(new DefaultDimensionSpec("v0", "v0", ValueType.LONG))) .setDimensions(dimensions(new DefaultDimensionSpec("v0", "d0", ValueType.LONG)))
.setAggregatorSpecs(aggregators(new CountAggregatorFactory("a0"))) .setAggregatorSpecs(aggregators(new CountAggregatorFactory("a0")))
.setLimitSpec( .setLimitSpec(
new DefaultLimitSpec( new DefaultLimitSpec(
ImmutableList.of( ImmutableList.of(
new OrderByColumnSpec( new OrderByColumnSpec(
"v0", "d0",
OrderByColumnSpec.Direction.DESCENDING, OrderByColumnSpec.Direction.DESCENDING,
StringComparators.NUMERIC StringComparators.NUMERIC
) )
@ -4723,13 +4723,13 @@ public class CalciteQueryTest extends BaseCalciteQueryTest
.setDimFilter( .setDimFilter(
bound("v0", "-1", null, true, false, null, StringComparators.NUMERIC) bound("v0", "-1", null, true, false, null, StringComparators.NUMERIC)
) )
.setDimensions(dimensions(new DefaultDimensionSpec("v0", "v0", ValueType.FLOAT))) .setDimensions(dimensions(new DefaultDimensionSpec("v0", "d0", ValueType.FLOAT)))
.setAggregatorSpecs(aggregators(new CountAggregatorFactory("a0"))) .setAggregatorSpecs(aggregators(new CountAggregatorFactory("a0")))
.setLimitSpec( .setLimitSpec(
new DefaultLimitSpec( new DefaultLimitSpec(
ImmutableList.of( ImmutableList.of(
new OrderByColumnSpec( new OrderByColumnSpec(
"v0", "d0",
OrderByColumnSpec.Direction.DESCENDING, OrderByColumnSpec.Direction.DESCENDING,
StringComparators.NUMERIC StringComparators.NUMERIC
) )
@ -5478,7 +5478,7 @@ public class CalciteQueryTest extends BaseCalciteQueryTest
StringComparators.NUMERIC StringComparators.NUMERIC
) )
) )
.setDimensions(dimensions(new DefaultDimensionSpec("v0", "v0", ValueType.LONG))) .setDimensions(dimensions(new DefaultDimensionSpec("v0", "d0", ValueType.LONG)))
.setAggregatorSpecs(aggregators(new CountAggregatorFactory("a0"))) .setAggregatorSpecs(aggregators(new CountAggregatorFactory("a0")))
.setContext(QUERY_CONTEXT_DEFAULT) .setContext(QUERY_CONTEXT_DEFAULT)
.build() .build()
@ -6045,8 +6045,8 @@ public class CalciteQueryTest extends BaseCalciteQueryTest
) )
) )
.setDimensions(dimensions( .setDimensions(dimensions(
new DefaultDimensionSpec("v0", "v0", ValueType.LONG), new DefaultDimensionSpec("v0", "_d0", ValueType.LONG),
new DefaultDimensionSpec("d0", "_d0", ValueType.STRING) new DefaultDimensionSpec("d0", "_d1", ValueType.STRING)
)) ))
.setAggregatorSpecs( .setAggregatorSpecs(
aggregators( aggregators(
@ -6229,7 +6229,7 @@ public class CalciteQueryTest extends BaseCalciteQueryTest
) )
.setDimensions(dimensions(new DefaultDimensionSpec( .setDimensions(dimensions(new DefaultDimensionSpec(
"v0", "v0",
"v0", "d0",
ValueType.LONG ValueType.LONG
))) )))
.setAggregatorSpecs(aggregators(new CountAggregatorFactory("a0"))) .setAggregatorSpecs(aggregators(new CountAggregatorFactory("a0")))
@ -6244,7 +6244,7 @@ public class CalciteQueryTest extends BaseCalciteQueryTest
new LongMinAggregatorFactory("_a1", "a0"), new LongMinAggregatorFactory("_a1", "a0"),
new LongSumAggregatorFactory("_a2:sum", "a0"), new LongSumAggregatorFactory("_a2:sum", "a0"),
new CountAggregatorFactory("_a2:count"), new CountAggregatorFactory("_a2:count"),
new LongMaxAggregatorFactory("_a3", "v0"), new LongMaxAggregatorFactory("_a3", "d0"),
new CountAggregatorFactory("_a4") new CountAggregatorFactory("_a4")
)) ))
.setPostAggregatorSpecs( .setPostAggregatorSpecs(
@ -6301,7 +6301,7 @@ public class CalciteQueryTest extends BaseCalciteQueryTest
) )
.setDimensions(dimensions(new DefaultDimensionSpec( .setDimensions(dimensions(new DefaultDimensionSpec(
"v0", "v0",
"v0", "d0",
ValueType.LONG ValueType.LONG
))) )))
.setAggregatorSpecs(aggregators(new CountAggregatorFactory("a0"))) .setAggregatorSpecs(aggregators(new CountAggregatorFactory("a0")))
@ -6375,7 +6375,7 @@ public class CalciteQueryTest extends BaseCalciteQueryTest
) )
.setDimensions(dimensions(new DefaultDimensionSpec( .setDimensions(dimensions(new DefaultDimensionSpec(
"v0", "v0",
"v0", "d0",
ValueType.LONG ValueType.LONG
))) )))
.setAggregatorSpecs(aggregators(new CountAggregatorFactory("a0"))) .setAggregatorSpecs(aggregators(new CountAggregatorFactory("a0")))
@ -6733,7 +6733,7 @@ public class CalciteQueryTest extends BaseCalciteQueryTest
) )
.setDimensions(dimensions(new DefaultDimensionSpec( .setDimensions(dimensions(new DefaultDimensionSpec(
"v0", "v0",
"v0", "d0",
ValueType.LONG ValueType.LONG
))) )))
.setAggregatorSpecs( .setAggregatorSpecs(
@ -7490,7 +7490,7 @@ public class CalciteQueryTest extends BaseCalciteQueryTest
"(((timestamp_extract(\"__time\",'MONTH','UTC') - 1) / 3) + 1)", "(((timestamp_extract(\"__time\",'MONTH','UTC') - 1) / 3) + 1)",
ValueType.LONG ValueType.LONG
)) ))
.setDimensions(dimensions(new DefaultDimensionSpec("v0", "v0", ValueType.LONG))) .setDimensions(dimensions(new DefaultDimensionSpec("v0", "d0", ValueType.LONG)))
.setAggregatorSpecs(aggregators(new CountAggregatorFactory("a0"))) .setAggregatorSpecs(aggregators(new CountAggregatorFactory("a0")))
.setContext(QUERY_CONTEXT_DEFAULT) .setContext(QUERY_CONTEXT_DEFAULT)
.build() .build()
@ -8053,7 +8053,7 @@ public class CalciteQueryTest extends BaseCalciteQueryTest
.setVirtualColumns( .setVirtualColumns(
expressionVirtualColumn("v0", "floor(CAST(\"dim1\", 'DOUBLE'))", ValueType.FLOAT) expressionVirtualColumn("v0", "floor(CAST(\"dim1\", 'DOUBLE'))", ValueType.FLOAT)
) )
.setDimensions(dimensions(new DefaultDimensionSpec("v0", "v0", ValueType.FLOAT))) .setDimensions(dimensions(new DefaultDimensionSpec("v0", "d0", ValueType.FLOAT)))
.setAggregatorSpecs(aggregators(new CountAggregatorFactory("a0"))) .setAggregatorSpecs(aggregators(new CountAggregatorFactory("a0")))
.setContext(QUERY_CONTEXT_DEFAULT) .setContext(QUERY_CONTEXT_DEFAULT)
.build() .build()
@ -8091,7 +8091,7 @@ public class CalciteQueryTest extends BaseCalciteQueryTest
dimensions( dimensions(
new DefaultDimensionSpec( new DefaultDimensionSpec(
"v0", "v0",
"v0", "d0",
ValueType.FLOAT ValueType.FLOAT
) )
) )
@ -8101,7 +8101,7 @@ public class CalciteQueryTest extends BaseCalciteQueryTest
new DefaultLimitSpec( new DefaultLimitSpec(
ImmutableList.of( ImmutableList.of(
new OrderByColumnSpec( new OrderByColumnSpec(
"v0", "d0",
OrderByColumnSpec.Direction.DESCENDING, OrderByColumnSpec.Direction.DESCENDING,
StringComparators.NUMERIC StringComparators.NUMERIC
) )
@ -8146,8 +8146,8 @@ public class CalciteQueryTest extends BaseCalciteQueryTest
) )
.setDimensions( .setDimensions(
dimensions( dimensions(
new DefaultDimensionSpec("v0", "v0", ValueType.LONG), new DefaultDimensionSpec("v0", "d0", ValueType.LONG),
new DefaultDimensionSpec("dim2", "d0") new DefaultDimensionSpec("dim2", "d1")
) )
) )
.setAggregatorSpecs( .setAggregatorSpecs(
@ -8159,12 +8159,12 @@ public class CalciteQueryTest extends BaseCalciteQueryTest
new DefaultLimitSpec( new DefaultLimitSpec(
ImmutableList.of( ImmutableList.of(
new OrderByColumnSpec( new OrderByColumnSpec(
"v0", "d0",
OrderByColumnSpec.Direction.ASCENDING, OrderByColumnSpec.Direction.ASCENDING,
StringComparators.NUMERIC StringComparators.NUMERIC
), ),
new OrderByColumnSpec( new OrderByColumnSpec(
"d0", "d1",
OrderByColumnSpec.Direction.ASCENDING, OrderByColumnSpec.Direction.ASCENDING,
StringComparators.LEXICOGRAPHIC StringComparators.LEXICOGRAPHIC
), ),
@ -8213,7 +8213,7 @@ public class CalciteQueryTest extends BaseCalciteQueryTest
.setInterval(querySegmentSpec(Filtration.eternity())) .setInterval(querySegmentSpec(Filtration.eternity()))
.setGranularity(Granularities.ALL) .setGranularity(Granularities.ALL)
.setVirtualColumns(expressionVirtualColumn("v0", "strlen(\"dim1\")", ValueType.LONG)) .setVirtualColumns(expressionVirtualColumn("v0", "strlen(\"dim1\")", ValueType.LONG))
.setDimensions(dimensions(new DefaultDimensionSpec("v0", "v0", ValueType.LONG))) .setDimensions(dimensions(new DefaultDimensionSpec("v0", "d0", ValueType.LONG)))
.setAggregatorSpecs(aggregators(new CountAggregatorFactory("a0"))) .setAggregatorSpecs(aggregators(new CountAggregatorFactory("a0")))
.setContext(QUERY_CONTEXT_DEFAULT) .setContext(QUERY_CONTEXT_DEFAULT)
.build() .build()
@ -8969,13 +8969,13 @@ public class CalciteQueryTest extends BaseCalciteQueryTest
ValueType.LONG ValueType.LONG
) )
) )
.setDimensions(dimensions(new DefaultDimensionSpec("v0", "v0", ValueType.LONG))) .setDimensions(dimensions(new DefaultDimensionSpec("v0", "d0", ValueType.LONG)))
.setAggregatorSpecs(aggregators(new LongSumAggregatorFactory("a0", "cnt"))) .setAggregatorSpecs(aggregators(new LongSumAggregatorFactory("a0", "cnt")))
.setLimitSpec( .setLimitSpec(
new DefaultLimitSpec( new DefaultLimitSpec(
ImmutableList.of( ImmutableList.of(
new OrderByColumnSpec( new OrderByColumnSpec(
"v0", "d0",
OrderByColumnSpec.Direction.ASCENDING, OrderByColumnSpec.Direction.ASCENDING,
StringComparators.NUMERIC StringComparators.NUMERIC
) )
@ -9020,13 +9020,13 @@ public class CalciteQueryTest extends BaseCalciteQueryTest
ValueType.LONG ValueType.LONG
) )
) )
.setDimensions(dimensions(new DefaultDimensionSpec("v0", "v0", ValueType.LONG))) .setDimensions(dimensions(new DefaultDimensionSpec("v0", "d0", ValueType.LONG)))
.setAggregatorSpecs(aggregators(new LongSumAggregatorFactory("a0", "cnt"))) .setAggregatorSpecs(aggregators(new LongSumAggregatorFactory("a0", "cnt")))
.setLimitSpec( .setLimitSpec(
new DefaultLimitSpec( new DefaultLimitSpec(
ImmutableList.of( ImmutableList.of(
new OrderByColumnSpec( new OrderByColumnSpec(
"v0", "d0",
OrderByColumnSpec.Direction.ASCENDING, OrderByColumnSpec.Direction.ASCENDING,
StringComparators.NUMERIC StringComparators.NUMERIC
) )
@ -9303,13 +9303,13 @@ public class CalciteQueryTest extends BaseCalciteQueryTest
ValueType.LONG ValueType.LONG
) )
) )
.setDimensions(dimensions(new DefaultDimensionSpec("v0", "v0", ValueType.LONG))) .setDimensions(dimensions(new DefaultDimensionSpec("v0", "d0", ValueType.LONG)))
.setAggregatorSpecs(aggregators(new LongSumAggregatorFactory("a0", "cnt"))) .setAggregatorSpecs(aggregators(new LongSumAggregatorFactory("a0", "cnt")))
.setLimitSpec( .setLimitSpec(
new DefaultLimitSpec( new DefaultLimitSpec(
ImmutableList.of( ImmutableList.of(
new OrderByColumnSpec( new OrderByColumnSpec(
"v0", "d0",
OrderByColumnSpec.Direction.ASCENDING, OrderByColumnSpec.Direction.ASCENDING,
StringComparators.NUMERIC StringComparators.NUMERIC
) )
@ -9352,13 +9352,13 @@ public class CalciteQueryTest extends BaseCalciteQueryTest
ValueType.STRING ValueType.STRING
) )
) )
.setDimensions(dimensions(new DefaultDimensionSpec("v0", "v0", ValueType.STRING))) .setDimensions(dimensions(new DefaultDimensionSpec("v0", "d0", ValueType.STRING)))
.setAggregatorSpecs(aggregators(new LongSumAggregatorFactory("a0", "cnt"))) .setAggregatorSpecs(aggregators(new LongSumAggregatorFactory("a0", "cnt")))
.setLimitSpec( .setLimitSpec(
new DefaultLimitSpec( new DefaultLimitSpec(
ImmutableList.of( ImmutableList.of(
new OrderByColumnSpec( new OrderByColumnSpec(
"v0", "d0",
OrderByColumnSpec.Direction.ASCENDING, OrderByColumnSpec.Direction.ASCENDING,
StringComparators.LEXICOGRAPHIC StringComparators.LEXICOGRAPHIC
) )
@ -9399,7 +9399,7 @@ public class CalciteQueryTest extends BaseCalciteQueryTest
ValueType.LONG ValueType.LONG
) )
) )
.setDimensions(dimensions(new DefaultDimensionSpec("v0", "v0", ValueType.LONG))) .setDimensions(dimensions(new DefaultDimensionSpec("v0", "d0", ValueType.LONG)))
.setAggregatorSpecs(aggregators(new LongSumAggregatorFactory("a0", "cnt"))) .setAggregatorSpecs(aggregators(new LongSumAggregatorFactory("a0", "cnt")))
.setContext(QUERY_CONTEXT_DEFAULT) .setContext(QUERY_CONTEXT_DEFAULT)
.build() .build()
@ -9437,7 +9437,7 @@ public class CalciteQueryTest extends BaseCalciteQueryTest
ValueType.LONG ValueType.LONG
) )
) )
.setDimensions(dimensions(new DefaultDimensionSpec("v0", "v0", ValueType.LONG))) .setDimensions(dimensions(new DefaultDimensionSpec("v0", "d0", ValueType.LONG)))
.setAggregatorSpecs(aggregators(new LongSumAggregatorFactory("a0", "cnt"))) .setAggregatorSpecs(aggregators(new LongSumAggregatorFactory("a0", "cnt")))
.setContext(QUERY_CONTEXT_LOS_ANGELES) .setContext(QUERY_CONTEXT_LOS_ANGELES)
.build() .build()
@ -9561,7 +9561,7 @@ public class CalciteQueryTest extends BaseCalciteQueryTest
.setDimensions( .setDimensions(
dimensions( dimensions(
new DefaultDimensionSpec("dim2", "d0"), new DefaultDimensionSpec("dim2", "d0"),
new DefaultDimensionSpec("v0", "v0", ValueType.LONG) new DefaultDimensionSpec("v0", "d1", ValueType.LONG)
) )
) )
.setAggregatorSpecs(aggregators(new LongSumAggregatorFactory("a0", "cnt"))) .setAggregatorSpecs(aggregators(new LongSumAggregatorFactory("a0", "cnt")))
@ -9570,7 +9570,7 @@ public class CalciteQueryTest extends BaseCalciteQueryTest
ImmutableList.of( ImmutableList.of(
new OrderByColumnSpec("d0", OrderByColumnSpec.Direction.ASCENDING), new OrderByColumnSpec("d0", OrderByColumnSpec.Direction.ASCENDING),
new OrderByColumnSpec( new OrderByColumnSpec(
"v0", "d1",
OrderByColumnSpec.Direction.ASCENDING, OrderByColumnSpec.Direction.ASCENDING,
StringComparators.NUMERIC StringComparators.NUMERIC
) )
@ -9629,16 +9629,16 @@ public class CalciteQueryTest extends BaseCalciteQueryTest
) )
.setDimensions( .setDimensions(
dimensions( dimensions(
new DefaultDimensionSpec("v0", "v0"), new DefaultDimensionSpec("v0", "d0"),
new DefaultDimensionSpec("v1", "v1", ValueType.LONG) new DefaultDimensionSpec("v1", "d1", ValueType.LONG)
) )
) )
.setAggregatorSpecs(aggregators(new LongSumAggregatorFactory("a0", "cnt"))) .setAggregatorSpecs(aggregators(new LongSumAggregatorFactory("a0", "cnt")))
.setSubtotalsSpec( .setSubtotalsSpec(
ImmutableList.of( ImmutableList.of(
ImmutableList.of("v0", "v1"), ImmutableList.of("d0", "d1"),
ImmutableList.of("v0"), ImmutableList.of("d0"),
ImmutableList.of("v1"), ImmutableList.of("d1"),
ImmutableList.of() ImmutableList.of()
) )
) )
@ -9720,15 +9720,15 @@ public class CalciteQueryTest extends BaseCalciteQueryTest
) )
.setDimensions( .setDimensions(
dimensions( dimensions(
new DefaultDimensionSpec("v0", "v0"), new DefaultDimensionSpec("v0", "d0"),
new DefaultDimensionSpec("v1", "v1", ValueType.LONG) new DefaultDimensionSpec("v1", "d1", ValueType.LONG)
) )
) )
.setAggregatorSpecs(aggregators(new LongSumAggregatorFactory("a0", "cnt"))) .setAggregatorSpecs(aggregators(new LongSumAggregatorFactory("a0", "cnt")))
.setSubtotalsSpec( .setSubtotalsSpec(
ImmutableList.of( ImmutableList.of(
ImmutableList.of("v0", "v1"), ImmutableList.of("d0", "d1"),
ImmutableList.of("v0"), ImmutableList.of("d0"),
ImmutableList.of() ImmutableList.of()
) )
) )
@ -9779,15 +9779,15 @@ public class CalciteQueryTest extends BaseCalciteQueryTest
) )
.setDimensions( .setDimensions(
dimensions( dimensions(
new DefaultDimensionSpec("v0", "v0", ValueType.LONG), new DefaultDimensionSpec("v0", "d0", ValueType.LONG),
new DefaultDimensionSpec("v1", "v1") new DefaultDimensionSpec("v1", "d1")
) )
) )
.setAggregatorSpecs(aggregators(new LongSumAggregatorFactory("a0", "cnt"))) .setAggregatorSpecs(aggregators(new LongSumAggregatorFactory("a0", "cnt")))
.setSubtotalsSpec( .setSubtotalsSpec(
ImmutableList.of( ImmutableList.of(
ImmutableList.of("v0", "v1"), ImmutableList.of("d0", "d1"),
ImmutableList.of("v0"), ImmutableList.of("d0"),
ImmutableList.of() ImmutableList.of()
) )
) )
@ -9836,16 +9836,16 @@ public class CalciteQueryTest extends BaseCalciteQueryTest
) )
.setDimensions( .setDimensions(
dimensions( dimensions(
new DefaultDimensionSpec("v0", "v0"), new DefaultDimensionSpec("v0", "d0"),
new DefaultDimensionSpec("v1", "v1", ValueType.LONG) new DefaultDimensionSpec("v1", "d1", ValueType.LONG)
) )
) )
.setAggregatorSpecs(aggregators(new LongSumAggregatorFactory("a0", "cnt"))) .setAggregatorSpecs(aggregators(new LongSumAggregatorFactory("a0", "cnt")))
.setSubtotalsSpec( .setSubtotalsSpec(
ImmutableList.of( ImmutableList.of(
ImmutableList.of("v0", "v1"), ImmutableList.of("d0", "d1"),
ImmutableList.of("v0"), ImmutableList.of("d0"),
ImmutableList.of("v1"), ImmutableList.of("d1"),
ImmutableList.of() ImmutableList.of()
) )
) )
@ -9897,17 +9897,17 @@ public class CalciteQueryTest extends BaseCalciteQueryTest
) )
.setDimensions( .setDimensions(
dimensions( dimensions(
new DefaultDimensionSpec("v0", "v0"), new DefaultDimensionSpec("v0", "d0"),
new DefaultDimensionSpec("v2", "v2", ValueType.LONG) new DefaultDimensionSpec("v2", "d2", ValueType.LONG)
) )
) )
.setAggregatorSpecs(aggregators(new LongSumAggregatorFactory("a0", "cnt"))) .setAggregatorSpecs(aggregators(new LongSumAggregatorFactory("a0", "cnt")))
.setSubtotalsSpec( .setSubtotalsSpec(
ImmutableList.of( ImmutableList.of(
ImmutableList.of("v0", "v2"), ImmutableList.of("d0", "d2"),
ImmutableList.of("v0"), ImmutableList.of("d0"),
ImmutableList.of(), ImmutableList.of(),
ImmutableList.of("v2") ImmutableList.of("d2")
) )
) )
.setContext(QUERY_CONTEXT_DEFAULT) .setContext(QUERY_CONTEXT_DEFAULT)
@ -9959,15 +9959,15 @@ public class CalciteQueryTest extends BaseCalciteQueryTest
) )
.setDimensions( .setDimensions(
dimensions( dimensions(
new DefaultDimensionSpec("v0", "v0"), new DefaultDimensionSpec("v0", "d0"),
new DefaultDimensionSpec("v1", "v1", ValueType.LONG) new DefaultDimensionSpec("v1", "d1", ValueType.LONG)
) )
) )
.setAggregatorSpecs(aggregators(new LongSumAggregatorFactory("a0", "cnt"))) .setAggregatorSpecs(aggregators(new LongSumAggregatorFactory("a0", "cnt")))
.setSubtotalsSpec( .setSubtotalsSpec(
ImmutableList.of( ImmutableList.of(
ImmutableList.of("v0"), ImmutableList.of("d0"),
ImmutableList.of("v1"), ImmutableList.of("d1"),
ImmutableList.of() ImmutableList.of()
) )
) )
@ -10015,15 +10015,15 @@ public class CalciteQueryTest extends BaseCalciteQueryTest
) )
.setDimensions( .setDimensions(
dimensions( dimensions(
new DefaultDimensionSpec("v0", "v0"), new DefaultDimensionSpec("v0", "d0"),
new DefaultDimensionSpec("v1", "v1", ValueType.LONG) new DefaultDimensionSpec("v1", "d1", ValueType.LONG)
) )
) )
.setAggregatorSpecs(aggregators(new LongSumAggregatorFactory("a0", "cnt"))) .setAggregatorSpecs(aggregators(new LongSumAggregatorFactory("a0", "cnt")))
.setSubtotalsSpec( .setSubtotalsSpec(
ImmutableList.of( ImmutableList.of(
ImmutableList.of("v0"), ImmutableList.of("d0"),
ImmutableList.of("v1"), ImmutableList.of("d1"),
ImmutableList.of() ImmutableList.of()
) )
) )
@ -10031,12 +10031,12 @@ public class CalciteQueryTest extends BaseCalciteQueryTest
new DefaultLimitSpec( new DefaultLimitSpec(
ImmutableList.of( ImmutableList.of(
new OrderByColumnSpec( new OrderByColumnSpec(
"v1", "d1",
Direction.ASCENDING, Direction.ASCENDING,
StringComparators.NUMERIC StringComparators.NUMERIC
), ),
new OrderByColumnSpec( new OrderByColumnSpec(
"v0", "d0",
Direction.DESCENDING, Direction.DESCENDING,
StringComparators.LEXICOGRAPHIC StringComparators.LEXICOGRAPHIC
) )
@ -10088,15 +10088,15 @@ public class CalciteQueryTest extends BaseCalciteQueryTest
) )
.setDimensions( .setDimensions(
dimensions( dimensions(
new DefaultDimensionSpec("v0", "v0"), new DefaultDimensionSpec("v0", "d0"),
new DefaultDimensionSpec("v1", "v1", ValueType.LONG) new DefaultDimensionSpec("v1", "d1", ValueType.LONG)
) )
) )
.setAggregatorSpecs(aggregators(new LongSumAggregatorFactory("a0", "cnt"))) .setAggregatorSpecs(aggregators(new LongSumAggregatorFactory("a0", "cnt")))
.setSubtotalsSpec( .setSubtotalsSpec(
ImmutableList.of( ImmutableList.of(
ImmutableList.of("v0"), ImmutableList.of("d0"),
ImmutableList.of("v1"), ImmutableList.of("d1"),
ImmutableList.of() ImmutableList.of()
) )
) )
@ -10157,15 +10157,15 @@ public class CalciteQueryTest extends BaseCalciteQueryTest
) )
.setDimensions( .setDimensions(
dimensions( dimensions(
new DefaultDimensionSpec("v0", "v0"), new DefaultDimensionSpec("v0", "d0"),
new DefaultDimensionSpec("v1", "v1", ValueType.LONG) new DefaultDimensionSpec("v1", "d1", ValueType.LONG)
) )
) )
.setAggregatorSpecs(aggregators(new LongSumAggregatorFactory("a0", "cnt"))) .setAggregatorSpecs(aggregators(new LongSumAggregatorFactory("a0", "cnt")))
.setSubtotalsSpec( .setSubtotalsSpec(
ImmutableList.of( ImmutableList.of(
ImmutableList.of("v0"), ImmutableList.of("d0"),
ImmutableList.of("v1"), ImmutableList.of("d1"),
ImmutableList.of() ImmutableList.of()
) )
) )
@ -10457,7 +10457,7 @@ public class CalciteQueryTest extends BaseCalciteQueryTest
selector("dim2", "abc", null) selector("dim2", "abc", null)
) )
) )
.setDimensions(dimensions(new DefaultDimensionSpec("v0", "v0", ValueType.LONG))) .setDimensions(dimensions(new DefaultDimensionSpec("v0", "d0", ValueType.LONG)))
.setInterval(querySegmentSpec(Filtration.eternity())) .setInterval(querySegmentSpec(Filtration.eternity()))
.setGranularity(Granularities.ALL) .setGranularity(Granularities.ALL)
.setAggregatorSpecs( .setAggregatorSpecs(
@ -10477,7 +10477,7 @@ public class CalciteQueryTest extends BaseCalciteQueryTest
new DefaultLimitSpec( new DefaultLimitSpec(
ImmutableList.of( ImmutableList.of(
new OrderByColumnSpec( new OrderByColumnSpec(
"v0", "d0",
OrderByColumnSpec.Direction.ASCENDING, OrderByColumnSpec.Direction.ASCENDING,
StringComparators.NUMERIC StringComparators.NUMERIC
) )
@ -11444,7 +11444,7 @@ public class CalciteQueryTest extends BaseCalciteQueryTest
ValueType.STRING ValueType.STRING
) )
) )
.setDimensions(dimensions(new DefaultDimensionSpec("v0", "v0", ValueType.STRING))) .setDimensions(dimensions(new DefaultDimensionSpec("v0", "d0", ValueType.STRING)))
.setAggregatorSpecs(aggregators(new CountAggregatorFactory("a0"))) .setAggregatorSpecs(aggregators(new CountAggregatorFactory("a0")))
.setContext(QUERY_CONTEXT_DEFAULT) .setContext(QUERY_CONTEXT_DEFAULT)
.build() .build()
@ -11501,7 +11501,7 @@ public class CalciteQueryTest extends BaseCalciteQueryTest
.setVirtualColumns(expressionVirtualColumn("v0", "concat(\"dim3\",'foo')", ValueType.STRING)) .setVirtualColumns(expressionVirtualColumn("v0", "concat(\"dim3\",'foo')", ValueType.STRING))
.setDimensions( .setDimensions(
dimensions( dimensions(
new DefaultDimensionSpec("v0", "v0", ValueType.STRING) new DefaultDimensionSpec("v0", "_d0", ValueType.STRING)
) )
) )
.setAggregatorSpecs(aggregators(new LongSumAggregatorFactory("a0", "cnt"))) .setAggregatorSpecs(aggregators(new LongSumAggregatorFactory("a0", "cnt")))
@ -11536,7 +11536,7 @@ public class CalciteQueryTest extends BaseCalciteQueryTest
.setVirtualColumns(expressionVirtualColumn("v0", "concat(\"dim3\",'foo')", ValueType.STRING)) .setVirtualColumns(expressionVirtualColumn("v0", "concat(\"dim3\",'foo')", ValueType.STRING))
.setDimensions( .setDimensions(
dimensions( dimensions(
new DefaultDimensionSpec("v0", "v0", ValueType.STRING) new DefaultDimensionSpec("v0", "_d0", ValueType.STRING)
) )
) )
.setDimFilter(selector("v0", "bfoo", null)) .setDimFilter(selector("v0", "bfoo", null))
@ -11820,13 +11820,13 @@ public class CalciteQueryTest extends BaseCalciteQueryTest
.setDimensions( .setDimensions(
dimensions( dimensions(
new DefaultDimensionSpec("dim1", "_d0", ValueType.STRING), new DefaultDimensionSpec("dim1", "_d0", ValueType.STRING),
new DefaultDimensionSpec("v0", "v0", ValueType.LONG) new DefaultDimensionSpec("v0", "_d1", ValueType.LONG)
) )
) )
.setAggregatorSpecs(aggregators(new LongSumAggregatorFactory("a0", "cnt"))) .setAggregatorSpecs(aggregators(new LongSumAggregatorFactory("a0", "cnt")))
.setLimitSpec(new DefaultLimitSpec( .setLimitSpec(new DefaultLimitSpec(
ImmutableList.of(new OrderByColumnSpec( ImmutableList.of(new OrderByColumnSpec(
"v0", "_d1",
Direction.DESCENDING, Direction.DESCENDING,
StringComparators.NUMERIC StringComparators.NUMERIC
)), )),
@ -11883,7 +11883,7 @@ public class CalciteQueryTest extends BaseCalciteQueryTest
.setVirtualColumns(expressionVirtualColumn("v0", "array_append(\"dim3\",'foo')", ValueType.STRING)) .setVirtualColumns(expressionVirtualColumn("v0", "array_append(\"dim3\",'foo')", ValueType.STRING))
.setDimensions( .setDimensions(
dimensions( dimensions(
new DefaultDimensionSpec("v0", "v0", ValueType.STRING) new DefaultDimensionSpec("v0", "_d0", ValueType.STRING)
) )
) )
.setAggregatorSpecs(aggregators(new LongSumAggregatorFactory("a0", "cnt"))) .setAggregatorSpecs(aggregators(new LongSumAggregatorFactory("a0", "cnt")))
@ -11939,7 +11939,7 @@ public class CalciteQueryTest extends BaseCalciteQueryTest
.setVirtualColumns(expressionVirtualColumn("v0", "array_prepend('foo',\"dim3\")", ValueType.STRING)) .setVirtualColumns(expressionVirtualColumn("v0", "array_prepend('foo',\"dim3\")", ValueType.STRING))
.setDimensions( .setDimensions(
dimensions( dimensions(
new DefaultDimensionSpec("v0", "v0", ValueType.STRING) new DefaultDimensionSpec("v0", "_d0", ValueType.STRING)
) )
) )
.setAggregatorSpecs(aggregators(new LongSumAggregatorFactory("a0", "cnt"))) .setAggregatorSpecs(aggregators(new LongSumAggregatorFactory("a0", "cnt")))
@ -11994,8 +11994,8 @@ public class CalciteQueryTest extends BaseCalciteQueryTest
) )
.setDimensions( .setDimensions(
dimensions( dimensions(
new DefaultDimensionSpec("v0", "v0", ValueType.STRING), new DefaultDimensionSpec("v0", "_d0", ValueType.STRING),
new DefaultDimensionSpec("v1", "v1", ValueType.STRING) new DefaultDimensionSpec("v1", "_d1", ValueType.STRING)
) )
) )
.setAggregatorSpecs(aggregators(new LongSumAggregatorFactory("a0", "cnt"))) .setAggregatorSpecs(aggregators(new LongSumAggregatorFactory("a0", "cnt")))
@ -12049,7 +12049,7 @@ public class CalciteQueryTest extends BaseCalciteQueryTest
.setVirtualColumns(expressionVirtualColumn("v0", "array_concat(\"dim3\",\"dim3\")", ValueType.STRING)) .setVirtualColumns(expressionVirtualColumn("v0", "array_concat(\"dim3\",\"dim3\")", ValueType.STRING))
.setDimensions( .setDimensions(
dimensions( dimensions(
new DefaultDimensionSpec("v0", "v0", ValueType.STRING) new DefaultDimensionSpec("v0", "_d0", ValueType.STRING)
) )
) )
.setAggregatorSpecs(aggregators(new LongSumAggregatorFactory("a0", "cnt"))) .setAggregatorSpecs(aggregators(new LongSumAggregatorFactory("a0", "cnt")))
@ -12084,7 +12084,7 @@ public class CalciteQueryTest extends BaseCalciteQueryTest
.setVirtualColumns(expressionVirtualColumn("v0", "array_offset(\"dim3\",1)", ValueType.STRING)) .setVirtualColumns(expressionVirtualColumn("v0", "array_offset(\"dim3\",1)", ValueType.STRING))
.setDimensions( .setDimensions(
dimensions( dimensions(
new DefaultDimensionSpec("v0", "v0", ValueType.STRING) new DefaultDimensionSpec("v0", "_d0", ValueType.STRING)
) )
) )
.setAggregatorSpecs(aggregators(new LongSumAggregatorFactory("a0", "cnt"))) .setAggregatorSpecs(aggregators(new LongSumAggregatorFactory("a0", "cnt")))
@ -12123,7 +12123,7 @@ public class CalciteQueryTest extends BaseCalciteQueryTest
.setVirtualColumns(expressionVirtualColumn("v0", "array_ordinal(\"dim3\",2)", ValueType.STRING)) .setVirtualColumns(expressionVirtualColumn("v0", "array_ordinal(\"dim3\",2)", ValueType.STRING))
.setDimensions( .setDimensions(
dimensions( dimensions(
new DefaultDimensionSpec("v0", "v0", ValueType.STRING) new DefaultDimensionSpec("v0", "_d0", ValueType.STRING)
) )
) )
.setAggregatorSpecs(aggregators(new LongSumAggregatorFactory("a0", "cnt"))) .setAggregatorSpecs(aggregators(new LongSumAggregatorFactory("a0", "cnt")))
@ -12162,7 +12162,7 @@ public class CalciteQueryTest extends BaseCalciteQueryTest
.setVirtualColumns(expressionVirtualColumn("v0", "array_offset_of(\"dim3\",'b')", ValueType.LONG)) .setVirtualColumns(expressionVirtualColumn("v0", "array_offset_of(\"dim3\",'b')", ValueType.LONG))
.setDimensions( .setDimensions(
dimensions( dimensions(
new DefaultDimensionSpec("v0", "v0", ValueType.LONG) new DefaultDimensionSpec("v0", "_d0", ValueType.LONG)
) )
) )
.setAggregatorSpecs(aggregators(new LongSumAggregatorFactory("a0", "cnt"))) .setAggregatorSpecs(aggregators(new LongSumAggregatorFactory("a0", "cnt")))
@ -12201,7 +12201,7 @@ public class CalciteQueryTest extends BaseCalciteQueryTest
.setVirtualColumns(expressionVirtualColumn("v0", "array_ordinal_of(\"dim3\",'b')", ValueType.LONG)) .setVirtualColumns(expressionVirtualColumn("v0", "array_ordinal_of(\"dim3\",'b')", ValueType.LONG))
.setDimensions( .setDimensions(
dimensions( dimensions(
new DefaultDimensionSpec("v0", "v0", ValueType.LONG) new DefaultDimensionSpec("v0", "_d0", ValueType.LONG)
) )
) )
.setAggregatorSpecs(aggregators(new LongSumAggregatorFactory("a0", "cnt"))) .setAggregatorSpecs(aggregators(new LongSumAggregatorFactory("a0", "cnt")))
@ -12257,7 +12257,7 @@ public class CalciteQueryTest extends BaseCalciteQueryTest
.setVirtualColumns(expressionVirtualColumn("v0", "array_to_string(\"dim3\",',')", ValueType.STRING)) .setVirtualColumns(expressionVirtualColumn("v0", "array_to_string(\"dim3\",',')", ValueType.STRING))
.setDimensions( .setDimensions(
dimensions( dimensions(
new DefaultDimensionSpec("v0", "v0", ValueType.STRING) new DefaultDimensionSpec("v0", "_d0", ValueType.STRING)
) )
) )
.setAggregatorSpecs(aggregators(new LongSumAggregatorFactory("a0", "cnt"))) .setAggregatorSpecs(aggregators(new LongSumAggregatorFactory("a0", "cnt")))
@ -12319,7 +12319,7 @@ public class CalciteQueryTest extends BaseCalciteQueryTest
.setDimFilter(bound("v0", "0", null, true, false, null, StringComparators.NUMERIC)) .setDimFilter(bound("v0", "0", null, true, false, null, StringComparators.NUMERIC))
.setDimensions( .setDimensions(
dimensions( dimensions(
new DefaultDimensionSpec("v1", "v1", ValueType.STRING) new DefaultDimensionSpec("v1", "_d0", ValueType.STRING)
) )
) )
.setAggregatorSpecs(aggregators(new LongSumAggregatorFactory("a0", "cnt"))) .setAggregatorSpecs(aggregators(new LongSumAggregatorFactory("a0", "cnt")))
@ -12461,4 +12461,38 @@ public class CalciteQueryTest extends BaseCalciteQueryTest
results2 results2
); );
} }
@Test
public void testRepeatedIdenticalVirtualExpressionGrouping() throws Exception
{
cannotVectorize();
final String query = "SELECT \n"
+ "\tCASE dim1 WHEN NULL THEN FALSE ELSE TRUE END AS col_a,\n"
+ "\tCASE dim2 WHEN NULL THEN FALSE ELSE TRUE END AS col_b\n"
+ "FROM foo\n"
+ "GROUP BY 1, 2";
testQuery(
query,
ImmutableList.of(
GroupByQuery.builder()
.setDataSource(CalciteTests.DATASOURCE1)
.setInterval(querySegmentSpec(Filtration.eternity()))
.setGranularity(Granularities.ALL)
.setVirtualColumns(expressionVirtualColumn("v0", "1", ValueType.LONG))
.setDimensions(
dimensions(
new DefaultDimensionSpec("v0", "d0", ValueType.LONG),
new DefaultDimensionSpec("v0", "d1", ValueType.LONG)
)
)
.setContext(QUERY_CONTEXT_DEFAULT)
.build()
),
ImmutableList.of(
new Object[]{true, true}
)
);
}
} }