You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@drill.apache.org by am...@apache.org on 2015/04/01 19:46:18 UTC

[1/2] drill git commit: DRILL-2590: In implicit casting rule, make boolean to be implicitly castable from boolean only

Repository: drill
Updated Branches:
  refs/heads/master 7b11e3e8f -> d05ff9d84


DRILL-2590: In implicit casting rule, make boolean to be implicitly castable from boolean only


Project: http://git-wip-us.apache.org/repos/asf/drill/repo
Commit: http://git-wip-us.apache.org/repos/asf/drill/commit/451bc5ae
Tree: http://git-wip-us.apache.org/repos/asf/drill/tree/451bc5ae
Diff: http://git-wip-us.apache.org/repos/asf/drill/diff/451bc5ae

Branch: refs/heads/master
Commit: 451bc5ae024defec4e2f61e6fc0c3886cd80ec4c
Parents: 7b11e3e
Author: Hsuan-Yi Chu <hs...@usc.edu>
Authored: Fri Mar 27 13:38:50 2015 -0700
Committer: Aman Sinha <as...@maprtech.com>
Committed: Wed Apr 1 10:32:37 2015 -0700

----------------------------------------------------------------------
 .../drill/exec/resolver/TypeCastRules.java      | 23 --------------------
 .../java/org/apache/drill/TestUnionAll.java     | 14 ++++++++++++
 .../test/resources/store/json/booleanData.json  |  2 ++
 .../src/test/resources/store/json/intData.json  |  2 ++
 4 files changed, 18 insertions(+), 23 deletions(-)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/drill/blob/451bc5ae/exec/java-exec/src/main/java/org/apache/drill/exec/resolver/TypeCastRules.java
----------------------------------------------------------------------
diff --git a/exec/java-exec/src/main/java/org/apache/drill/exec/resolver/TypeCastRules.java b/exec/java-exec/src/main/java/org/apache/drill/exec/resolver/TypeCastRules.java
index 8fc6612..d8652f2 100644
--- a/exec/java-exec/src/main/java/org/apache/drill/exec/resolver/TypeCastRules.java
+++ b/exec/java-exec/src/main/java/org/apache/drill/exec/resolver/TypeCastRules.java
@@ -546,30 +546,7 @@ public class TypeCastRules {
     /** BIT cast able from **/
     rule = new HashSet<MinorType>();
     rule.add(MinorType.TINYINT);
-    rule.add(MinorType.SMALLINT);
-    rule.add(MinorType.INT);
-    rule.add(MinorType.BIGINT);
-    rule.add(MinorType.UINT1);
-    rule.add(MinorType.UINT2);
-    rule.add(MinorType.UINT4);
-    rule.add(MinorType.UINT8);
-    rule.add(MinorType.DECIMAL9);
-    rule.add(MinorType.DECIMAL18);
-    rule.add(MinorType.DECIMAL28SPARSE);
-    rule.add(MinorType.DECIMAL28DENSE);
-    rule.add(MinorType.DECIMAL38SPARSE);
-    rule.add(MinorType.DECIMAL38DENSE);
-    rule.add(MinorType.MONEY);
-    rule.add(MinorType.TIMESTAMPTZ);
-    rule.add(MinorType.FLOAT4);
-    rule.add(MinorType.FLOAT8);
     rule.add(MinorType.BIT);
-    rule.add(MinorType.FIXEDCHAR);
-    rule.add(MinorType.FIXED16CHAR);
-    rule.add(MinorType.VARCHAR);
-    rule.add(MinorType.VAR16CHAR);
-    rule.add(MinorType.VARBINARY);
-    rule.add(MinorType.FIXEDBINARY);
     rules.put(MinorType.BIT, rule);
 
     /** FIXEDCHAR cast able from **/

http://git-wip-us.apache.org/repos/asf/drill/blob/451bc5ae/exec/java-exec/src/test/java/org/apache/drill/TestUnionAll.java
----------------------------------------------------------------------
diff --git a/exec/java-exec/src/test/java/org/apache/drill/TestUnionAll.java b/exec/java-exec/src/test/java/org/apache/drill/TestUnionAll.java
index 1ebb534..fcf5c9f 100644
--- a/exec/java-exec/src/test/java/org/apache/drill/TestUnionAll.java
+++ b/exec/java-exec/src/test/java/org/apache/drill/TestUnionAll.java
@@ -19,6 +19,7 @@ package org.apache.drill;
 
 import org.apache.drill.common.types.TypeProtos;
 import org.apache.drill.common.util.FileUtils;
+import org.apache.drill.exec.rpc.RpcException;
 import org.apache.drill.exec.work.foreman.SqlUnsupportedException;
 import org.apache.drill.exec.work.foreman.UnsupportedRelOperatorException;
 import org.junit.Test;
@@ -354,4 +355,17 @@ public class TestUnionAll extends BaseTestQuery{
         .baselineColumns("calc1", "min", "max", "count")
         .build().run();
   }
+
+  @Test(expected = RpcException.class) // see DRILL-2590
+  public void testUnionAllImplicitCastingFailure() throws Exception {
+    String rootInt = FileUtils.getResourceAsFile("/store/json/intData.json").toURI().toString();
+    String rootBoolean = FileUtils.getResourceAsFile("/store/json/booleanData.json").toURI().toString();
+
+    String query = String.format(
+        "(select key from dfs_test.`%s` " +
+        "union all " +
+        "select key from dfs_test.`%s` )", rootInt, rootBoolean);
+
+    test(query);
+  }
 }
