This is an automated email from the ASF dual-hosted git repository.
cwylie pushed a commit to branch master
in repository https://gitbox.apache.org/repos/asf/druid.git
The following commit(s) were added to refs/heads/master by this push:
new 3e15522d6b3 Round works correctly on system metadata columns (#15554)
3e15522d6b3 is described below
commit 3e15522d6b3200540841f456d918921811fff328
Author: Soumyava <[email protected]>
AuthorDate: Wed Dec 13 17:23:14 2023 -0800
Round works correctly on system metadata columns (#15554)
---
.../java/org/apache/druid/math/expr/Function.java | 3 +-
.../builtin/RoundOperatorConversion.java | 36 ++++--------------
.../druid/sql/calcite/CalciteSysQueryTest.java | 44 ++++++++++++++++++++--
3 files changed, 50 insertions(+), 33 deletions(-)
diff --git a/processing/src/main/java/org/apache/druid/math/expr/Function.java
b/processing/src/main/java/org/apache/druid/math/expr/Function.java
index 3f90f7c3999..01c317fe098 100644
--- a/processing/src/main/java/org/apache/druid/math/expr/Function.java
+++ b/processing/src/main/java/org/apache/druid/math/expr/Function.java
@@ -1436,11 +1436,12 @@ public interface Function extends NamedFunction
private static final BigDecimal MAX_FINITE_VALUE =
BigDecimal.valueOf(Double.MAX_VALUE);
private static final BigDecimal MIN_FINITE_VALUE = BigDecimal.valueOf(-1 *
Double.MAX_VALUE);
//CHECKSTYLE.ON: Regexp
+ public static final String NAME = "round";
@Override
public String name()
{
- return "round";
+ return NAME;
}
@Override
diff --git
a/sql/src/main/java/org/apache/druid/sql/calcite/expression/builtin/RoundOperatorConversion.java
b/sql/src/main/java/org/apache/druid/sql/calcite/expression/builtin/RoundOperatorConversion.java
index a14e3a0f0d9..e8031e55aee 100644
---
a/sql/src/main/java/org/apache/druid/sql/calcite/expression/builtin/RoundOperatorConversion.java
+++
b/sql/src/main/java/org/apache/druid/sql/calcite/expression/builtin/RoundOperatorConversion.java
@@ -19,41 +19,21 @@
package org.apache.druid.sql.calcite.expression.builtin;
-import org.apache.calcite.rex.RexNode;
import org.apache.calcite.sql.SqlFunction;
-import org.apache.calcite.sql.SqlFunctionCategory;
-import org.apache.calcite.sql.type.ReturnTypes;
-import org.apache.calcite.sql.type.SqlTypeFamily;
-import org.apache.druid.segment.column.RowSignature;
-import org.apache.druid.sql.calcite.expression.DruidExpression;
-import org.apache.druid.sql.calcite.expression.OperatorConversions;
-import org.apache.druid.sql.calcite.expression.SqlOperatorConversion;
-import org.apache.druid.sql.calcite.planner.PlannerContext;
+import org.apache.calcite.sql.fun.SqlStdOperatorTable;
+import org.apache.druid.math.expr.Function;
+import org.apache.druid.sql.calcite.expression.DirectOperatorConversion;
-public class RoundOperatorConversion implements SqlOperatorConversion
+public class RoundOperatorConversion extends DirectOperatorConversion
{
- private static final SqlFunction SQL_FUNCTION = OperatorConversions
- .operatorBuilder("ROUND")
- .operandTypes(SqlTypeFamily.NUMERIC, SqlTypeFamily.INTEGER)
- .requiredOperandCount(1)
- .returnTypeInference(ReturnTypes.ARG0)
- .functionCategory(SqlFunctionCategory.NUMERIC)
- .build();
-
- @Override
- public SqlFunction calciteOperator()
+ public RoundOperatorConversion()
{
- return SQL_FUNCTION;
+ super(SqlStdOperatorTable.ROUND, Function.Round.NAME);
}
@Override
- public DruidExpression toDruidExpression(final PlannerContext
plannerContext, final RowSignature rowSignature, final RexNode rexNode)
+ public SqlFunction calciteOperator()
{
- return OperatorConversions.convertDirectCall(
- plannerContext,
- rowSignature,
- rexNode,
- "round"
- );
+ return SqlStdOperatorTable.ROUND;
}
}
diff --git
a/sql/src/test/java/org/apache/druid/sql/calcite/CalciteSysQueryTest.java
b/sql/src/test/java/org/apache/druid/sql/calcite/CalciteSysQueryTest.java
index 5b0a5dd82e3..7d3737677bc 100644
--- a/sql/src/test/java/org/apache/druid/sql/calcite/CalciteSysQueryTest.java
+++ b/sql/src/test/java/org/apache/druid/sql/calcite/CalciteSysQueryTest.java
@@ -41,10 +41,11 @@ public class CalciteSysQueryTest extends
BaseCalciteQueryTest
.sql("select datasource, sum(duration) from sys.tasks group by
datasource")
.expectedResults(ImmutableList.of(
new Object[]{"foo", 11L},
- new Object[]{"foo2", 22L}))
+ new Object[]{"foo2", 22L}
+ ))
.expectedLogicalPlan("LogicalAggregate(group=[{0}],
EXPR$1=[SUM($1)])\n"
- + " LogicalProject(exprs=[[$3, $8]])\n"
- + " LogicalTableScan(table=[[sys, tasks]])\n")
+ + " LogicalProject(exprs=[[$3, $8]])\n"
+ + " LogicalTableScan(table=[[sys, tasks]])\n")
.run();
}
@@ -59,8 +60,43 @@ public class CalciteSysQueryTest extends BaseCalciteQueryTest
.sql("select datasource, sum(duration) over () from sys.tasks group by
datasource")
.expectedResults(ImmutableList.of(
new Object[]{"foo", 11L},
- new Object[]{"foo2", 22L}))
+ new Object[]{"foo2", 22L}
+ ))
// please add expectedLogicalPlan if this test starts passing!
.run();
}
+
+ @Test
+ public void testRoundOnSysTableColumn()
+ {
+ msqIncompatible();
+
+ testBuilder()
+ .sql("select round(duration, 1) from sys.tasks ")
+ .expectedResults(ImmutableList.of(
+ new Object[]{10L},
+ new Object[]{1L},
+ new Object[]{20L},
+ new Object[]{2L}
+ ))
+ .expectedLogicalPlan("LogicalProject(exprs=[[ROUND($8, 1)]])\n"
+ + " LogicalTableScan(table=[[sys, tasks]])\n")
+ .run();
+ }
+
+ @Test
+ public void testRoundOnAvgOnSysTableColumn()
+ {
+ msqIncompatible();
+
+ testBuilder()
+ .sql("select round(avg(duration), 1) from sys.tasks ")
+ .expectedResults(ImmutableList.of(
+ new Object[]{8.3D}))
+ .expectedLogicalPlan("LogicalProject(exprs=[[ROUND($0, 1)]])\n"
+ + " LogicalAggregate(group=[{}],
agg#0=[AVG($0)])\n"
+ + " LogicalProject(exprs=[[$8]])\n"
+ + " LogicalTableScan(table=[[sys,
tasks]])\n")
+ .run();
+ }
}
---------------------------------------------------------------------
To unsubscribe, e-mail: [email protected]
For additional commands, e-mail: [email protected]