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) {