\ No newline at end of file

http://git-wip-us.apache.org/repos/asf/drill/blob/451bc5ae/exec/java-exec/src/test/resources/store/json/booleanData.json
----------------------------------------------------------------------
diff --git a/exec/java-exec/src/test/resources/store/json/booleanData.json b/exec/java-exec/src/test/resources/store/json/booleanData.json
new file mode 100644
index 0000000..63be3a1
--- /dev/null
+++ b/exec/java-exec/src/test/resources/store/json/booleanData.json
@@ -0,0 +1,2 @@
+{"key":true}
+{"key":false}
\ No newline at end of file

http://git-wip-us.apache.org/repos/asf/drill/blob/451bc5ae/exec/java-exec/src/test/resources/store/json/intData.json
----------------------------------------------------------------------
diff --git a/exec/java-exec/src/test/resources/store/json/intData.json b/exec/java-exec/src/test/resources/store/json/intData.json
new file mode 100644
index 0000000..b28b287
--- /dev/null
+++ b/exec/java-exec/src/test/resources/store/json/intData.json
@@ -0,0 +1,2 @@
+{"key":52459253098448904}
+{"key":1116675951}
\ No newline at end of file


[2/2] drill git commit: DRILL-2559: In case window functions are disabled, throw UnsupportedFunctionException

Posted by am...@apache.org.
DRILL-2559: In case window functions are disabled, throw UnsupportedFunctionException


Project: http://git-wip-us.apache.org/repos/asf/drill/repo
Commit: http://git-wip-us.apache.org/repos/asf/drill/commit/d05ff9d8
Tree: http://git-wip-us.apache.org/repos/asf/drill/tree/d05ff9d8
Diff: http://git-wip-us.apache.org/repos/asf/drill/diff/d05ff9d8

Branch: refs/heads/master
Commit: d05ff9d841b9a8f47ed522dfab5dd59fb1fdbfd1
Parents: 451bc5a
Author: Hsuan-Yi Chu <hs...@usc.edu>
Authored: Wed Mar 25 09:45:47 2015 -0700
Committer: Aman Sinha <as...@maprtech.com>
Committed: Wed Apr 1 10:33:06 2015 -0700

----------------------------------------------------------------------
 .../exec/physical/impl/window/OverFinder.java   | 53 --------------------
 .../planner/sql/handlers/DefaultSqlHandler.java | 11 +---
 .../sql/parser/UnsupportedOperatorsVisitor.java | 23 ++++++---
 .../apache/drill/TestDisabledFunctionality.java | 13 +++++
 4 files changed, 30 insertions(+), 70 deletions(-)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/drill/blob/d05ff9d8/exec/java-exec/src/main/java/org/apache/drill/exec/physical/impl/window/OverFinder.java
