diff --git a/ql/src/java/org/apache/hadoop/hive/ql/optimizer/optiq/translator/RexNodeConverter.java b/ql/src/java/org/apache/hadoop/hive/ql/optimizer/optiq/translator/RexNodeConverter.java index 7a1e259..dca585b 100644 --- a/ql/src/java/org/apache/hadoop/hive/ql/optimizer/optiq/translator/RexNodeConverter.java +++ b/ql/src/java/org/apache/hadoop/hive/ql/optimizer/optiq/translator/RexNodeConverter.java @@ -34,6 +34,7 @@ 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 @@ private boolean castExprUsingUDFBridge(GenericUDF gUDF) { return castExpr; } - private RexNode handleExplicitCast(ExprNodeGenericFuncDesc func, List childRexNodeLst) { + private RexNode handleExplicitCast(ExprNodeGenericFuncDesc func, + List childRexNodeLst) throws OptiqSemanticException { RexNode castExpr = null; if (childRexNodeLst != null && childRexNodeLst.size() == 1) { diff --git a/ql/src/java/org/apache/hadoop/hive/ql/optimizer/optiq/translator/TypeConverter.java b/ql/src/java/org/apache/hadoop/hive/ql/optimizer/optiq/translator/TypeConverter.java index 3a25186..2c30e9d 100644 --- a/ql/src/java/org/apache/hadoop/hive/ql/optimizer/optiq/translator/TypeConverter.java +++ b/ql/src/java/org/apache/hadoop/hive/ql/optimizer/optiq/translator/TypeConverter.java @@ -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 @@ }; /*********************** Convert Hive Types To Optiq Types ***********************/ - public static RelDataType getType(RelOptCluster cluster, List cInfoLst) { + public static RelDataType getType(RelOptCluster cluster, + List cInfoLst) throws OptiqSemanticException { RexBuilder rexBuilder = cluster.getRexBuilder(); RelDataTypeFactory dtFactory = rexBuilder.getTypeFactory(); List fieldTypes = new LinkedList(); @@ -81,7 +84,8 @@ public static RelDataType getType(RelOptCluster cluster, List cInfoL return dtFactory.createStructType(fieldTypes, fieldNames); } - public static RelDataType getType(RelOptCluster cluster, RowResolver rr, List neededCols) { + public static RelDataType getType(RelOptCluster cluster, RowResolver rr, + List neededCols) throws OptiqSemanticException { RexBuilder rexBuilder = cluster.getRexBuilder(); RelDataTypeFactory dtFactory = rexBuilder.getTypeFactory(); RowSchema rs = rr.getRowSchema(); @@ -97,7 +101,8 @@ public static RelDataType getType(RelOptCluster cluster, RowResolver rr, List fTypes = Lists.transform(structType.getAllStructFieldTypeInfos(), - new Function() { - @Override - public RelDataType apply(TypeInfo tI) { - return convert(tI, dtFactory); - } - }); + public static RelDataType convert(StructTypeInfo structType, + final RelDataTypeFactory dtFactory) throws OptiqSemanticException { + List fTypes = new ArrayList(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) {