diff options
author | Volodymyr Vysotskyi <vvovyk@gmail.com> | 2018-07-02 17:59:42 +0300 |
---|---|---|
committer | Arina Ielchiieva <arina.yelchiyeva@gmail.com> | 2018-08-27 10:02:41 +0300 |
commit | 989618287559de5e87349c637cb91150ea6a5135 (patch) | |
tree | d74af368891e91f6b2dca74d199a9ea6620d2326 /exec/java-exec/src/main/java/org/apache/drill/exec/planner | |
parent | 8bcb103a0e3bcc5f85a03cbed3c6c0cea254ec4e (diff) |
DRILL-6647: Update Calcite version to 1.17.0
closes #1425
Diffstat (limited to 'exec/java-exec/src/main/java/org/apache/drill/exec/planner')
4 files changed, 37 insertions, 32 deletions
diff --git a/exec/java-exec/src/main/java/org/apache/drill/exec/planner/logical/DirPrunedEnumerableTableScan.java b/exec/java-exec/src/main/java/org/apache/drill/exec/planner/logical/DirPrunedEnumerableTableScan.java index 2202986a4..7fd348faf 100644 --- a/exec/java-exec/src/main/java/org/apache/drill/exec/planner/logical/DirPrunedEnumerableTableScan.java +++ b/exec/java-exec/src/main/java/org/apache/drill/exec/planner/logical/DirPrunedEnumerableTableScan.java @@ -17,14 +17,12 @@ */ package org.apache.drill.exec.planner.logical; -import com.google.common.base.Supplier; import com.google.common.collect.ImmutableList; import org.apache.calcite.adapter.enumerable.EnumerableConvention; import org.apache.calcite.adapter.enumerable.EnumerableTableScan; import org.apache.calcite.plan.RelOptCluster; import org.apache.calcite.plan.RelOptTable; import org.apache.calcite.plan.RelTraitSet; -import org.apache.calcite.rel.RelCollation; import org.apache.calcite.rel.RelCollationTraitDef; import org.apache.calcite.rel.RelNode; import org.apache.calcite.rel.RelWriter; @@ -62,13 +60,11 @@ public class DirPrunedEnumerableTableScan extends EnumerableTableScan { final RelTraitSet traitSet = cluster.traitSetOf(EnumerableConvention.INSTANCE) .replaceIfs(RelCollationTraitDef.INSTANCE, - new Supplier<List<RelCollation>>() { - public List<RelCollation> get() { - if (table != null) { - return table.getStatistic().getCollations(); - } - return ImmutableList.of(); + () -> { + if (table != null) { + return table.getStatistic().getCollations(); } + return ImmutableList.of(); }); return new DirPrunedEnumerableTableScan(cluster, traitSet, relOptTable, elementType, digestFromSelection); } diff --git a/exec/java-exec/src/main/java/org/apache/drill/exec/planner/logical/DrillConditions.java b/exec/java-exec/src/main/java/org/apache/drill/exec/planner/logical/DrillConditions.java index 266ce64b3..1341be10b 100644 --- a/exec/java-exec/src/main/java/org/apache/drill/exec/planner/logical/DrillConditions.java +++ b/exec/java-exec/src/main/java/org/apache/drill/exec/planner/logical/DrillConditions.java @@ -19,24 +19,14 @@ package org.apache.drill.exec.planner.logical; import org.apache.calcite.rel.rules.PushProjector; import org.apache.calcite.rex.RexCall; -import org.apache.calcite.rex.RexNode; public final class DrillConditions { - public static PushProjector.ExprCondition PRESERVE_ITEM = new PushProjector.ExprCondition() { - - @Override - public boolean apply(RexNode rexNode) { - return false; - } - - @Override - public boolean test(RexNode expr) { - if (expr instanceof RexCall) { - RexCall call = (RexCall)expr; - return "item".equals(call.getOperator().getName().toLowerCase()); - } - return false; + public static final PushProjector.ExprCondition PRESERVE_ITEM = expr -> { + if (expr instanceof RexCall) { + RexCall call = (RexCall) expr; + return "item".equals(call.getOperator().getName().toLowerCase()); } + return false; }; } diff --git a/exec/java-exec/src/main/java/org/apache/drill/exec/planner/sql/DrillConvertletTable.java b/exec/java-exec/src/main/java/org/apache/drill/exec/planner/sql/DrillConvertletTable.java index 34141e548..5f3b95e97 100644 --- a/exec/java-exec/src/main/java/org/apache/drill/exec/planner/sql/DrillConvertletTable.java +++ b/exec/java-exec/src/main/java/org/apache/drill/exec/planner/sql/DrillConvertletTable.java @@ -17,7 +17,9 @@ */ package org.apache.drill.exec.planner.sql; +import java.util.ArrayList; import java.util.HashMap; +import java.util.List; import org.apache.calcite.rex.RexNode; import org.apache.calcite.sql.SqlBasicCall; @@ -25,7 +27,6 @@ import org.apache.calcite.sql.SqlCall; import org.apache.calcite.sql.SqlKind; import org.apache.calcite.sql.SqlOperator; import org.apache.calcite.sql.fun.SqlStdOperatorTable; -import org.apache.calcite.sql2rel.SqlRexContext; import org.apache.calcite.sql2rel.SqlRexConvertlet; import org.apache.calcite.sql2rel.SqlRexConvertletTable; import org.apache.calcite.sql2rel.StandardConvertletTable; @@ -36,19 +37,37 @@ public class DrillConvertletTable implements SqlRexConvertletTable{ public static HashMap<SqlOperator, SqlRexConvertlet> map = new HashMap<>(); public static SqlRexConvertletTable INSTANCE = new DrillConvertletTable(); - private static SqlRexConvertlet sqrtConvertlet = new SqlRexConvertlet() { - public RexNode convertCall(SqlRexContext cx, SqlCall call) { - RexNode operand = cx.convertExpression(call.operand(0)); - return cx.getRexBuilder().makeCall(SqlStdOperatorTable.SQRT, operand); + + private static final SqlRexConvertlet SQRT_CONVERTLET = (cx, call) -> { + RexNode operand = cx.convertExpression(call.operand(0)); + return cx.getRexBuilder().makeCall(SqlStdOperatorTable.SQRT, operand); + }; + + // Rewrites COALESCE function into CASE WHEN IS NOT NULL operand1 THEN operand1... + private static final SqlRexConvertlet COALESCE_CONVERTLET = (cx, call) -> { + int operandsCount = call.operandCount(); + if (operandsCount == 1) { + return cx.convertExpression(call.operand(0)); + } else { + List<RexNode> caseOperands = new ArrayList<>(); + for (int i = 0; i < operandsCount - 1; i++) { + RexNode caseOperand = cx.convertExpression(call.operand(i)); + caseOperands.add(cx.getRexBuilder().makeCall( + SqlStdOperatorTable.IS_NOT_NULL, caseOperand)); + caseOperands.add(caseOperand); + } + caseOperands.add(cx.convertExpression(call.operand(operandsCount - 1))); + return cx.getRexBuilder().makeCall(SqlStdOperatorTable.CASE, caseOperands); } }; static { - // Use custom convertlet for extract function + // Use custom convertlet for EXTRACT function map.put(SqlStdOperatorTable.EXTRACT, DrillExtractConvertlet.INSTANCE); - // sqrt needs it's own convertlet because calcite overrides it to power(x,0.5) + // SQRT needs it's own convertlet because calcite overrides it to POWER(x, 0.5) // which is not suitable for Infinity value case - map.put(SqlStdOperatorTable.SQRT, sqrtConvertlet); + map.put(SqlStdOperatorTable.SQRT, SQRT_CONVERTLET); + map.put(SqlStdOperatorTable.COALESCE, COALESCE_CONVERTLET); map.put(SqlStdOperatorTable.AVG, new DrillAvgVarianceConvertlet(SqlKind.AVG)); map.put(SqlStdOperatorTable.STDDEV_POP, new DrillAvgVarianceConvertlet(SqlKind.STDDEV_POP)); map.put(SqlStdOperatorTable.STDDEV_SAMP, new DrillAvgVarianceConvertlet(SqlKind.STDDEV_SAMP)); diff --git a/exec/java-exec/src/main/java/org/apache/drill/exec/planner/sql/SqlConverter.java b/exec/java-exec/src/main/java/org/apache/drill/exec/planner/sql/SqlConverter.java index d4da23f43..3ab92abbb 100644 --- a/exec/java-exec/src/main/java/org/apache/drill/exec/planner/sql/SqlConverter.java +++ b/exec/java-exec/src/main/java/org/apache/drill/exec/planner/sql/SqlConverter.java @@ -377,7 +377,7 @@ public class SqlConverter { * during creating new projects since it may cause changing data mode * which causes to assertion errors during type validation */ - Hook.REL_BUILDER_SIMPLIFY.add(Hook.property(false)); + Hook.REL_BUILDER_SIMPLIFY.add(Hook.propertyJ(false)); //To avoid unexpected column errors set a value of top to false final RelRoot rel = sqlToRelConverter.convertQuery(validatedNode, false, false); |