----------------------------------------------------------------------
diff --git a/exec/java-exec/src/main/java/org/apache/drill/exec/physical/impl/window/OverFinder.java b/exec/java-exec/src/main/java/org/apache/drill/exec/physical/impl/window/OverFinder.java
deleted file mode 100644
index 40e5920..0000000
--- a/exec/java-exec/src/main/java/org/apache/drill/exec/physical/impl/window/OverFinder.java
+++ /dev/null
@@ -1,53 +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.physical.impl.window;
-
-import org.eigenbase.sql.SqlCall;
-import org.eigenbase.sql.SqlKind;
-import org.eigenbase.sql.SqlNode;
-import org.eigenbase.sql.SqlOperator;
-import org.eigenbase.sql.util.SqlBasicVisitor;
-import org.eigenbase.util.Util;
-
-/**
- * Visitor which looks for an over clause inside a tree of {@link
- * SqlNode} objects.
- */
-public class OverFinder extends SqlBasicVisitor<Void> {
-
-  public boolean findOver(SqlNode node) {
-    try {
-      node.accept(this);
-      return false;
-    } catch (Util.FoundOne e) {
-      Util.swallow(e, null);
-      return true;
-    }
-  }
-
-  @Override
-  public Void visit(SqlCall call) {
-    final SqlOperator operator = call.getOperator();
-
-    if (operator.getKind().equals(SqlKind.OVER)) {
-      throw new Util.FoundOne(call);
-    }
-
-    return super.visit(call);
-  }
-}
\ No newline at end of file

http://git-wip-us.apache.org/repos/asf/drill/blob/d05ff9d8/exec/java-exec/src/main/java/org/apache/drill/exec/planner/sql/handlers/DefaultSqlHandler.java
----------------------------------------------------------------------
diff --git a/exec/java-exec/src/main/java/org/apache/drill/exec/planner/sql/handlers/DefaultSqlHandler.java b/exec/java-exec/src/main/java/org/apache/drill/exec/planner/sql/handlers/DefaultSqlHandler.java
index 37003f1..5ee502d 100644
--- a/exec/java-exec/src/main/java/org/apache/drill/exec/planner/sql/handlers/DefaultSqlHandler.java
+++ b/exec/java-exec/src/main/java/org/apache/drill/exec/planner/sql/handlers/DefaultSqlHandler.java
@@ -37,7 +37,6 @@ import org.apache.drill.exec.physical.PhysicalPlan;
 import org.apache.drill.exec.physical.base.AbstractPhysicalVisitor;
 import org.apache.drill.exec.physical.base.PhysicalOperator;
 import org.apache.drill.exec.physical.impl.join.JoinUtils;
-import org.apache.drill.exec.physical.impl.window.OverFinder;
 import org.apache.drill.exec.planner.logical.DrillRel;
 import org.apache.drill.exec.planner.logical.DrillScreenRel;
 import org.apache.drill.exec.planner.logical.DrillStoreRel;
