Repository: hive Updated Branches: refs/heads/branch-3 9d80c2d6a -> a2c08792a
HIVE-19923: Follow up of HIVE-19615, use UnaryFunction instead of prefix (Slim Bouguerra, reviewed by Nishant Bangarwa, Ashutosh Chauhan) Project: http://git-wip-us.apache.org/repos/asf/hive/repo Commit: http://git-wip-us.apache.org/repos/asf/hive/commit/a2c08792 Tree: http://git-wip-us.apache.org/repos/asf/hive/tree/a2c08792 Diff: http://git-wip-us.apache.org/repos/asf/hive/diff/a2c08792 Branch: refs/heads/branch-3 Commit: a2c08792a6ee44adc09f8392ad24f5f3a791b696 Parents: 9d80c2d Author: Slim Bouguerra <slim.bougue...@gmail.com> Authored: Mon Jun 18 07:54:44 2018 -0700 Committer: Jesus Camacho Rodriguez <jcama...@apache.org> Committed: Mon Jun 18 07:55:14 2018 -0700 ---------------------------------------------------------------------- .../ql/parse/DruidSqlOperatorConverter.java | 35 ++++++++++++++++++-- .../clientpositive/druid/druidmini_test1.q.out | 2 +- 2 files changed, 34 insertions(+), 3 deletions(-) ---------------------------------------------------------------------- http://git-wip-us.apache.org/repos/asf/hive/blob/a2c08792/ql/src/java/org/apache/hadoop/hive/ql/parse/DruidSqlOperatorConverter.java ---------------------------------------------------------------------- diff --git a/ql/src/java/org/apache/hadoop/hive/ql/parse/DruidSqlOperatorConverter.java b/ql/src/java/org/apache/hadoop/hive/ql/parse/DruidSqlOperatorConverter.java index 4db0714..6aa98c0 100644 --- a/ql/src/java/org/apache/hadoop/hive/ql/parse/DruidSqlOperatorConverter.java +++ b/ql/src/java/org/apache/hadoop/hive/ql/parse/DruidSqlOperatorConverter.java @@ -21,6 +21,7 @@ package org.apache.hadoop.hive.ql.parse; import com.google.common.base.Function; import com.google.common.base.Preconditions; import com.google.common.collect.ImmutableList; +import com.google.common.collect.Iterables; import com.google.common.collect.Maps; import org.apache.calcite.adapter.druid.DirectOperatorConversion; import org.apache.calcite.adapter.druid.DruidExpressions; @@ -51,6 +52,7 @@ import org.joda.time.Period; import javax.annotation.Nullable; import java.util.HashMap; +import java.util.List; import java.util.Map; import java.util.TimeZone; @@ -87,9 +89,9 @@ public class DruidSqlOperatorConverter { druidOperatorMap .put(SqlStdOperatorTable.SUBSTRING, new DruidSqlOperatorConverter.DruidSubstringOperatorConversion()); druidOperatorMap - .put(SqlStdOperatorTable.IS_NULL, new UnarySuffixOperatorConversion(SqlStdOperatorTable.IS_NULL, "isnull")); + .put(SqlStdOperatorTable.IS_NULL, new UnaryFunctionOperatorConversion(SqlStdOperatorTable.IS_NULL, "isnull")); druidOperatorMap.put(SqlStdOperatorTable.IS_NOT_NULL, - new UnarySuffixOperatorConversion(SqlStdOperatorTable.IS_NOT_NULL, "notnull") + new UnaryFunctionOperatorConversion(SqlStdOperatorTable.IS_NOT_NULL, "notnull") ); druidOperatorMap.put(HiveTruncSqlOperator.INSTANCE, new DruidDateTruncOperatorConversion()); druidOperatorMap.put(HiveToDateSqlOperator.INSTANCE, new DruidToDateOperatorConversion()); @@ -346,4 +348,33 @@ public class DruidSqlOperatorConverter { ); } + public static class UnaryFunctionOperatorConversion implements org.apache.calcite.adapter.druid.DruidSqlOperatorConverter { + + private final SqlOperator operator; + private final String druidOperator; + + public UnaryFunctionOperatorConversion(SqlOperator operator, String druidOperator) { + this.operator = operator; + this.druidOperator = druidOperator; + } + + @Override public SqlOperator calciteOperator() { + return operator; + } + + @Override public String toDruidExpression(RexNode rexNode, RelDataType rowType, + DruidQuery druidQuery) { + final RexCall call = (RexCall) rexNode; + + final List<String> druidExpressions = DruidExpressions.toDruidExpressions( + druidQuery, rowType, + call.getOperands()); + + if (druidExpressions == null) { + return null; + } + + return DruidQuery.format("%s(%s)", druidOperator, Iterables.getOnlyElement(druidExpressions)); + } + } } http://git-wip-us.apache.org/repos/asf/hive/blob/a2c08792/ql/src/test/results/clientpositive/druid/druidmini_test1.q.out ---------------------------------------------------------------------- diff --git a/ql/src/test/results/clientpositive/druid/druidmini_test1.q.out b/ql/src/test/results/clientpositive/druid/druidmini_test1.q.out index 89da36a..4e078aa 100644 --- a/ql/src/test/results/clientpositive/druid/druidmini_test1.q.out +++ b/ql/src/test/results/clientpositive/druid/druidmini_test1.q.out @@ -814,7 +814,7 @@ STAGE PLANS: properties: druid.fieldNames vc,vc0 druid.fieldTypes boolean,boolean - druid.query.json {"queryType":"scan","dataSource":"default.druid_table_n3","intervals":["1900-01-01T00:00:00.000Z/3000-01-01T00:00:00.000Z"],"virtualColumns":[{"type":"expression","name":"vc","expression":"(\"cstring1\" isnull)","outputType":"FLOAT"},{"type":"expression","name":"vc0","expression":"(\"cint\" notnull)","outputType":"FLOAT"}],"columns":["vc","vc0"],"resultFormat":"compactedList"} + druid.query.json {"queryType":"scan","dataSource":"default.druid_table_n3","intervals":["1900-01-01T00:00:00.000Z/3000-01-01T00:00:00.000Z"],"virtualColumns":[{"type":"expression","name":"vc","expression":"isnull(\"cstring1\")","outputType":"FLOAT"},{"type":"expression","name":"vc0","expression":"notnull(\"cint\")","outputType":"FLOAT"}],"columns":["vc","vc0"],"resultFormat":"compactedList"} druid.query.type scan Select Operator expressions: vc (type: boolean), vc0 (type: boolean)