You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@drill.apache.org by js...@apache.org on 2015/04/30 01:49:39 UTC
drill git commit: DRILL-2181: Flatten function in order by, group by,
distinct, aggregate functions is disabled
Repository: drill
Updated Branches:
refs/heads/master f5b0f4928 -> e428f0d56
DRILL-2181: Flatten function in order by, group by, distinct, aggregate functions is disabled
Project: http://git-wip-us.apache.org/repos/asf/drill/repo
Commit: http://git-wip-us.apache.org/repos/asf/drill/commit/e428f0d5
Tree: http://git-wip-us.apache.org/repos/asf/drill/tree/e428f0d5
Diff: http://git-wip-us.apache.org/repos/asf/drill/diff/e428f0d5
Branch: refs/heads/master
Commit: e428f0d56955076f0d42f39463983e7a5a0d5c0a
Parents: f5b0f49
Author: Hsuan-Yi Chu <hs...@usc.edu>
Authored: Tue Apr 28 13:38:07 2015 -0700
Committer: Hsuan-Yi Chu <hs...@usc.edu>
Committed: Wed Apr 29 13:38:16 2015 -0700
----------------------------------------------------------------------
.../sql/parser/UnsupportedOperatorsVisitor.java | 64 ++++++++++++++++++++
.../apache/drill/TestDisabledFunctionality.java | 59 ++++++++++++++++++
2 files changed, 123 insertions(+)
----------------------------------------------------------------------
http://git-wip-us.apache.org/repos/asf/drill/blob/e428f0d5/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 45bf26f..f1ec851 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
@@ -17,6 +17,8 @@
*/
package org.apache.drill.exec.planner.sql.parser;
+import org.apache.calcite.sql.SqlSelect;
+import org.apache.calcite.sql.fun.SqlCountAggFunction;
import org.apache.drill.exec.ExecConstants;
import org.apache.drill.exec.exception.UnsupportedOperatorCollector;
import org.apache.drill.exec.ops.QueryContext;
@@ -135,6 +137,68 @@ public class UnsupportedOperatorsVisitor extends SqlShuttle {
}
}
+ // Disable complex functions being present in any place other than Select-Clause
+ if(sqlCall instanceof SqlSelect) {
+ SqlSelect sqlSelect = (SqlSelect) sqlCall;
+ if(sqlSelect.hasOrderBy()) {
+ for (SqlNode sqlNode : sqlSelect.getOrderList()) {
+ if(containsFlatten(sqlNode)) {
+ unsupportedOperatorCollector.setException(SqlUnsupportedException.ExceptionType.FUNCTION,
+ "Flatten function is not supported in Order By\n" +
+ "See Apache Drill JIRA: DRILL-2181");
+ throw new UnsupportedOperationException();
+ }
+ }
+ }
+
+ if(sqlSelect.getGroup() != null) {
+ for(SqlNode sqlNode : sqlSelect.getGroup()) {
+ if(containsFlatten(sqlNode)) {
+ unsupportedOperatorCollector.setException(SqlUnsupportedException.ExceptionType.FUNCTION,
+ "Flatten function is not supported in Group By\n" +
+ "See Apache Drill JIRA: DRILL-2181");
+ throw new UnsupportedOperationException();
+ }
+ }
+ }
+
+ if(sqlSelect.isDistinct()) {
+ for(SqlNode column : sqlSelect.getSelectList()) {
+ if(column.getKind() == SqlKind.AS) {
+ if(containsFlatten(((SqlCall) column).getOperandList().get(0))) {
+ unsupportedOperatorCollector.setException(SqlUnsupportedException.ExceptionType.FUNCTION,
+ "Flatten function is not supported in Distinct\n" +
+ "See Apache Drill JIRA: DRILL-2181");
+ throw new UnsupportedOperationException();
+ }
+ } else {
+ if(containsFlatten(column)) {
+ unsupportedOperatorCollector.setException(SqlUnsupportedException.ExceptionType.FUNCTION,
+ "Flatten function is not supported in Distinct\n" +
+ "See Apache Drill JIRA: DRILL-2181");
+ throw new UnsupportedOperationException();
+ }
+ }
+ }
+ }
+ }
+
+ if(sqlCall.getOperator() instanceof SqlCountAggFunction) {
+ for(SqlNode sqlNode : sqlCall.getOperandList()) {
+ if(containsFlatten(sqlNode)) {
+ unsupportedOperatorCollector.setException(SqlUnsupportedException.ExceptionType.FUNCTION,
+ "Flatten function in aggregate functions is not supported\n" +
+ "See Apache Drill JIRA: DRILL-2181");
+ throw new UnsupportedOperationException();
+ }
+ }
+ }
+
return sqlCall.getOperator().acceptCall(this, sqlCall);
}
+
+ private boolean containsFlatten(SqlNode sqlNode) throws UnsupportedOperationException {
+ return sqlNode instanceof SqlCall
+ && ((SqlCall) sqlNode).getOperator().getName().toLowerCase().equals("flatten");
+ }
}
\ No newline at end of file
http://git-wip-us.apache.org/repos/asf/drill/blob/e428f0d5/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 d304f26..504524d 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
@@ -17,6 +17,7 @@
*/
package org.apache.drill;
import org.apache.drill.common.exceptions.UserException;
+import org.apache.drill.common.util.FileUtils;
import org.apache.drill.exec.work.foreman.SqlUnsupportedException;
import org.apache.drill.exec.work.foreman.UnsupportedDataTypeException;
import org.apache.drill.exec.work.foreman.UnsupportedFunctionException;
@@ -307,4 +308,62 @@ public class TestDisabledFunctionality extends BaseTestQuery{
throwAsUnsupportedException(ex);
}
}
+
+ @Test(expected = UnsupportedFunctionException.class) // see DRILL-2181
+ public void testFlattenWithinGroupBy() throws Exception {
+ try {
+ String root = FileUtils.getResourceAsFile("/store/text/sample.json").toURI().toString();
+ String query = String.format("select flatten(j.topping) tt " +
+ "from dfs_test.`%s` j " +
+ "group by flatten(j.topping)", root);
+
+ test(query);
+ } catch(UserException ex) {
+ throwAsUnsupportedException(ex);
+ throw ex;
+ }
+ }
+
+ @Test(expected = UnsupportedFunctionException.class) // see DRILL-2181
+ public void testFlattenWithinOrderBy() throws Exception {
+ try {
+ String root = FileUtils.getResourceAsFile("/store/text/sample.json").toURI().toString();
+ String query = String.format("select flatten(j.topping) tt " +
+ "from dfs_test.`%s` j " +
+ "order by flatten(j.topping)", root);
+
+ test(query);
+ } catch(UserException ex) {
+ throwAsUnsupportedException(ex);
+ throw ex;
+ }
+ }
+
+ @Test(expected = UnsupportedFunctionException.class) // see DRILL-2181
+ public void testFlattenWithinAggFunction() throws Exception {
+ try {
+ String root = FileUtils.getResourceAsFile("/store/text/sample.json").toURI().toString();
+ String query = String.format("select count(flatten(j.topping)) tt " +
+ "from dfs_test.`%s` j", root);
+
+ test(query);
+ } catch(UserException ex) {
+ throwAsUnsupportedException(ex);
+ throw ex;
+ }
+ }
+
+ @Test(expected = UnsupportedFunctionException.class) // see DRILL-2181
+ public void testFlattenWithinDistinct() throws Exception {
+ try {
+ String root = FileUtils.getResourceAsFile("/store/text/sample.json").toURI().toString();
+ String query = String.format("select Distinct (flatten(j.topping)) tt " +
+ "from dfs_test.`%s` j", root);
+
+ test(query);
+ } catch(UserException ex) {
+ throwAsUnsupportedException(ex);
+ throw ex;
+ }
+ }
}
\ No newline at end of file