aboutsummaryrefslogtreecommitdiff
path: root/exec/java-exec/src/main/java/org/apache/drill/exec/planner
diff options
context:
space:
mode:
authorVolodymyr Vysotskyi <vvovyk@gmail.com>2018-07-02 17:59:42 +0300
committerArina Ielchiieva <arina.yelchiyeva@gmail.com>2018-08-27 10:02:41 +0300
commit989618287559de5e87349c637cb91150ea6a5135 (patch)
treed74af368891e91f6b2dca74d199a9ea6620d2326 /exec/java-exec/src/main/java/org/apache/drill/exec/planner
parent8bcb103a0e3bcc5f85a03cbed3c6c0cea254ec4e (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')
-rw-r--r--exec/java-exec/src/main/java/org/apache/drill/exec/planner/logical/DirPrunedEnumerableTableScan.java12
-rw-r--r--exec/java-exec/src/main/java/org/apache/drill/exec/planner/logical/DrillConditions.java20
-rw-r--r--exec/java-exec/src/main/java/org/apache/drill/exec/planner/sql/DrillConvertletTable.java35
-rw-r--r--exec/java-exec/src/main/java/org/apache/drill/exec/planner/sql/SqlConverter.java2
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);