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/09/11 20:48:43 UTC

svn commit: r1624360 - in /hive/branches/cbo/ql/src/java/org/apache/hadoop/hive/ql/optimizer/optiq/translator: RexNodeConverter.java TypeConverter.java

Author: hashutosh
Date: Thu Sep 11 18:48:42 2014
New Revision: 1624360

URL: http://svn.apache.org/r1624360
Log:
HIVE-8048 : [CBO] Handle union type (Ashutosh Chauhan via John Pullokkaran)

Modified:
    hive/branches/cbo/ql/src/java/org/apache/hadoop/hive/ql/optimizer/optiq/translator/RexNodeConverter.java
    hive/branches/cbo/ql/src/java/org/apache/hadoop/hive/ql/optimizer/optiq/translator/TypeConverter.java

Modified: hive/branches/cbo/ql/src/java/org/apache/hadoop/hive/ql/optimizer/optiq/translator/RexNodeConverter.java
URL: http://svn.apache.org/viewvc/hive/branches/cbo/ql/src/java/org/apache/hadoop/hive/ql/optimizer/optiq/translator/RexNodeConverter.java?rev=1624360&r1=1624359&r2=1624360&view=diff
==============================================================================
--- hive/branches/cbo/ql/src/java/org/apache/hadoop/hive/ql/optimizer/optiq/translator/RexNodeConverter.java (original)
+++ hive/branches/cbo/ql/src/java/org/apache/hadoop/hive/ql/optimizer/optiq/translator/RexNodeConverter.java Thu Sep 11 18:48:42 2014
@@ -34,6 +34,7 @@ import org.apache.hadoop.hive.common.typ
 import org.apache.hadoop.hive.common.type.HiveDecimal;
 import org.apache.hadoop.hive.common.type.HiveVarchar;
 import org.apache.hadoop.hive.ql.exec.FunctionRegistry;
+import org.apache.hadoop.hive.ql.optimizer.optiq.OptiqSemanticException;
 import org.apache.hadoop.hive.ql.parse.ParseUtils;
 import org.apache.hadoop.hive.ql.parse.RowResolver;
 import org.apache.hadoop.hive.ql.parse.SemanticException;
@@ -211,7 +212,8 @@ public class RexNodeConverter {
     return castExpr;
   }
 
