aboutsummaryrefslogtreecommitdiff
path: root/common
diff options
context:
space:
mode:
authorAditya Kishore <aditya@maprtech.com>2014-04-01 02:57:23 -0700
committerJacques Nadeau <jacques@apache.org>2014-04-24 00:07:25 -0700
commit166079b2248f6e62d6cf105599e2e341f1f9868a (patch)
tree8465e1fdbef03a8f497136ee71dc7d00dda8d9ef /common
parent164819513a5915a43103017fe699cc073b53284a (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.g6
-rw-r--r--common/src/main/java/org/apache/drill/common/expression/ValueExpressions.java11
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));
}