From 2c50264ace6888d3818dff9fd2dab44e899071f5 Mon Sep 17 00:00:00 2001 From: Samarth Jain Date: Wed, 17 Jul 2019 16:36:58 -0700 Subject: [PATCH 1/2] Fix druid sql group by queries returning complex aggregation type --- .../org/apache/druid/sql/calcite/rel/Projection.java | 12 ++++++++---- 1 file changed, 8 insertions(+), 4 deletions(-) diff --git a/sql/src/main/java/org/apache/druid/sql/calcite/rel/Projection.java b/sql/src/main/java/org/apache/druid/sql/calcite/rel/Projection.java index 5dcd90c5ef50..d0e66b0f9ebe 100644 --- a/sql/src/main/java/org/apache/druid/sql/calcite/rel/Projection.java +++ b/sql/src/main/java/org/apache/druid/sql/calcite/rel/Projection.java @@ -28,6 +28,7 @@ import org.apache.druid.query.aggregation.PostAggregator; import org.apache.druid.query.aggregation.post.ExpressionPostAggregator; import org.apache.druid.segment.VirtualColumn; +import org.apache.druid.segment.column.ValueType; import org.apache.druid.sql.calcite.expression.DruidExpression; import org.apache.druid.sql.calcite.expression.Expressions; import org.apache.druid.sql.calcite.planner.Calcites; @@ -193,11 +194,14 @@ private static boolean postAggregatorDirectColumnIsOk( return false; } - // Check if a cast is necessary. - final ExprType toExprType = Expressions.exprTypeForValueType( - aggregateRowSignature.getColumnType(expression.getDirectColumn()) - ); + // We don't really have a way to cast complex type. So might as well not do anything and return. + final ValueType columnValueType = aggregateRowSignature.getColumnType(expression.getDirectColumn()); + if (expression.isDirectColumnAccess() && columnValueType == ValueType.COMPLEX) { + return true; + } + // Check if a cast is necessary. + final ExprType toExprType = Expressions.exprTypeForValueType(columnValueType); final ExprType fromExprType = Expressions.exprTypeForValueType( Calcites.getValueTypeForSqlTypeName(rexNode.getType().getSqlTypeName()) ); From df82bbfe478dd22ae166b6ee2f8d5389964a5c98 Mon Sep 17 00:00:00 2001 From: Samarth Jain Date: Wed, 17 Jul 2019 23:35:02 -0700 Subject: [PATCH 2/2] Remove unnecessary check --- .../main/java/org/apache/druid/sql/calcite/rel/Projection.java | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/sql/src/main/java/org/apache/druid/sql/calcite/rel/Projection.java b/sql/src/main/java/org/apache/druid/sql/calcite/rel/Projection.java index d0e66b0f9ebe..68962ac91c1a 100644 --- a/sql/src/main/java/org/apache/druid/sql/calcite/rel/Projection.java +++ b/sql/src/main/java/org/apache/druid/sql/calcite/rel/Projection.java @@ -196,7 +196,7 @@ private static boolean postAggregatorDirectColumnIsOk( // We don't really have a way to cast complex type. So might as well not do anything and return. final ValueType columnValueType = aggregateRowSignature.getColumnType(expression.getDirectColumn()); - if (expression.isDirectColumnAccess() && columnValueType == ValueType.COMPLEX) { + if (columnValueType == ValueType.COMPLEX) { return true; }