-  private RexNode handleExplicitCast(ExprNodeGenericFuncDesc func, List<RexNode> childRexNodeLst) {
+  private RexNode handleExplicitCast(ExprNodeGenericFuncDesc func,
+    List<RexNode> childRexNodeLst) throws OptiqSemanticException {
     RexNode castExpr = null;
 
     if (childRexNodeLst != null && childRexNodeLst.size() == 1) {

Modified: hive/branches/cbo/ql/src/java/org/apache/hadoop/hive/ql/optimizer/optiq/translator/TypeConverter.java
URL: http://svn.apache.org/viewvc/hive/branches/cbo/ql/src/java/org/apache/hadoop/hive/ql/optimizer/optiq/translator/TypeConverter.java?rev=1624360&r1=1624359&r2=1624360&view=diff
==============================================================================
--- hive/branches/cbo/ql/src/java/org/apache/hadoop/hive/ql/optimizer/optiq/translator/TypeConverter.java (original)
+++ hive/branches/cbo/ql/src/java/org/apache/hadoop/hive/ql/optimizer/optiq/translator/TypeConverter.java Thu Sep 11 18:48:42 2014
@@ -17,12 +17,14 @@
  */
 package org.apache.hadoop.hive.ql.optimizer.optiq.translator;
 
+import java.util.ArrayList;
 import java.util.LinkedList;
 import java.util.List;
 import java.util.Map;
 
 import org.apache.hadoop.hive.ql.exec.ColumnInfo;
 import org.apache.hadoop.hive.ql.exec.RowSchema;
+import org.apache.hadoop.hive.ql.optimizer.optiq.OptiqSemanticException;
 import org.apache.hadoop.hive.ql.optimizer.optiq.translator.SqlFunctionConverter.HiveToken;
 import org.apache.hadoop.hive.ql.parse.HiveParser;
 import org.apache.hadoop.hive.ql.parse.RowResolver;
@@ -68,7 +70,8 @@ public class TypeConverter {
   };
 
   /*********************** Convert Hive Types To Optiq Types ***********************/
-  public static RelDataType getType(RelOptCluster cluster, List<ColumnInfo> cInfoLst) {
+  public static RelDataType getType(RelOptCluster cluster,
+    List<ColumnInfo> cInfoLst) throws OptiqSemanticException {
     RexBuilder rexBuilder = cluster.getRexBuilder();
     RelDataTypeFactory dtFactory = rexBuilder.getTypeFactory();
     List<RelDataType> fieldTypes = new LinkedList<RelDataType>();
@@ -81,7 +84,8 @@ public class TypeConverter {
     return dtFactory.createStructType(fieldTypes, fieldNames);
   }
 
-  public static RelDataType getType(RelOptCluster cluster, RowResolver rr, List<String> neededCols) {
+  public static RelDataType getType(RelOptCluster cluster, RowResolver rr,
+    List<String> neededCols) throws OptiqSemanticException {
     RexBuilder rexBuilder = cluster.getRexBuilder();
     RelDataTypeFactory dtFactory = rexBuilder.getTypeFactory();
     RowSchema rs = rr.getRowSchema();
@@ -97,7 +101,8 @@ public class TypeConverter {
     return dtFactory.createStructType(fieldTypes, fieldNames);
   }
 
-  public static RelDataType convert(TypeInfo type, RelDataTypeFactory dtFactory) {
+  public static RelDataType convert(TypeInfo type, RelDataTypeFactory dtFactory)
+    throws OptiqSemanticException{
     RelDataType convertedType = null;
 
     switch (type.getCategory()) {
@@ -185,31 +190,32 @@ public class TypeConverter {
     return convertedType;
   }
 
-  public static RelDataType convert(ListTypeInfo lstType, RelDataTypeFactory dtFactory) {
+  public static RelDataType convert(ListTypeInfo lstType,
+    RelDataTypeFactory dtFactory) throws OptiqSemanticException {
     RelDataType elemType = convert(lstType.getListElementTypeInfo(), dtFactory);
     return dtFactory.createArrayType(elemType, -1);
   }
 
-  public static RelDataType convert(MapTypeInfo mapType, RelDataTypeFactory dtFactory) {
+  public static RelDataType convert(MapTypeInfo mapType, RelDataTypeFactory dtFactory)
+    throws OptiqSemanticException {
     RelDataType keyType = convert(mapType.getMapKeyTypeInfo(), dtFactory);
     RelDataType valueType = convert(mapType.getMapValueTypeInfo(), dtFactory);
     return dtFactory.createMapType(keyType, valueType);
   }
 
-  public static RelDataType convert(StructTypeInfo structType, final RelDataTypeFactory dtFactory) {
-    List<RelDataType> fTypes = Lists.transform(structType.getAllStructFieldTypeInfos(),
-        new Function<TypeInfo, RelDataType>() {
-          @Override
-          public RelDataType apply(TypeInfo tI) {
-            return convert(tI, dtFactory);
-          }
-        });
+  public static RelDataType convert(StructTypeInfo structType,
+    final RelDataTypeFactory dtFactory) throws OptiqSemanticException {
+    List<RelDataType> fTypes = new ArrayList<RelDataType>(structType.getAllStructFieldTypeInfos().size());
+    for (TypeInfo ti : structType.getAllStructFieldTypeInfos()) {
+      fTypes.add(convert(ti,dtFactory));
+    }
     return dtFactory.createStructType(fTypes, structType.getAllStructFieldNames());
   }
 
-  public static RelDataType convert(UnionTypeInfo unionType, RelDataTypeFactory dtFactory) {
-    // @todo what do we about unions?
-    throw new UnsupportedOperationException();
+  public static RelDataType convert(UnionTypeInfo unionType, RelDataTypeFactory dtFactory)
+    throws OptiqSemanticException{
+    // Union type is not supported in Optiq.
+    throw new OptiqSemanticException("Union type is not supported");
   }
 
   public static TypeInfo convert(RelDataType rType) {