This is an automated email from the ASF dual-hosted git repository. dzamo pushed a commit to branch 1.21 in repository https://gitbox.apache.org/repos/asf/drill.git
commit 0d7e476b3c2bae4d82406c371d6e2235eec3fc46 Author: James Turton <9107319+jntur...@users.noreply.github.com> AuthorDate: Tue Feb 28 21:33:06 2023 +0200 DRILL-8406: Enable Implicit Casting of VARCHAR and BIT args in Aggregate Functions --- docs/dev/Release.md | 4 +- .../exec/expr/fn/impl/AggregateErrorFunctions.java | 156 --------------------- .../java/org/apache/drill/TestImplicitCasting.java | 17 +++ 3 files changed, 19 insertions(+), 158 deletions(-) diff --git a/docs/dev/Release.md b/docs/dev/Release.md index 08d1fa52da..694eef945f 100644 --- a/docs/dev/Release.md +++ b/docs/dev/Release.md @@ -255,9 +255,9 @@ [1] https://issues.apache.org/jira/secure/ReleaseNote.jspa?projectId=12313820&version=12341087 - [2] http://home.apache.org/~arina/drill/releases/1.12.0-rc0/ + [2] https://dist.apache.org/repos/dist/dev/drill/drill-1.17.0-rc0 [3] https://repository.apache.org/content/repositories/orgapachedrill-1043/ - [4] https://github.com/arina-ielchiieva/drill/commits/drill-1.12.0 + [4] https://github.com/arina-ielchiieva/drill/commits/drill-1.17.0 ``` 3. If the vote fails, cancel RC and prepare new RC: 1. Send an email with announcing about canceling the vote. diff --git a/exec/java-exec/src/main/java/org/apache/drill/exec/expr/fn/impl/AggregateErrorFunctions.java b/exec/java-exec/src/main/java/org/apache/drill/exec/expr/fn/impl/AggregateErrorFunctions.java deleted file mode 100644 index ec6292d1ed..0000000000 --- a/exec/java-exec/src/main/java/org/apache/drill/exec/expr/fn/impl/AggregateErrorFunctions.java +++ /dev/null @@ -1,156 +0,0 @@ -/* - * Licensed to the Apache Software Foundation (ASF) under one - * or more contributor license agreements. See the NOTICE file - * distributed with this work for additional information - * regarding copyright ownership. The ASF licenses this file - * to you under the Apache License, Version 2.0 (the - * "License"); you may not use this file except in compliance - * with the License. You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - */ -package org.apache.drill.exec.expr.fn.impl; - -import org.apache.drill.exec.expr.DrillAggFunc; -import org.apache.drill.exec.expr.annotations.FunctionTemplate; -import org.apache.drill.exec.expr.annotations.Output; -import org.apache.drill.exec.expr.annotations.Param; -import org.apache.drill.exec.expr.annotations.Workspace; -import org.apache.drill.exec.expr.holders.BigIntHolder; -import org.apache.drill.exec.expr.holders.BitHolder; -import org.apache.drill.exec.expr.holders.NullableBitHolder; -import org.apache.drill.exec.expr.holders.NullableVarCharHolder; -import org.apache.drill.exec.expr.holders.VarCharHolder; - -/* - * TODO: For a handful of functions this approach of using function binding to detect that it is an invalid function is okay. - * However moving forward we should introduce a validation phase after we learn the data types and before we try - * to perform function resolution. Otherwise with implicit cast we will try to bind to an existing function. - */ -public class AggregateErrorFunctions { - - @FunctionTemplate(names = {"sum", "avg", "stddev_pop", "stddev_samp", "stddev", "var_pop", - "var_samp", "variance"}, scope = FunctionTemplate.FunctionScope.POINT_AGGREGATE) - public static class BitAggregateErrorFunctions implements DrillAggFunc { - - @Param BitHolder in; - @Workspace BigIntHolder value; - @Output BigIntHolder out; - - public void setup() { - if (true) { - throw org.apache.drill.common.exceptions.UserException.unsupportedError() - .message("Only COUNT aggregate function supported for Boolean type") - .build(); - } - } - - @Override - public void add() { - } - - @Override - public void output() { - } - - @Override - public void reset() { - } - - } - - @FunctionTemplate(names = {"sum", "avg", "stddev_pop", "stddev_samp", "stddev", "var_pop", - "var_samp", "variance"}, scope = FunctionTemplate.FunctionScope.POINT_AGGREGATE) - public static class NullableBitAggregateErrorFunctions implements DrillAggFunc { - - @Param NullableBitHolder in; - @Workspace BigIntHolder value; - @Output BigIntHolder out; - - public void setup() { - if (true) { - throw org.apache.drill.common.exceptions.UserException.unsupportedError() - .message("Only COUNT aggregate function supported for Boolean type") - .build(); - } - } - - @Override - public void add() { - } - - @Override - public void output() { - } - - @Override - public void reset() { - } - } - - - @FunctionTemplate(names = {"sum", "avg", "stddev_pop", "stddev_samp", "stddev", "var_pop", "var_samp", "variance"}, - scope = FunctionTemplate.FunctionScope.POINT_AGGREGATE) - public static class VarCharAggregateErrorFunctions implements DrillAggFunc { - - @Param VarCharHolder in; - @Workspace BigIntHolder value; - @Output BigIntHolder out; - - public void setup() { - if (true) { - throw org.apache.drill.common.exceptions.UserException.unsupportedError() - .message("Only COUNT, MIN and MAX aggregate functions supported for VarChar type") - .build(); - } - } - - @Override - public void add() { - } - - @Override - public void output() { - } - - @Override - public void reset() { - } - - } - - @FunctionTemplate(names = {"sum", "avg", "stddev_pop", "stddev_samp", "stddev", "var_pop", "var_samp", "variance"}, - scope = FunctionTemplate.FunctionScope.POINT_AGGREGATE) - public static class NullableVarCharAggregateErrorFunctions implements DrillAggFunc { - - @Param NullableVarCharHolder in; - @Workspace BigIntHolder value; - @Output BigIntHolder out; - - public void setup() { - if (true) { - throw org.apache.drill.common.exceptions.UserException.unsupportedError() - .message("Only COUNT, MIN and MAX aggregate functions supported for VarChar type") - .build(); - } - } - - @Override - public void add() { - } - - @Override - public void output() { - } - - @Override - public void reset() { - } - } -} diff --git a/exec/java-exec/src/test/java/org/apache/drill/TestImplicitCasting.java b/exec/java-exec/src/test/java/org/apache/drill/TestImplicitCasting.java index a167ce614d..54a0fe738b 100644 --- a/exec/java-exec/src/test/java/org/apache/drill/TestImplicitCasting.java +++ b/exec/java-exec/src/test/java/org/apache/drill/TestImplicitCasting.java @@ -238,4 +238,21 @@ public class TestImplicitCasting extends ClusterTest { RowSetUtilities.verify(expected, results); } + + @Test + public void testAvgOfStrings() throws Exception { + String sql = "select avg(cast(employee_id as varchar)) from cp.`employee.json`"; + + DirectRowSet results = queryBuilder().sql(sql).rowSet(); + + TupleMetadata expectedSchema = new SchemaBuilder() + .add("EXPR$0", TypeProtos.MinorType.FLOAT8, TypeProtos.DataMode.OPTIONAL) + .build(); + + RowSet expected = client.rowSetBuilder(expectedSchema) + .addRow(578.9982683982684) + .build(); + + RowSetUtilities.verify(expected, results); + } }