You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@hive.apache.org by jc...@apache.org on 2015/07/17 21:08:53 UTC

hive git commit: HIVE-11282: CBO (Calcite Return Path): Inferring Hive type char/varchar of length zero which is not allowed (Jesus Camacho Rodriguez, reviewed by Ashutosh Chauhan)

Repository: hive
Updated Branches:
  refs/heads/master 2b1f03e33 -> 7fe23aa1c


HIVE-11282: CBO (Calcite Return Path): Inferring Hive type char/varchar of length zero which is not allowed (Jesus Camacho Rodriguez, reviewed by Ashutosh Chauhan)


Project: http://git-wip-us.apache.org/repos/asf/hive/repo
Commit: http://git-wip-us.apache.org/repos/asf/hive/commit/7fe23aa1
Tree: http://git-wip-us.apache.org/repos/asf/hive/tree/7fe23aa1
Diff: http://git-wip-us.apache.org/repos/asf/hive/diff/7fe23aa1

Branch: refs/heads/master
Commit: 7fe23aa1c6a6abd96717b44790033b49f13e550f
Parents: 2b1f03e
Author: Jesus Camacho Rodriguez <jc...@apache.org>
Authored: Fri Jul 17 20:08:14 2015 +0100
Committer: Jesus Camacho Rodriguez <jc...@apache.org>
Committed: Fri Jul 17 20:08:14 2015 +0100

----------------------------------------------------------------------
 .../calcite/translator/ExprNodeConverter.java   | 24 +++++++++++++++-----
 1 file changed, 18 insertions(+), 6 deletions(-)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/hive/blob/7fe23aa1/ql/src/java/org/apache/hadoop/hive/ql/optimizer/calcite/translator/ExprNodeConverter.java
----------------------------------------------------------------------
diff --git a/ql/src/java/org/apache/hadoop/hive/ql/optimizer/calcite/translator/ExprNodeConverter.java b/ql/src/java/org/apache/hadoop/hive/ql/optimizer/calcite/translator/ExprNodeConverter.java
index 4f0db03..955aa91 100644
--- a/ql/src/java/org/apache/hadoop/hive/ql/optimizer/calcite/translator/ExprNodeConverter.java
+++ b/ql/src/java/org/apache/hadoop/hive/ql/optimizer/calcite/translator/ExprNodeConverter.java
@@ -224,12 +224,24 @@ public class ExprNodeConverter extends RexVisitorImpl<ExprNodeDesc> {
     case DECIMAL:
       return new ExprNodeConstantDesc(TypeInfoFactory.getDecimalTypeInfo(lType.getPrecision(),
           lType.getScale()), literal.getValue3());
-    case VARCHAR:
-      return new ExprNodeConstantDesc(TypeInfoFactory.getVarcharTypeInfo(lType.getPrecision()),
-          new HiveVarchar((String) literal.getValue3(), lType.getPrecision()));
-    case CHAR:
-      return new ExprNodeConstantDesc(TypeInfoFactory.getCharTypeInfo(lType.getPrecision()),
-          new HiveChar((String) literal.getValue3(), lType.getPrecision()));
+    case VARCHAR: {
+      int varcharLength = lType.getPrecision();
+      // If we cannot use Varchar due to type length restrictions, we use String
+      if (varcharLength < 1 || varcharLength > HiveVarchar.MAX_VARCHAR_LENGTH) {
+        return new ExprNodeConstantDesc(TypeInfoFactory.stringTypeInfo, literal.getValue3());
+      }
+      return new ExprNodeConstantDesc(TypeInfoFactory.getVarcharTypeInfo(varcharLength),
+          new HiveVarchar((String) literal.getValue3(), varcharLength));
+    }
+    case CHAR: {
+      int charLength = lType.getPrecision();
+      // If we cannot use Char due to type length restrictions, we use String
+      if (charLength < 1 || charLength > HiveChar.MAX_CHAR_LENGTH) {
+        return new ExprNodeConstantDesc(TypeInfoFactory.stringTypeInfo, literal.getValue3());
+      }
+      return new ExprNodeConstantDesc(TypeInfoFactory.getCharTypeInfo(charLength),
+          new HiveChar((String) literal.getValue3(), charLength));
+    }
     case INTERVAL_YEAR_MONTH: {
       BigDecimal monthsBd = (BigDecimal) literal.getValue();
       return new ExprNodeConstantDesc(TypeInfoFactory.intervalYearMonthTypeInfo,