@@ -146,18 +145,10 @@ public class DefaultSqlHandler extends AbstractSqlHandler {
   }
 
   protected SqlNode validateNode(SqlNode sqlNode) throws ValidationException, RelConversionException, ForemanSetupException {
-    final boolean enableWindow = context.getOptions().getOption(ExecConstants.ENABLE_WINDOW_FUNCTIONS).bool_val;
-    if (!enableWindow) {
-      final OverFinder overFinder = new OverFinder();
-      if (overFinder.findOver(sqlNode)) {
-        throw new ValidationException("Window Functions have been disabled");
-      }
-    }
-
     SqlNode sqlNodeValidated = planner.validate(sqlNode);
 
     // Check if the unsupported functionality is used
-    UnsupportedOperatorsVisitor visitor = UnsupportedOperatorsVisitor.createVisitor();
+    UnsupportedOperatorsVisitor visitor = UnsupportedOperatorsVisitor.createVisitor(context);
     try {
       sqlNodeValidated.accept(visitor);
     } catch (UnsupportedOperationException ex) {

http://git-wip-us.apache.org/repos/asf/drill/blob/d05ff9d8/exec/java-exec/src/main/java/org/apache/drill/exec/planner/sql/parser/UnsupportedOperatorsVisitor.java
----------------------------------------------------------------------
diff --git a/exec/java-exec/src/main/java/org/apache/drill/exec/planner/sql/parser/UnsupportedOperatorsVisitor.java b/exec/java-exec/src/main/java/org/apache/drill/exec/planner/sql/parser/UnsupportedOperatorsVisitor.java
index 81734dc..4830fe1 100644
--- a/exec/java-exec/src/main/java/org/apache/drill/exec/planner/sql/parser/UnsupportedOperatorsVisitor.java
+++ b/exec/java-exec/src/main/java/org/apache/drill/exec/planner/sql/parser/UnsupportedOperatorsVisitor.java
@@ -19,15 +19,13 @@ package org.apache.drill.exec.planner.sql.parser;
 
 import org.apache.drill.exec.ExecConstants;
 import org.apache.drill.exec.exception.UnsupportedOperatorCollector;
-import org.apache.drill.exec.planner.StarColumnHelper;
+import org.apache.drill.exec.ops.QueryContext;
 import org.apache.drill.exec.work.foreman.SqlUnsupportedException;
 import org.eigenbase.sql.SqlCall;
 import org.eigenbase.sql.SqlKind;
 import org.eigenbase.sql.SqlJoin;
 import org.eigenbase.sql.JoinType;
 import org.eigenbase.sql.SqlNode;
-import org.eigenbase.sql.SqlNodeList;
-import org.eigenbase.sql.SqlSelect;
 import org.eigenbase.sql.type.SqlTypeName;
 import org.eigenbase.sql.util.SqlShuttle;
 import org.eigenbase.sql.SqlDataTypeSpec;
@@ -36,6 +34,7 @@ import java.util.List;
 import com.google.common.collect.Lists;
 
 public class UnsupportedOperatorsVisitor extends SqlShuttle {
+  private QueryContext context;
   private static List<String> disabledType = Lists.newArrayList();
   private static List<String> disabledOperators = Lists.newArrayList();
 
@@ -48,12 +47,13 @@ public class UnsupportedOperatorsVisitor extends SqlShuttle {
 
   private UnsupportedOperatorCollector unsupportedOperatorCollector;
 
-  private UnsupportedOperatorsVisitor() {
-    unsupportedOperatorCollector = new UnsupportedOperatorCollector();
+  private UnsupportedOperatorsVisitor(QueryContext context) {
+    this.context = context;
+    this.unsupportedOperatorCollector = new UnsupportedOperatorCollector();
   }
 
-  public static UnsupportedOperatorsVisitor createVisitor() {
-    return new UnsupportedOperatorsVisitor();
+  public static UnsupportedOperatorsVisitor createVisitor(QueryContext context) {
+    return new UnsupportedOperatorsVisitor(context);
   }
 
   public void convertException() throws SqlUnsupportedException {
@@ -116,6 +116,15 @@ public class UnsupportedOperatorsVisitor extends SqlShuttle {
       }
     }
 
+    // Throw exceptions if window functions are disabled
+    if(sqlCall.getOperator().getKind().equals(SqlKind.OVER)
+        && !context.getOptions().getOption(ExecConstants.ENABLE_WINDOW_FUNCTIONS).bool_val) {
+      unsupportedOperatorCollector.setException(SqlUnsupportedException.ExceptionType.FUNCTION,
+          "Window functions are disabled\n" +
+          "See Apache Drill JIRA: DRILL-2559");
+      throw new UnsupportedOperationException();
+    }
+
     // Disable Function
     for(String strOperator : disabledOperators) {
       if(sqlCall.getOperator().isName(strOperator)) {

http://git-wip-us.apache.org/repos/asf/drill/blob/d05ff9d8/exec/java-exec/src/test/java/org/apache/drill/TestDisabledFunctionality.java
----------------------------------------------------------------------
diff --git a/exec/java-exec/src/test/java/org/apache/drill/TestDisabledFunctionality.java b/exec/java-exec/src/test/java/org/apache/drill/TestDisabledFunctionality.java
index f64d3e5..f62f060 100644
--- a/exec/java-exec/src/test/java/org/apache/drill/TestDisabledFunctionality.java
+++ b/exec/java-exec/src/test/java/org/apache/drill/TestDisabledFunctionality.java
@@ -312,4 +312,17 @@ public class TestDisabledFunctionality extends BaseTestQuery{
       throw ex;
     }
   }
+
+  @Test(expected = UnsupportedFunctionException.class) // see DRILL-2441
+  public void testDisabledWindowFunctions() throws Exception {
+    try {
+      test("SELECT employee_id,position_id, salary, avg(salary) " +
+          "OVER (PARTITION BY position_id order by position_id) " +
+          "FROM cp.`employee.json` " +
+          "order by employee_id;");
+    } catch(Exception ex) {
+      SqlUnsupportedException.errorMessageToException(ex.getMessage());
+      throw ex;
+    }
+  }
 }
\ No newline at end of file