You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@hive.apache.org by ha...@apache.org on 2014/08/22 22:40:27 UTC

svn commit: r1619926 - in /hive/branches/cbo/ql/src: java/org/apache/hadoop/hive/ql/optimizer/optiq/translator/SqlFunctionConverter.java test/queries/clientpositive/cbo_correctness.q test/results/clientpositive/cbo_correctness.q.out

Author: hashutosh
Date: Fri Aug 22 20:40:27 2014
New Revision: 1619926

URL: http://svn.apache.org/r1619926
Log:
HIVE-7852 : [CBO] Handle unary operators (Ashutosh Chauhan via John Pullokkaran)

Modified:
    hive/branches/cbo/ql/src/java/org/apache/hadoop/hive/ql/optimizer/optiq/translator/SqlFunctionConverter.java
    hive/branches/cbo/ql/src/test/queries/clientpositive/cbo_correctness.q
    hive/branches/cbo/ql/src/test/results/clientpositive/cbo_correctness.q.out

Modified: hive/branches/cbo/ql/src/java/org/apache/hadoop/hive/ql/optimizer/optiq/translator/SqlFunctionConverter.java
URL: http://svn.apache.org/viewvc/hive/branches/cbo/ql/src/java/org/apache/hadoop/hive/ql/optimizer/optiq/translator/SqlFunctionConverter.java?rev=1619926&r1=1619925&r2=1619926&view=diff
==============================================================================
--- hive/branches/cbo/ql/src/java/org/apache/hadoop/hive/ql/optimizer/optiq/translator/SqlFunctionConverter.java (original)
+++ hive/branches/cbo/ql/src/java/org/apache/hadoop/hive/ql/optimizer/optiq/translator/SqlFunctionConverter.java Fri Aug 22 20:40:27 2014
@@ -12,6 +12,8 @@ import org.apache.hadoop.hive.ql.parse.H
 import org.apache.hadoop.hive.ql.parse.ParseDriver;
 import org.apache.hadoop.hive.ql.udf.generic.GenericUDF;
 import org.apache.hadoop.hive.ql.udf.generic.GenericUDFBridge;
+import org.apache.hadoop.hive.ql.udf.generic.GenericUDFOPNegative;
+import org.apache.hadoop.hive.ql.udf.generic.GenericUDFOPPositive;
 import org.apache.hadoop.hive.serde2.typeinfo.TypeInfo;
 import org.apache.hadoop.hive.serde2.typeinfo.TypeInfoFactory;
 import org.eigenbase.reltype.RelDataType;
@@ -49,6 +51,12 @@ public class SqlFunctionConverter {
 
   public static SqlOperator getOptiqOperator(GenericUDF hiveUDF,
       ImmutableList<RelDataType> optiqArgTypes, RelDataType retType) {
+    // handle overloaded methods first
+    if (hiveUDF instanceof GenericUDFOPNegative) {
+      return SqlStdOperatorTable.UNARY_MINUS;
+    } else if (hiveUDF instanceof GenericUDFOPPositive) {
+      return SqlStdOperatorTable.UNARY_PLUS;
+    } // do genric lookup
     return getOptiqFn(getName(hiveUDF), optiqArgTypes, retType);
   }
 
@@ -111,8 +119,15 @@ public class SqlFunctionConverter {
       node = (ASTNode) ParseDriver.adaptor.create(hToken.type, hToken.text);
     } else {
       node = (ASTNode) ParseDriver.adaptor.create(HiveParser.TOK_FUNCTION, "TOK_FUNCTION");
-      if (op.kind != SqlKind.CAST)
-        node.addChild((ASTNode) ParseDriver.adaptor.create(HiveParser.Identifier, op.getName()));
+      if (op.kind != SqlKind.CAST) {
+        if (op.kind == SqlKind.MINUS_PREFIX) {
+          node = (ASTNode) ParseDriver.adaptor.create(HiveParser.MINUS, "MINUS");
+        } else if (op.kind == SqlKind.PLUS_PREFIX) {
+          node = (ASTNode) ParseDriver.adaptor.create(HiveParser.PLUS, "PLUS");
+        } else {
+          node.addChild((ASTNode) ParseDriver.adaptor.create(HiveParser.Identifier, op.getName()));
+        }
+      }
     }
 
     for (ASTNode c : children) {
@@ -144,7 +159,7 @@ public class SqlFunctionConverter {
     if (hiveUDF instanceof GenericUDFBridge) {
       udfName = ((GenericUDFBridge) hiveUDF).getUdfName();
     } else {
-      Class udfClass = hiveUDF.getClass();
+      Class<? extends GenericUDF> udfClass = hiveUDF.getClass();
       Annotation udfAnnotation = udfClass.getAnnotation(Description.class);
 
       if (udfAnnotation != null && udfAnnotation instanceof Description) {

Modified: hive/branches/cbo/ql/src/test/queries/clientpositive/cbo_correctness.q
URL: http://svn.apache.org/viewvc/hive/branches/cbo/ql/src/test/queries/clientpositive/cbo_correctness.q?rev=1619926&r1=1619925&r2=1619926&view=diff
==============================================================================
--- hive/branches/cbo/ql/src/test/queries/clientpositive/cbo_correctness.q (original)
+++ hive/branches/cbo/ql/src/test/queries/clientpositive/cbo_correctness.q Fri Aug 22 20:40:27 2014
@@ -217,3 +217,6 @@ select * from (select key as a, c_int+1 
 
 -- 13. null expr in select list
 select null from t3;
+
+-- 14. unary operator
+select key from t1 where c_int = -6  or c_int = +6;

Modified: hive/branches/cbo/ql/src/test/results/clientpositive/cbo_correctness.q.out
URL: http://svn.apache.org/viewvc/hive/branches/cbo/ql/src/test/results/clientpositive/cbo_correctness.q.out?rev=1619926&r1=1619925&r2=1619926&view=diff
==============================================================================
--- hive/branches/cbo/ql/src/test/results/clientpositive/cbo_correctness.q.out (original)
+++ hive/branches/cbo/ql/src/test/results/clientpositive/cbo_correctness.q.out Fri Aug 22 20:40:27 2014
@@ -17879,3 +17879,15 @@ NULL
 NULL
 NULL
 NULL
+PREHOOK: query: -- 14. unary operator
+select key from t1 where c_int = -6  or c_int = +6
+PREHOOK: type: QUERY
+PREHOOK: Input: default@t1
+PREHOOK: Input: default@t1@dt=2014
+#### A masked pattern was here ####
+POSTHOOK: query: -- 14. unary operator
+select key from t1 where c_int = -6  or c_int = +6
+POSTHOOK: type: QUERY
+POSTHOOK: Input: default@t1
+POSTHOOK: Input: default@t1@dt=2014
+#### A masked pattern was here ####