diff options
author | Aditya Kishore <aditya@maprtech.com> | 2014-04-01 02:57:23 -0700 |
---|---|---|
committer | Jacques Nadeau <jacques@apache.org> | 2014-04-24 00:07:25 -0700 |
commit | 166079b2248f6e62d6cf105599e2e341f1f9868a (patch) | |
tree | 8465e1fdbef03a8f497136ee71dc7d00dda8d9ef /common | |
parent | 164819513a5915a43103017fe699cc073b53284a (diff) |
DRILL-474: Long.MIN_VALUE is not parsed as BIGINT but as a Double
Diffstat (limited to 'common')
-rw-r--r-- | common/src/main/antlr3/org/apache/drill/common/expression/parser/ExprParser.g | 6 | ||||
-rw-r--r-- | common/src/main/java/org/apache/drill/common/expression/ValueExpressions.java | 11 |
2 files changed, 9 insertions, 8 deletions
diff --git a/common/src/main/antlr3/org/apache/drill/common/expression/parser/ExprParser.g b/common/src/main/antlr3/org/apache/drill/common/expression/parser/ExprParser.g index 6788e56c0..ca37e4c35 100644 --- a/common/src/main/antlr3/org/apache/drill/common/expression/parser/ExprParser.g +++ b/common/src/main/antlr3/org/apache/drill/common/expression/parser/ExprParser.g @@ -272,14 +272,14 @@ xorExpr returns [LogicalExpression e] ; unaryExpr returns [LogicalExpression e] - : Minus atom {$e = FunctionCallFactory.createExpression("u-", pos($atom.start), $atom.e); } + : sign=(Plus|Minus)? Number {$e = ValueExpressions.getNumericExpression($sign.text, $Number.text, pos(($sign != null) ? $sign : $Number)); } + | Minus atom {$e = FunctionCallFactory.createExpression("u-", pos($atom.start), $atom.e); } | Excl atom {$e= FunctionCallFactory.createExpression("!", pos($atom.start), $atom.e); } | atom {$e = $atom.e; } ; atom returns [LogicalExpression e] - : Number {$e = ValueExpressions.getNumericExpression($Number.text, pos($atom.start)); } - | Bool {$e = new ValueExpressions.BooleanExpression( $Bool.text, pos($atom.start)); } + : Bool {$e = new ValueExpressions.BooleanExpression($Bool.text, pos($atom.start)); } | lookup {$e = $lookup.e; } ; diff --git a/common/src/main/java/org/apache/drill/common/expression/ValueExpressions.java b/common/src/main/java/org/apache/drill/common/expression/ValueExpressions.java index 78f698cd0..0948c5733 100644 --- a/common/src/main/java/org/apache/drill/common/expression/ValueExpressions.java +++ b/common/src/main/java/org/apache/drill/common/expression/ValueExpressions.java @@ -90,29 +90,30 @@ public class ValueExpressions { return new Decimal38Expression(i, ExpressionPosition.UNKNOWN); } - public static LogicalExpression getNumericExpression(String s, ExpressionPosition ep) { + public static LogicalExpression getNumericExpression(String sign, String s, ExpressionPosition ep) { + String numStr = (sign == null) ? s : sign+s; try { - int a = Integer.parseInt(s); + int a = Integer.parseInt(numStr); return new IntExpression(a, ep); } catch (Exception e) { } try { - long l = Long.parseLong(s); + long l = Long.parseLong(numStr); return new LongExpression(l, ep); } catch (Exception e) { } try { - double d = Double.parseDouble(s); + double d = Double.parseDouble(numStr); return new DoubleExpression(d, ep); } catch (Exception e) { } throw new IllegalArgumentException(String.format("Unable to parse string %s as integer or floating point number.", - s)); + numStr)); } |