From 992779f007700bbf17bf941344e887f2c26f6958 Mon Sep 17 00:00:00 2001 From: Syed Albiz Date: Mon, 13 Jun 2011 13:03:34 -0700 Subject: [PATCH 1/1] Add BigInt constant tokenization diff --git ql/src/java/org/apache/hadoop/hive/ql/parse/Hive.g ql/src/java/org/apache/hadoop/hive/ql/parse/Hive.g index 9161319..16b29af 100644 --- ql/src/java/org/apache/hadoop/hive/ql/parse/Hive.g +++ ql/src/java/org/apache/hadoop/hive/ql/parse/Hive.g @@ -1818,6 +1818,7 @@ constant @after { msgs.pop(); } : Number + | BigNumber | StringLiteral | charSetStringLiteral | booleanValue @@ -2360,7 +2361,12 @@ CharSetLiteral Number : - (Digit)+ ( DOT (Digit)* (Exponent)? | Exponent)? + (Digit)+ ( DOT (Digit)* (Exponent)? | Exponent )? + ; + +BigNumber + : + (Digit)+ 'L' ; Identifier diff --git ql/src/java/org/apache/hadoop/hive/ql/parse/TypeCheckProcFactory.java ql/src/java/org/apache/hadoop/hive/ql/parse/TypeCheckProcFactory.java index dfadb9f..5ff1a46 100644 --- ql/src/java/org/apache/hadoop/hive/ql/parse/TypeCheckProcFactory.java +++ ql/src/java/org/apache/hadoop/hive/ql/parse/TypeCheckProcFactory.java @@ -130,6 +130,8 @@ public final class TypeCheckProcFactory { getNullExprProcessor()); opRules.put(new RuleRegExp("R2", HiveParser.Number + "%"), getNumExprProcessor()); + opRules.put(new RuleRegExp("R2", HiveParser.BigNumber + "%"), + getNumExprProcessor()); opRules .put(new RuleRegExp("R3", HiveParser.Identifier + "%|" + HiveParser.StringLiteral + "%|" + HiveParser.TOK_CHARSETLITERAL @@ -212,13 +214,19 @@ public final class TypeCheckProcFactory { Number v = null; ASTNode expr = (ASTNode) nd; + String str = expr.getText(); + if (expr.getToken().getType() == HiveParser.BigNumber) { + //parse big number constants (0L) + str = str.substring(0, str.length()-1); + } + // The expression can be any one of Double, Long and Integer. We // try to parse the expression in that order to ensure that the // most specific type is used for conversion. try { - v = Double.valueOf(expr.getText()); - v = Long.valueOf(expr.getText()); - v = Integer.valueOf(expr.getText()); + v = Double.valueOf(str); + v = Long.valueOf(str); + v = Integer.valueOf(str); } catch (NumberFormatException e) { // do nothing here, we will throw an exception in the following block } -- 1.7.4.4