You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@nifi.apache.org by ma...@apache.org on 2016/10/24 14:34:09 UTC
[3/4] nifi git commit: NIFI-1662 adding Expression Language decimal
support
NIFI-1662 adding Expression Language decimal support
Project: http://git-wip-us.apache.org/repos/asf/nifi/repo
Commit: http://git-wip-us.apache.org/repos/asf/nifi/commit/94ab9990
Tree: http://git-wip-us.apache.org/repos/asf/nifi/tree/94ab9990
Diff: http://git-wip-us.apache.org/repos/asf/nifi/diff/94ab9990
Branch: refs/heads/master
Commit: 94ab99902602d20d53a63ac86bed7c99cf06c9c9
Parents: 9b08f23
Author: jpercivall <jo...@yahoo.com>
Authored: Tue Sep 13 17:40:58 2016 -0400
Committer: Matt Burgess <ma...@apache.org>
Committed: Mon Oct 24 10:20:21 2016 -0400
----------------------------------------------------------------------
.../nifi/expression/AttributeExpression.java | 2 +-
.../language/antlr/AttributeExpressionLexer.g | 3 +-
.../language/antlr/AttributeExpressionParser.g | 6 +-
.../output/AttributeExpressionLexer.tokens | 90 -------------
.../attribute/expression/language/Query.java | 118 ++++++++++++-----
.../language/evaluation/DecimalEvaluator.java | 43 +++++++
.../language/evaluation/DecimalQueryResult.java | 43 +++++++
.../language/evaluation/NumberEvaluator.java | 2 +-
.../language/evaluation/NumberQueryResult.java | 8 +-
.../evaluation/WholeNumberEvaluator.java | 43 +++++++
.../evaluation/WholeNumberQueryResult.java | 43 +++++++
.../evaluation/cast/DateCastEvaluator.java | 9 +-
.../evaluation/cast/DecimalCastEvaluator.java | 86 +++++++++++++
.../evaluation/cast/NumberCastEvaluator.java | 33 +++--
.../cast/WholeNumberCastEvaluator.java | 85 +++++++++++++
.../functions/DateToNumberEvaluator.java | 50 --------
.../evaluation/functions/DivideEvaluator.java | 19 +--
.../functions/GreaterThanEvaluator.java | 16 ++-
.../functions/GreaterThanOrEqualEvaluator.java | 16 ++-
.../evaluation/functions/IndexOfEvaluator.java | 10 +-
.../functions/LastIndexOfEvaluator.java | 10 +-
.../evaluation/functions/LengthEvaluator.java | 8 +-
.../evaluation/functions/LessThanEvaluator.java | 16 ++-
.../functions/LessThanOrEqualEvaluator.java | 16 ++-
.../evaluation/functions/MinusEvaluator.java | 19 +--
.../evaluation/functions/ModEvaluator.java | 19 +--
.../evaluation/functions/MultiplyEvaluator.java | 19 +--
.../functions/OneUpSequenceEvaluator.java | 8 +-
.../evaluation/functions/PlusEvaluator.java | 19 +--
.../RandomNumberGeneratorEvaluator.java | 8 +-
.../evaluation/functions/ToNumberEvaluator.java | 45 -------
.../literals/NumberLiteralEvaluator.java | 44 -------
.../literals/WholeNumberLiteralEvaluator.java | 44 +++++++
.../evaluation/reduce/CountEvaluator.java | 12 +-
.../language/evaluation/util/NumberParsing.java | 84 +++++++++++++
.../expression/language/TestQuery.java | 126 +++++++++++++++++--
.../asciidoc/expression-language-guide.adoc | 62 +++++----
37 files changed, 888 insertions(+), 396 deletions(-)
----------------------------------------------------------------------
http://git-wip-us.apache.org/repos/asf/nifi/blob/94ab9990/nifi-api/src/main/java/org/apache/nifi/expression/AttributeExpression.java
----------------------------------------------------------------------
diff --git a/nifi-api/src/main/java/org/apache/nifi/expression/AttributeExpression.java b/nifi-api/src/main/java/org/apache/nifi/expression/AttributeExpression.java
index 2c77aaa..d0568ff 100644
--- a/nifi-api/src/main/java/org/apache/nifi/expression/AttributeExpression.java
+++ b/nifi-api/src/main/java/org/apache/nifi/expression/AttributeExpression.java
@@ -77,6 +77,6 @@ public interface AttributeExpression {
public static enum ResultType {
- STRING, BOOLEAN, NUMBER, DATE;
+ STRING, BOOLEAN, WHOLE_NUMBER, DATE, DECIMAL, NUMBER;
}
}
http://git-wip-us.apache.org/repos/asf/nifi/blob/94ab9990/nifi-commons/nifi-expression-language/src/main/antlr3/org/apache/nifi/attribute/expression/language/antlr/AttributeExpressionLexer.g
----------------------------------------------------------------------
diff --git a/nifi-commons/nifi-expression-language/src/main/antlr3/org/apache/nifi/attribute/expression/language/antlr/AttributeExpressionLexer.g b/nifi-commons/nifi-expression-language/src/main/antlr3/org/apache/nifi/attribute/expression/language/antlr/AttributeExpressionLexer.g
index 8841375..31dfe90 100644
--- a/nifi-commons/nifi-expression-language/src/main/antlr3/org/apache/nifi/attribute/expression/language/antlr/AttributeExpressionLexer.g
+++ b/nifi-commons/nifi-expression-language/src/main/antlr3/org/apache/nifi/attribute/expression/language/antlr/AttributeExpressionLexer.g
@@ -77,7 +77,7 @@ COLON : ':';
COMMA : ',';
DOT : '.';
SEMICOLON : ';';
-NUMBER : ('0'..'9')+;
+WHOLE_NUMBER : ('0'..'9')+;
TRUE : 'true';
FALSE : 'false';
@@ -112,6 +112,7 @@ IS_NULL : 'isNull';
IS_EMPTY : 'isEmpty';
NOT_NULL : 'notNull';
TO_NUMBER : 'toNumber';
+TO_DECIMAL : 'toDecimal';
URL_ENCODE : 'urlEncode';
URL_DECODE : 'urlDecode';
NOT : 'not';
http://git-wip-us.apache.org/repos/asf/nifi/blob/94ab9990/nifi-commons/nifi-expression-language/src/main/antlr3/org/apache/nifi/attribute/expression/language/antlr/AttributeExpressionParser.g
----------------------------------------------------------------------
diff --git a/nifi-commons/nifi-expression-language/src/main/antlr3/org/apache/nifi/attribute/expression/language/antlr/AttributeExpressionParser.g b/nifi-commons/nifi-expression-language/src/main/antlr3/org/apache/nifi/attribute/expression/language/antlr/AttributeExpressionParser.g
index 01a0495..2eb8e7b 100644
--- a/nifi-commons/nifi-expression-language/src/main/antlr3/org/apache/nifi/attribute/expression/language/antlr/AttributeExpressionParser.g
+++ b/nifi-commons/nifi-expression-language/src/main/antlr3/org/apache/nifi/attribute/expression/language/antlr/AttributeExpressionParser.g
@@ -90,8 +90,8 @@ oneArgBool : ((FIND | MATCHES | EQUALS_IGNORE_CASE) LPAREN! anyArg RPAREN!) |
multiArgBool : (IN) LPAREN! anyArg (COMMA! anyArg)* RPAREN!;
-// functions that return Numbers
-zeroArgNum : (LENGTH | TO_NUMBER | COUNT) LPAREN! RPAREN!;
+// functions that return Numbers (whole or decimal)
+zeroArgNum : (LENGTH | TO_NUMBER | TO_DECIMAL | COUNT) LPAREN! RPAREN!;
oneArgNum : ((INDEX_OF | LAST_INDEX_OF) LPAREN! anyArg RPAREN!) |
(TO_DATE LPAREN! anyArg? RPAREN!) |
((MOD | PLUS | MINUS | MULTIPLY | DIVIDE) LPAREN! anyArg RPAREN!);
@@ -100,7 +100,7 @@ stringFunctionRef : zeroArgString | oneArgString | twoArgString | fiveArgString;
booleanFunctionRef : zeroArgBool | oneArgBool | multiArgBool;
numberFunctionRef : zeroArgNum | oneArgNum;
-anyArg : NUMBER | numberFunctionRef | STRING_LITERAL | zeroArgString | oneArgString | twoArgString | fiveArgString | booleanLiteral | zeroArgBool | oneArgBool | multiArgBool | expression;
+anyArg : WHOLE_NUMBER | numberFunctionRef | STRING_LITERAL | zeroArgString | oneArgString | twoArgString | fiveArgString | booleanLiteral | zeroArgBool | oneArgBool | multiArgBool | expression;
stringArg : STRING_LITERAL | zeroArgString | oneArgString | twoArgString | expression;
functionRef : stringFunctionRef | booleanFunctionRef | numberFunctionRef;
http://git-wip-us.apache.org/repos/asf/nifi/blob/94ab9990/nifi-commons/nifi-expression-language/src/main/antlr3/org/apache/nifi/attribute/expression/language/antlr/output/AttributeExpressionLexer.tokens
----------------------------------------------------------------------
diff --git a/nifi-commons/nifi-expression-language/src/main/antlr3/org/apache/nifi/attribute/expression/language/antlr/output/AttributeExpressionLexer.tokens b/nifi-commons/nifi-expression-language/src/main/antlr3/org/apache/nifi/attribute/expression/language/antlr/output/AttributeExpressionLexer.tokens
deleted file mode 100755
index e370eb6..0000000
--- a/nifi-commons/nifi-expression-language/src/main/antlr3/org/apache/nifi/attribute/expression/language/antlr/output/AttributeExpressionLexer.tokens
+++ /dev/null
@@ -1,90 +0,0 @@
-/*
- * Licensed to the Apache Software Foundation (ASF) under one or more
- * contributor license agreements. See the NOTICE file distributed with
- * this work for additional information regarding copyright ownership.
- * The ASF licenses this file to You under the Apache License, Version 2.0
- * (the "License"); you may not use this file except in compliance with
- * the License. You may obtain a copy of the License at
- *
- * http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-ALL_ATTRIBUTES=4
-ALL_DELINEATED_VALUES=5
-ALL_MATCHING_ATTRIBUTES=6
-AND=7
-ANY_ATTRIBUTE=8
-ANY_DELINEATED_VALUE=9
-ANY_MATCHING_ATTRIBUTE=10
-APPEND=11
-ATTRIBUTE_NAME=12
-CEIL=13
-COLON=14
-COMMA=15
-CONTAINS=16
-DIVIDE=17
-DOLLAR=18
-DOT=19
-ENDS_WITH=20
-EQUALS=21
-EQUALS_IGNORE_CASE=22
-FALSE=23
-FIND=24
-FLOOR=25
-FORMAT=26
-GREATER_THAN=27
-GREATER_THAN_OR_EQUAL=28
-HOSTNAME=29
-INDEX_OF=30
-IP=31
-IS_NULL=32
-LAST_INDEX_OF=33
-LBRACE=34
-LENGTH=35
-LESS_THAN=36
-LESS_THAN_OR_EQUAL=37
-LPAREN=38
-MATCHES=39
-MINUS=40
-MOD=41
-MULTIPLY=42
-NEXT_INT=43
-NOT=44
-NOT_NULL=45
-NOW=46
-NUMBER=47
-OR=48
-PLUS=49
-PREPEND=50
-RBRACE=51
-REPLACE=52
-REPLACE_ALL=53
-REPLACE_NULL=54
-RPAREN=55
-SEMICOLON=56
-STARTS_WITH=57
-STRING_LITERAL=58
-SUBSTRING=59
-SUBSTRING_AFTER=60
-SUBSTRING_AFTER_LAST=61
-SUBSTRING_BEFORE=62
-SUBSTRING_BEFORE_LAST=63
-TO_DATE=64
-TO_LOWER=65
-TO_NUMBER=66
-TO_RADIX=67
-TO_STRING=68
-TO_UPPER=69
-TRIM=70
-TRUE=71
-URL_DECODE=72
-URL_ENCODE=73
-UUID=74
-WHITESPACE=75
-BASE64_ENCODE=76
-BASE64_DECODE=77
http://git-wip-us.apache.org/repos/asf/nifi/blob/94ab9990/nifi-commons/nifi-expression-language/src/main/java/org/apache/nifi/attribute/expression/language/Query.java
----------------------------------------------------------------------
diff --git a/nifi-commons/nifi-expression-language/src/main/java/org/apache/nifi/attribute/expression/language/Query.java b/nifi-commons/nifi-expression-language/src/main/java/org/apache/nifi/attribute/expression/language/Query.java
index 49c2a05..b0c2ab6 100644
--- a/nifi-commons/nifi-expression-language/src/main/java/org/apache/nifi/attribute/expression/language/Query.java
+++ b/nifi-commons/nifi-expression-language/src/main/java/org/apache/nifi/attribute/expression/language/Query.java
@@ -28,18 +28,18 @@ import org.apache.nifi.attribute.expression.language.antlr.AttributeExpressionPa
import org.apache.nifi.attribute.expression.language.evaluation.BooleanEvaluator;
import org.apache.nifi.attribute.expression.language.evaluation.DateEvaluator;
import org.apache.nifi.attribute.expression.language.evaluation.Evaluator;
-import org.apache.nifi.attribute.expression.language.evaluation.NumberEvaluator;
import org.apache.nifi.attribute.expression.language.evaluation.QueryResult;
import org.apache.nifi.attribute.expression.language.evaluation.StringEvaluator;
import org.apache.nifi.attribute.expression.language.evaluation.cast.BooleanCastEvaluator;
import org.apache.nifi.attribute.expression.language.evaluation.cast.DateCastEvaluator;
+import org.apache.nifi.attribute.expression.language.evaluation.cast.DecimalCastEvaluator;
import org.apache.nifi.attribute.expression.language.evaluation.cast.NumberCastEvaluator;
import org.apache.nifi.attribute.expression.language.evaluation.cast.StringCastEvaluator;
+import org.apache.nifi.attribute.expression.language.evaluation.cast.WholeNumberCastEvaluator;
import org.apache.nifi.attribute.expression.language.evaluation.functions.AndEvaluator;
import org.apache.nifi.attribute.expression.language.evaluation.functions.AppendEvaluator;
import org.apache.nifi.attribute.expression.language.evaluation.functions.AttributeEvaluator;
import org.apache.nifi.attribute.expression.language.evaluation.functions.ContainsEvaluator;
-import org.apache.nifi.attribute.expression.language.evaluation.functions.DateToNumberEvaluator;
import org.apache.nifi.attribute.expression.language.evaluation.functions.DivideEvaluator;
import org.apache.nifi.attribute.expression.language.evaluation.functions.EndsWithEvaluator;
import org.apache.nifi.attribute.expression.language.evaluation.functions.EqualsEvaluator;
@@ -87,7 +87,6 @@ import org.apache.nifi.attribute.expression.language.evaluation.functions.Substr
import org.apache.nifi.attribute.expression.language.evaluation.functions.SubstringBeforeLastEvaluator;
import org.apache.nifi.attribute.expression.language.evaluation.functions.SubstringEvaluator;
import org.apache.nifi.attribute.expression.language.evaluation.functions.ToLowerEvaluator;
-import org.apache.nifi.attribute.expression.language.evaluation.functions.ToNumberEvaluator;
import org.apache.nifi.attribute.expression.language.evaluation.functions.ToRadixEvaluator;
import org.apache.nifi.attribute.expression.language.evaluation.functions.ToStringEvaluator;
import org.apache.nifi.attribute.expression.language.evaluation.functions.ToUpperEvaluator;
@@ -98,9 +97,9 @@ import org.apache.nifi.attribute.expression.language.evaluation.functions.Base64
import org.apache.nifi.attribute.expression.language.evaluation.functions.Base64EncodeEvaluator;
import org.apache.nifi.attribute.expression.language.evaluation.functions.UuidEvaluator;
import org.apache.nifi.attribute.expression.language.evaluation.literals.BooleanLiteralEvaluator;
-import org.apache.nifi.attribute.expression.language.evaluation.literals.NumberLiteralEvaluator;
import org.apache.nifi.attribute.expression.language.evaluation.literals.StringLiteralEvaluator;
import org.apache.nifi.attribute.expression.language.evaluation.literals.ToLiteralEvaluator;
+import org.apache.nifi.attribute.expression.language.evaluation.literals.WholeNumberLiteralEvaluator;
import org.apache.nifi.attribute.expression.language.evaluation.reduce.CountEvaluator;
import org.apache.nifi.attribute.expression.language.evaluation.reduce.JoinEvaluator;
import org.apache.nifi.attribute.expression.language.evaluation.reduce.ReduceEvaluator;
@@ -166,7 +165,8 @@ import static org.apache.nifi.attribute.expression.language.antlr.AttributeExpre
import static org.apache.nifi.attribute.expression.language.antlr.AttributeExpressionParser.NOT;
import static org.apache.nifi.attribute.expression.language.antlr.AttributeExpressionParser.NOT_NULL;
import static org.apache.nifi.attribute.expression.language.antlr.AttributeExpressionParser.NOW;
-import static org.apache.nifi.attribute.expression.language.antlr.AttributeExpressionParser.NUMBER;
+import static org.apache.nifi.attribute.expression.language.antlr.AttributeExpressionParser.TO_DECIMAL;
+import static org.apache.nifi.attribute.expression.language.antlr.AttributeExpressionParser.WHOLE_NUMBER;
import static org.apache.nifi.attribute.expression.language.antlr.AttributeExpressionParser.OR;
import static org.apache.nifi.attribute.expression.language.antlr.AttributeExpressionParser.PLUS;
import static org.apache.nifi.attribute.expression.language.antlr.AttributeExpressionParser.PREPEND;
@@ -674,8 +674,8 @@ public class Query {
case ATTR_NAME: {
return newStringLiteralEvaluator(tree.getChild(0).getText());
}
- case NUMBER: {
- return new NumberLiteralEvaluator(tree.getText());
+ case WHOLE_NUMBER: {
+ return new WholeNumberLiteralEvaluator(tree.getText());
}
case STRING_LITERAL: {
return newStringLiteralEvaluator(tree.getText());
@@ -880,25 +880,66 @@ public class Query {
return toBooleanEvaluator(evaluator, null);
}
- private static Evaluator<Long> toNumberEvaluator(final Evaluator<?> evaluator) {
- return toNumberEvaluator(evaluator, null);
+ private static Evaluator<Long> toWholeNumberEvaluator(final Evaluator<?> evaluator) {
+ return toWholeNumberEvaluator(evaluator, null);
}
@SuppressWarnings("unchecked")
- private static Evaluator<Long> toNumberEvaluator(final Evaluator<?> evaluator, final String location) {
+ private static Evaluator<Long> toWholeNumberEvaluator(final Evaluator<?> evaluator, final String location) {
switch (evaluator.getResultType()) {
- case NUMBER:
+ case WHOLE_NUMBER:
return (Evaluator<Long>) evaluator;
case STRING:
- return addToken(new NumberCastEvaluator(evaluator), evaluator.getToken());
case DATE:
- return addToken(new DateToNumberEvaluator((DateEvaluator) evaluator), evaluator.getToken());
+ case DECIMAL:
+ case NUMBER:
+ return addToken(new WholeNumberCastEvaluator(evaluator), evaluator.getToken());
default:
- throw new AttributeExpressionLanguageParsingException("Cannot implicitly convert Data Type " + evaluator.getResultType() + " to " + ResultType.NUMBER
+ throw new AttributeExpressionLanguageParsingException("Cannot implicitly convert Data Type " + evaluator.getResultType() + " to " + ResultType.WHOLE_NUMBER
+ (location == null ? "" : " at location [" + location + "]"));
}
}
+ private static Evaluator<Double> toDecimalEvaluator(final Evaluator<?> evaluator) {
+ return toDecimalEvaluator(evaluator, null);
+ }
+
+ @SuppressWarnings("unchecked")
+ private static Evaluator<Double> toDecimalEvaluator(final Evaluator<?> evaluator, final String location) {
+ switch (evaluator.getResultType()) {
+ case DECIMAL:
+ return (Evaluator<Double>) evaluator;
+ case WHOLE_NUMBER:
+ case STRING:
+ case DATE:
+ case NUMBER:
+ return addToken(new DecimalCastEvaluator(evaluator), evaluator.getToken());
+ default:
+ throw new AttributeExpressionLanguageParsingException("Cannot implicitly convert Data Type " + evaluator.getResultType() + " to " + ResultType.DECIMAL
+ + (location == null ? "" : " at location [" + location + "]"));
+ }
+ }
+
+ private static Evaluator<Number> toNumberEvaluator(final Evaluator<?> evaluator) {
+ return toNumberEvaluator(evaluator, null);
+ }
+
+ @SuppressWarnings("unchecked")
+ private static Evaluator<Number> toNumberEvaluator(final Evaluator<?> evaluator, final String location) {
+ switch (evaluator.getResultType()) {
+ case NUMBER:
+ return (Evaluator<Number>) evaluator;
+ case STRING:
+ case DATE:
+ case DECIMAL:
+ case WHOLE_NUMBER:
+ return addToken(new NumberCastEvaluator(evaluator), evaluator.getToken());
+ default:
+ throw new AttributeExpressionLanguageParsingException("Cannot implicitly convert Data Type " + evaluator.getResultType() + " to " + ResultType.WHOLE_NUMBER
+ + (location == null ? "" : " at location [" + location + "]"));
+ }
+ }
+
private static DateEvaluator toDateEvaluator(final Evaluator<?> evaluator) {
return toDateEvaluator(evaluator, null);
}
@@ -1046,11 +1087,11 @@ public class Query {
final int numArgs = argEvaluators.size();
if (numArgs == 1) {
return addToken(new SubstringEvaluator(toStringEvaluator(subjectEvaluator),
- toNumberEvaluator(argEvaluators.get(0), "first argument to substring")), "substring");
+ toWholeNumberEvaluator(argEvaluators.get(0), "first argument to substring")), "substring");
} else if (numArgs == 2) {
return addToken(new SubstringEvaluator(toStringEvaluator(subjectEvaluator),
- toNumberEvaluator(argEvaluators.get(0), "first argument to substring"),
- toNumberEvaluator(argEvaluators.get(1), "second argument to substring")), "substring");
+ toWholeNumberEvaluator(argEvaluators.get(0), "first argument to substring"),
+ toWholeNumberEvaluator(argEvaluators.get(1), "second argument to substring")), "substring");
} else {
throw new AttributeExpressionLanguageParsingException("substring() function can take either 1 or 2 arguments but cannot take " + numArgs + " arguments");
}
@@ -1142,29 +1183,48 @@ public class Query {
}
case TO_DATE: {
if (argEvaluators.isEmpty()) {
- return addToken(new NumberToDateEvaluator(toNumberEvaluator(subjectEvaluator)), "toDate");
+ return addToken(new NumberToDateEvaluator(toWholeNumberEvaluator(subjectEvaluator)), "toDate");
} else if (subjectEvaluator.getResultType() == ResultType.STRING) {
return addToken(new StringToDateEvaluator(toStringEvaluator(subjectEvaluator), toStringEvaluator(argEvaluators.get(0))), "toDate");
} else {
- return addToken(new NumberToDateEvaluator(toNumberEvaluator(subjectEvaluator)), "toDate");
+ return addToken(new NumberToDateEvaluator(toWholeNumberEvaluator(subjectEvaluator)), "toDate");
}
}
case TO_NUMBER: {
verifyArgCount(argEvaluators, 0, "toNumber");
switch (subjectEvaluator.getResultType()) {
case STRING:
- return addToken(new ToNumberEvaluator((StringEvaluator) subjectEvaluator), "toNumber");
+ case WHOLE_NUMBER:
+ case DECIMAL:
+ case NUMBER:
+ case DATE:
+ return addToken(toWholeNumberEvaluator(subjectEvaluator), "toNumber");
+ default:
+ throw new AttributeExpressionLanguageParsingException(subjectEvaluator + " returns type " + subjectEvaluator.getResultType() + " but expected to get " + ResultType.STRING +
+ ", " + ResultType.DECIMAL + ", or " + ResultType.DATE);
+ }
+ }
+ case TO_DECIMAL: {
+ verifyArgCount(argEvaluators, 0, "toDecimal");
+ switch (subjectEvaluator.getResultType()) {
+ case WHOLE_NUMBER:
+ case DECIMAL:
+ case STRING:
+ case NUMBER:
case DATE:
- return addToken(new DateToNumberEvaluator((DateEvaluator) subjectEvaluator), "toNumber");
+ return addToken(toDecimalEvaluator(subjectEvaluator), "toDecimal");
default:
- throw new AttributeExpressionLanguageParsingException(subjectEvaluator + " returns type " + subjectEvaluator.getResultType() + " but expected to get " + ResultType.STRING);
+ throw new AttributeExpressionLanguageParsingException(subjectEvaluator + " returns type " + subjectEvaluator.getResultType() + " but expected to get " + ResultType.STRING +
+ ", " + ResultType.WHOLE_NUMBER + ", or " + ResultType.DATE);
}
}
case TO_RADIX: {
if (argEvaluators.size() == 1) {
- return addToken(new ToRadixEvaluator((NumberEvaluator) subjectEvaluator, toNumberEvaluator(argEvaluators.get(0))), "toRadix");
+ return addToken(new ToRadixEvaluator(toWholeNumberEvaluator(subjectEvaluator),
+ toWholeNumberEvaluator(argEvaluators.get(0))), "toRadix");
} else {
- return addToken(new ToRadixEvaluator((NumberEvaluator) subjectEvaluator, toNumberEvaluator(argEvaluators.get(0)), toNumberEvaluator(argEvaluators.get(1))), "toRadix");
+ return addToken(new ToRadixEvaluator(toWholeNumberEvaluator(subjectEvaluator),
+ toWholeNumberEvaluator(argEvaluators.get(0)), toWholeNumberEvaluator(argEvaluators.get(1))), "toRadix");
}
}
case MOD: {
@@ -1211,24 +1271,24 @@ public class Query {
if (argEvaluators.size() == 1) {
// Only a single argument - the index to return.
return addToken(new GetDelimitedFieldEvaluator(toStringEvaluator(subjectEvaluator),
- toNumberEvaluator(argEvaluators.get(0), "first argument of getDelimitedField")), "getDelimitedField");
+ toWholeNumberEvaluator(argEvaluators.get(0), "first argument of getDelimitedField")), "getDelimitedField");
} else if (argEvaluators.size() == 2) {
// two arguments - index and delimiter.
return addToken(new GetDelimitedFieldEvaluator(toStringEvaluator(subjectEvaluator),
- toNumberEvaluator(argEvaluators.get(0), "first argument of getDelimitedField"),
+ toWholeNumberEvaluator(argEvaluators.get(0), "first argument of getDelimitedField"),
toStringEvaluator(argEvaluators.get(1), "second argument of getDelimitedField")),
"getDelimitedField");
} else if (argEvaluators.size() == 3) {
// 3 arguments - index, delimiter, quote char.
return addToken(new GetDelimitedFieldEvaluator(toStringEvaluator(subjectEvaluator),
- toNumberEvaluator(argEvaluators.get(0), "first argument of getDelimitedField"),
+ toWholeNumberEvaluator(argEvaluators.get(0), "first argument of getDelimitedField"),
toStringEvaluator(argEvaluators.get(1), "second argument of getDelimitedField"),
toStringEvaluator(argEvaluators.get(2), "third argument of getDelimitedField")),
"getDelimitedField");
} else if (argEvaluators.size() == 4) {
// 4 arguments - index, delimiter, quote char, escape char
return addToken(new GetDelimitedFieldEvaluator(toStringEvaluator(subjectEvaluator),
- toNumberEvaluator(argEvaluators.get(0), "first argument of getDelimitedField"),
+ toWholeNumberEvaluator(argEvaluators.get(0), "first argument of getDelimitedField"),
toStringEvaluator(argEvaluators.get(1), "second argument of getDelimitedField"),
toStringEvaluator(argEvaluators.get(2), "third argument of getDelimitedField"),
toStringEvaluator(argEvaluators.get(3), "fourth argument of getDelimitedField")),
@@ -1236,7 +1296,7 @@ public class Query {
} else {
// 5 arguments - index, delimiter, quote char, escape char, strip escape/quote chars flag
return addToken(new GetDelimitedFieldEvaluator(toStringEvaluator(subjectEvaluator),
- toNumberEvaluator(argEvaluators.get(0), "first argument of getDelimitedField"),
+ toWholeNumberEvaluator(argEvaluators.get(0), "first argument of getDelimitedField"),
toStringEvaluator(argEvaluators.get(1), "second argument of getDelimitedField"),
toStringEvaluator(argEvaluators.get(2), "third argument of getDelimitedField"),
toStringEvaluator(argEvaluators.get(3), "fourth argument of getDelimitedField"),
http://git-wip-us.apache.org/repos/asf/nifi/blob/94ab9990/nifi-commons/nifi-expression-language/src/main/java/org/apache/nifi/attribute/expression/language/evaluation/DecimalEvaluator.java
----------------------------------------------------------------------
diff --git a/nifi-commons/nifi-expression-language/src/main/java/org/apache/nifi/attribute/expression/language/evaluation/DecimalEvaluator.java b/nifi-commons/nifi-expression-language/src/main/java/org/apache/nifi/attribute/expression/language/evaluation/DecimalEvaluator.java
new file mode 100644
index 0000000..f41b965
--- /dev/null
+++ b/nifi-commons/nifi-expression-language/src/main/java/org/apache/nifi/attribute/expression/language/evaluation/DecimalEvaluator.java
@@ -0,0 +1,43 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one or more
+ * contributor license agreements. See the NOTICE file distributed with
+ * this work for additional information regarding copyright ownership.
+ * The ASF licenses this file to You under the Apache License, Version 2.0
+ * (the "License"); you may not use this file except in compliance with
+ * the License. You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+package org.apache.nifi.attribute.expression.language.evaluation;
+
+import org.apache.nifi.expression.AttributeExpression.ResultType;
+
+public abstract class DecimalEvaluator implements Evaluator<Double> {
+ private String token;
+
+ @Override
+ public ResultType getResultType() {
+ return ResultType.DECIMAL;
+ }
+
+ @Override
+ public int getEvaluationsRemaining() {
+ return 0;
+ }
+
+ @Override
+ public String getToken() {
+ return token;
+ }
+
+ @Override
+ public void setToken(final String token) {
+ this.token = token;
+ }
+}
http://git-wip-us.apache.org/repos/asf/nifi/blob/94ab9990/nifi-commons/nifi-expression-language/src/main/java/org/apache/nifi/attribute/expression/language/evaluation/DecimalQueryResult.java
----------------------------------------------------------------------
diff --git a/nifi-commons/nifi-expression-language/src/main/java/org/apache/nifi/attribute/expression/language/evaluation/DecimalQueryResult.java b/nifi-commons/nifi-expression-language/src/main/java/org/apache/nifi/attribute/expression/language/evaluation/DecimalQueryResult.java
new file mode 100644
index 0000000..b7980a8
--- /dev/null
+++ b/nifi-commons/nifi-expression-language/src/main/java/org/apache/nifi/attribute/expression/language/evaluation/DecimalQueryResult.java
@@ -0,0 +1,43 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one or more
+ * contributor license agreements. See the NOTICE file distributed with
+ * this work for additional information regarding copyright ownership.
+ * The ASF licenses this file to You under the Apache License, Version 2.0
+ * (the "License"); you may not use this file except in compliance with
+ * the License. You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+package org.apache.nifi.attribute.expression.language.evaluation;
+
+import org.apache.nifi.expression.AttributeExpression.ResultType;
+
+public class DecimalQueryResult implements QueryResult<Double> {
+
+ private final Double value;
+
+ public DecimalQueryResult(final Double value) {
+ this.value = value;
+ }
+
+ @Override
+ public Double getValue() {
+ return value;
+ }
+
+ @Override
+ public ResultType getResultType() {
+ return ResultType.DECIMAL;
+ }
+
+ @Override
+ public String toString() {
+ return String.valueOf(getValue());
+ }
+}
http://git-wip-us.apache.org/repos/asf/nifi/blob/94ab9990/nifi-commons/nifi-expression-language/src/main/java/org/apache/nifi/attribute/expression/language/evaluation/NumberEvaluator.java
----------------------------------------------------------------------
diff --git a/nifi-commons/nifi-expression-language/src/main/java/org/apache/nifi/attribute/expression/language/evaluation/NumberEvaluator.java b/nifi-commons/nifi-expression-language/src/main/java/org/apache/nifi/attribute/expression/language/evaluation/NumberEvaluator.java
index ec3adac..1faf533 100644
--- a/nifi-commons/nifi-expression-language/src/main/java/org/apache/nifi/attribute/expression/language/evaluation/NumberEvaluator.java
+++ b/nifi-commons/nifi-expression-language/src/main/java/org/apache/nifi/attribute/expression/language/evaluation/NumberEvaluator.java
@@ -18,7 +18,7 @@ package org.apache.nifi.attribute.expression.language.evaluation;
import org.apache.nifi.expression.AttributeExpression.ResultType;
-public abstract class NumberEvaluator implements Evaluator<Long> {
+public abstract class NumberEvaluator implements Evaluator<Number> {
private String token;
@Override
http://git-wip-us.apache.org/repos/asf/nifi/blob/94ab9990/nifi-commons/nifi-expression-language/src/main/java/org/apache/nifi/attribute/expression/language/evaluation/NumberQueryResult.java
----------------------------------------------------------------------
diff --git a/nifi-commons/nifi-expression-language/src/main/java/org/apache/nifi/attribute/expression/language/evaluation/NumberQueryResult.java b/nifi-commons/nifi-expression-language/src/main/java/org/apache/nifi/attribute/expression/language/evaluation/NumberQueryResult.java
index fc3c961..2c9a6e8 100644
--- a/nifi-commons/nifi-expression-language/src/main/java/org/apache/nifi/attribute/expression/language/evaluation/NumberQueryResult.java
+++ b/nifi-commons/nifi-expression-language/src/main/java/org/apache/nifi/attribute/expression/language/evaluation/NumberQueryResult.java
@@ -18,16 +18,16 @@ package org.apache.nifi.attribute.expression.language.evaluation;
import org.apache.nifi.expression.AttributeExpression.ResultType;
-public class NumberQueryResult implements QueryResult<Long> {
+public class NumberQueryResult implements QueryResult<Number> {
- private final Long value;
+ private final Number value;
- public NumberQueryResult(final Long value) {
+ public NumberQueryResult(final Number value) {
this.value = value;
}
@Override
- public Long getValue() {
+ public Number getValue() {
return value;
}
http://git-wip-us.apache.org/repos/asf/nifi/blob/94ab9990/nifi-commons/nifi-expression-language/src/main/java/org/apache/nifi/attribute/expression/language/evaluation/WholeNumberEvaluator.java
----------------------------------------------------------------------
diff --git a/nifi-commons/nifi-expression-language/src/main/java/org/apache/nifi/attribute/expression/language/evaluation/WholeNumberEvaluator.java b/nifi-commons/nifi-expression-language/src/main/java/org/apache/nifi/attribute/expression/language/evaluation/WholeNumberEvaluator.java
new file mode 100644
index 0000000..a8d189f
--- /dev/null
+++ b/nifi-commons/nifi-expression-language/src/main/java/org/apache/nifi/attribute/expression/language/evaluation/WholeNumberEvaluator.java
@@ -0,0 +1,43 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one or more
+ * contributor license agreements. See the NOTICE file distributed with
+ * this work for additional information regarding copyright ownership.
+ * The ASF licenses this file to You under the Apache License, Version 2.0
+ * (the "License"); you may not use this file except in compliance with
+ * the License. You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+package org.apache.nifi.attribute.expression.language.evaluation;
+
+import org.apache.nifi.expression.AttributeExpression.ResultType;
+
+public abstract class WholeNumberEvaluator implements Evaluator<Long> {
+ private String token;
+
+ @Override
+ public ResultType getResultType() {
+ return ResultType.WHOLE_NUMBER;
+ }
+
+ @Override
+ public int getEvaluationsRemaining() {
+ return 0;
+ }
+
+ @Override
+ public String getToken() {
+ return token;
+ }
+
+ @Override
+ public void setToken(final String token) {
+ this.token = token;
+ }
+}
http://git-wip-us.apache.org/repos/asf/nifi/blob/94ab9990/nifi-commons/nifi-expression-language/src/main/java/org/apache/nifi/attribute/expression/language/evaluation/WholeNumberQueryResult.java
----------------------------------------------------------------------
diff --git a/nifi-commons/nifi-expression-language/src/main/java/org/apache/nifi/attribute/expression/language/evaluation/WholeNumberQueryResult.java b/nifi-commons/nifi-expression-language/src/main/java/org/apache/nifi/attribute/expression/language/evaluation/WholeNumberQueryResult.java
new file mode 100644
index 0000000..63be84a
--- /dev/null
+++ b/nifi-commons/nifi-expression-language/src/main/java/org/apache/nifi/attribute/expression/language/evaluation/WholeNumberQueryResult.java
@@ -0,0 +1,43 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one or more
+ * contributor license agreements. See the NOTICE file distributed with
+ * this work for additional information regarding copyright ownership.
+ * The ASF licenses this file to You under the Apache License, Version 2.0
+ * (the "License"); you may not use this file except in compliance with
+ * the License. You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+package org.apache.nifi.attribute.expression.language.evaluation;
+
+import org.apache.nifi.expression.AttributeExpression.ResultType;
+
+public class WholeNumberQueryResult implements QueryResult<Long> {
+
+ private final Long value;
+
+ public WholeNumberQueryResult(final Long value) {
+ this.value = value;
+ }
+
+ @Override
+ public Long getValue() {
+ return value;
+ }
+
+ @Override
+ public ResultType getResultType() {
+ return ResultType.WHOLE_NUMBER;
+ }
+
+ @Override
+ public String toString() {
+ return String.valueOf(getValue());
+ }
+}
http://git-wip-us.apache.org/repos/asf/nifi/blob/94ab9990/nifi-commons/nifi-expression-language/src/main/java/org/apache/nifi/attribute/expression/language/evaluation/cast/DateCastEvaluator.java
----------------------------------------------------------------------
diff --git a/nifi-commons/nifi-expression-language/src/main/java/org/apache/nifi/attribute/expression/language/evaluation/cast/DateCastEvaluator.java b/nifi-commons/nifi-expression-language/src/main/java/org/apache/nifi/attribute/expression/language/evaluation/cast/DateCastEvaluator.java
index 96e74ef..c2754d3 100644
--- a/nifi-commons/nifi-expression-language/src/main/java/org/apache/nifi/attribute/expression/language/evaluation/cast/DateCastEvaluator.java
+++ b/nifi-commons/nifi-expression-language/src/main/java/org/apache/nifi/attribute/expression/language/evaluation/cast/DateCastEvaluator.java
@@ -27,6 +27,7 @@ import java.util.regex.Pattern;
import org.apache.nifi.attribute.expression.language.evaluation.DateEvaluator;
import org.apache.nifi.attribute.expression.language.evaluation.DateQueryResult;
import org.apache.nifi.attribute.expression.language.evaluation.Evaluator;
+import org.apache.nifi.attribute.expression.language.evaluation.NumberQueryResult;
import org.apache.nifi.attribute.expression.language.evaluation.QueryResult;
import org.apache.nifi.attribute.expression.language.evaluation.StringQueryResult;
import org.apache.nifi.attribute.expression.language.exception.AttributeExpressionLanguageException;
@@ -102,8 +103,14 @@ public class DateCastEvaluator extends DateEvaluator {
throw new AttributeExpressionLanguageException("Could not implicitly convert input to DATE: " + value);
}
}
- case NUMBER:
+ case WHOLE_NUMBER:
return new DateQueryResult(new Date((Long) result.getValue()));
+ case DECIMAL:
+ Double resultDouble = (Double) result.getValue();
+ return new DateQueryResult(new Date(resultDouble.longValue()));
+ case NUMBER:
+ final Number numberValue = ((NumberQueryResult) result).getValue();
+ return new DateQueryResult(new Date(numberValue.longValue()));
default:
return new DateQueryResult(null);
}
http://git-wip-us.apache.org/repos/asf/nifi/blob/94ab9990/nifi-commons/nifi-expression-language/src/main/java/org/apache/nifi/attribute/expression/language/evaluation/cast/DecimalCastEvaluator.java
----------------------------------------------------------------------
diff --git a/nifi-commons/nifi-expression-language/src/main/java/org/apache/nifi/attribute/expression/language/evaluation/cast/DecimalCastEvaluator.java b/nifi-commons/nifi-expression-language/src/main/java/org/apache/nifi/attribute/expression/language/evaluation/cast/DecimalCastEvaluator.java
new file mode 100644
index 0000000..9418028
--- /dev/null
+++ b/nifi-commons/nifi-expression-language/src/main/java/org/apache/nifi/attribute/expression/language/evaluation/cast/DecimalCastEvaluator.java
@@ -0,0 +1,86 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one or more
+ * contributor license agreements. See the NOTICE file distributed with
+ * this work for additional information regarding copyright ownership.
+ * The ASF licenses this file to You under the Apache License, Version 2.0
+ * (the "License"); you may not use this file except in compliance with
+ * the License. You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+package org.apache.nifi.attribute.expression.language.evaluation.cast;
+
+import org.apache.nifi.attribute.expression.language.evaluation.DateQueryResult;
+import org.apache.nifi.attribute.expression.language.evaluation.DecimalEvaluator;
+import org.apache.nifi.attribute.expression.language.evaluation.DecimalQueryResult;
+import org.apache.nifi.attribute.expression.language.evaluation.Evaluator;
+import org.apache.nifi.attribute.expression.language.evaluation.NumberQueryResult;
+import org.apache.nifi.attribute.expression.language.evaluation.QueryResult;
+import org.apache.nifi.attribute.expression.language.evaluation.StringQueryResult;
+import org.apache.nifi.attribute.expression.language.evaluation.WholeNumberQueryResult;
+import org.apache.nifi.attribute.expression.language.evaluation.util.NumberParsing;
+import org.apache.nifi.attribute.expression.language.exception.AttributeExpressionLanguageParsingException;
+import org.apache.nifi.expression.AttributeExpression.ResultType;
+
+import java.util.Map;
+
+public class DecimalCastEvaluator extends DecimalEvaluator {
+
+ private final Evaluator<?> subjectEvaluator;
+
+ public DecimalCastEvaluator(final Evaluator<?> subjectEvaluator) {
+ if (subjectEvaluator.getResultType() == ResultType.BOOLEAN) {
+ throw new AttributeExpressionLanguageParsingException("Cannot implicitly convert Data Type " + subjectEvaluator.getResultType() + " to " + ResultType.DECIMAL);
+ }
+ this.subjectEvaluator = subjectEvaluator;
+ }
+
+ @Override
+ public QueryResult<Double> evaluate(final Map<String, String> attributes) {
+ final QueryResult<?> result = subjectEvaluator.evaluate(attributes);
+ if (result.getValue() == null) {
+ return new DecimalQueryResult(null);
+ }
+
+ switch (result.getResultType()) {
+ case DECIMAL:
+ return (DecimalQueryResult) result;
+ case STRING:
+ final String trimmed = ((StringQueryResult) result).getValue().trim();
+ NumberParsing.ParseResultType parseType = NumberParsing.parse(trimmed);
+ switch (parseType){
+ case DECIMAL:
+ return new DecimalQueryResult(Double.valueOf(trimmed));
+ case WHOLE_NUMBER:
+ final Long resultValue = Long.valueOf(trimmed);
+ return new DecimalQueryResult(resultValue.doubleValue());
+ case NOT_NUMBER:
+ default:
+ return new DecimalQueryResult(null);
+ }
+ case DATE:
+ Long timestamp = ((DateQueryResult) result).getValue().getTime();
+ return new DecimalQueryResult(timestamp.doubleValue());
+ case WHOLE_NUMBER:
+ final Long resultValue = ((WholeNumberQueryResult) result).getValue();
+ return new DecimalQueryResult(resultValue.doubleValue());
+ case NUMBER:
+ final Number numberValue = ((NumberQueryResult) result).getValue();
+ return new DecimalQueryResult(numberValue.doubleValue());
+ default:
+ return new DecimalQueryResult(null);
+ }
+ }
+
+ @Override
+ public Evaluator<?> getSubjectEvaluator() {
+ return subjectEvaluator;
+ }
+
+}
http://git-wip-us.apache.org/repos/asf/nifi/blob/94ab9990/nifi-commons/nifi-expression-language/src/main/java/org/apache/nifi/attribute/expression/language/evaluation/cast/NumberCastEvaluator.java
----------------------------------------------------------------------
diff --git a/nifi-commons/nifi-expression-language/src/main/java/org/apache/nifi/attribute/expression/language/evaluation/cast/NumberCastEvaluator.java b/nifi-commons/nifi-expression-language/src/main/java/org/apache/nifi/attribute/expression/language/evaluation/cast/NumberCastEvaluator.java
index 0447d48..4073dc4 100644
--- a/nifi-commons/nifi-expression-language/src/main/java/org/apache/nifi/attribute/expression/language/evaluation/cast/NumberCastEvaluator.java
+++ b/nifi-commons/nifi-expression-language/src/main/java/org/apache/nifi/attribute/expression/language/evaluation/cast/NumberCastEvaluator.java
@@ -16,32 +16,33 @@
*/
package org.apache.nifi.attribute.expression.language.evaluation.cast;
-import java.util.Map;
-import java.util.regex.Pattern;
-
import org.apache.nifi.attribute.expression.language.evaluation.DateQueryResult;
+import org.apache.nifi.attribute.expression.language.evaluation.DecimalQueryResult;
import org.apache.nifi.attribute.expression.language.evaluation.Evaluator;
import org.apache.nifi.attribute.expression.language.evaluation.NumberEvaluator;
import org.apache.nifi.attribute.expression.language.evaluation.NumberQueryResult;
import org.apache.nifi.attribute.expression.language.evaluation.QueryResult;
import org.apache.nifi.attribute.expression.language.evaluation.StringQueryResult;
+import org.apache.nifi.attribute.expression.language.evaluation.WholeNumberQueryResult;
+import org.apache.nifi.attribute.expression.language.evaluation.util.NumberParsing;
import org.apache.nifi.attribute.expression.language.exception.AttributeExpressionLanguageParsingException;
import org.apache.nifi.expression.AttributeExpression.ResultType;
+import java.util.Map;
+
public class NumberCastEvaluator extends NumberEvaluator {
private final Evaluator<?> subjectEvaluator;
- private static final Pattern NUMBER_PATTERN = Pattern.compile("-?\\d+");
public NumberCastEvaluator(final Evaluator<?> subjectEvaluator) {
if (subjectEvaluator.getResultType() == ResultType.BOOLEAN) {
- throw new AttributeExpressionLanguageParsingException("Cannot implicitly convert Data Type " + subjectEvaluator.getResultType() + " to " + ResultType.NUMBER);
+ throw new AttributeExpressionLanguageParsingException("Cannot implicitly convert Data Type " + subjectEvaluator.getResultType() + " to " + ResultType.WHOLE_NUMBER);
}
this.subjectEvaluator = subjectEvaluator;
}
@Override
- public QueryResult<Long> evaluate(final Map<String, String> attributes) {
+ public QueryResult<Number> evaluate(final Map<String, String> attributes) {
final QueryResult<?> result = subjectEvaluator.evaluate(attributes);
if (result.getValue() == null) {
return new NumberQueryResult(null);
@@ -50,12 +51,24 @@ public class NumberCastEvaluator extends NumberEvaluator {
switch (result.getResultType()) {
case NUMBER:
return (NumberQueryResult) result;
+ case WHOLE_NUMBER:
+ Long longValue = ((WholeNumberQueryResult) result).getValue();
+ return new NumberQueryResult(longValue);
+ case DECIMAL:
+ Double doubleValue = ((DecimalQueryResult) result).getValue();
+ return new NumberQueryResult(doubleValue);
case STRING:
final String trimmed = ((StringQueryResult) result).getValue().trim();
- if (NUMBER_PATTERN.matcher(trimmed).matches()) {
- return new NumberQueryResult(Long.valueOf(trimmed));
- } else {
- return new NumberQueryResult(null);
+ NumberParsing.ParseResultType parseType = NumberParsing.parse(trimmed);
+ switch (parseType){
+ case DECIMAL:
+ return new NumberQueryResult(Double.valueOf(trimmed));
+ case WHOLE_NUMBER:
+ final Long resultValue = Long.valueOf(trimmed);
+ return new NumberQueryResult(Long.valueOf(trimmed));
+ case NOT_NUMBER:
+ default:
+ return new NumberQueryResult(null);
}
case DATE:
return new NumberQueryResult(((DateQueryResult) result).getValue().getTime());
http://git-wip-us.apache.org/repos/asf/nifi/blob/94ab9990/nifi-commons/nifi-expression-language/src/main/java/org/apache/nifi/attribute/expression/language/evaluation/cast/WholeNumberCastEvaluator.java
----------------------------------------------------------------------
diff --git a/nifi-commons/nifi-expression-language/src/main/java/org/apache/nifi/attribute/expression/language/evaluation/cast/WholeNumberCastEvaluator.java b/nifi-commons/nifi-expression-language/src/main/java/org/apache/nifi/attribute/expression/language/evaluation/cast/WholeNumberCastEvaluator.java
new file mode 100644
index 0000000..024fb44
--- /dev/null
+++ b/nifi-commons/nifi-expression-language/src/main/java/org/apache/nifi/attribute/expression/language/evaluation/cast/WholeNumberCastEvaluator.java
@@ -0,0 +1,85 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one or more
+ * contributor license agreements. See the NOTICE file distributed with
+ * this work for additional information regarding copyright ownership.
+ * The ASF licenses this file to You under the Apache License, Version 2.0
+ * (the "License"); you may not use this file except in compliance with
+ * the License. You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+package org.apache.nifi.attribute.expression.language.evaluation.cast;
+
+import java.util.Map;
+
+import org.apache.nifi.attribute.expression.language.evaluation.DateQueryResult;
+import org.apache.nifi.attribute.expression.language.evaluation.DecimalQueryResult;
+import org.apache.nifi.attribute.expression.language.evaluation.Evaluator;
+import org.apache.nifi.attribute.expression.language.evaluation.NumberQueryResult;
+import org.apache.nifi.attribute.expression.language.evaluation.QueryResult;
+import org.apache.nifi.attribute.expression.language.evaluation.StringQueryResult;
+import org.apache.nifi.attribute.expression.language.evaluation.WholeNumberEvaluator;
+import org.apache.nifi.attribute.expression.language.evaluation.WholeNumberQueryResult;
+import org.apache.nifi.attribute.expression.language.evaluation.util.NumberParsing;
+import org.apache.nifi.attribute.expression.language.exception.AttributeExpressionLanguageParsingException;
+import org.apache.nifi.expression.AttributeExpression.ResultType;
+
+public class WholeNumberCastEvaluator extends WholeNumberEvaluator {
+
+ private final Evaluator<?> subjectEvaluator;
+
+ public WholeNumberCastEvaluator(final Evaluator<?> subjectEvaluator) {
+ if (subjectEvaluator.getResultType() == ResultType.BOOLEAN) {
+ throw new AttributeExpressionLanguageParsingException("Cannot implicitly convert Data Type " + subjectEvaluator.getResultType() + " to " + ResultType.WHOLE_NUMBER);
+ }
+ this.subjectEvaluator = subjectEvaluator;
+ }
+
+ @Override
+ public QueryResult<Long> evaluate(final Map<String, String> attributes) {
+ final QueryResult<?> result = subjectEvaluator.evaluate(attributes);
+ if (result.getValue() == null) {
+ return new WholeNumberQueryResult(null);
+ }
+
+ switch (result.getResultType()) {
+ case WHOLE_NUMBER:
+ return (WholeNumberQueryResult) result;
+ case STRING:
+ final String trimmed = ((StringQueryResult) result).getValue().trim();
+ NumberParsing.ParseResultType parseType = NumberParsing.parse(trimmed);
+ switch (parseType){
+ case DECIMAL:
+ final Double resultValue = Double.valueOf(trimmed);
+ return new WholeNumberQueryResult(resultValue.longValue());
+ case WHOLE_NUMBER:
+ return new WholeNumberQueryResult(Long.valueOf(trimmed));
+ case NOT_NUMBER:
+ default:
+ return new WholeNumberQueryResult(null);
+ }
+ case DATE:
+ return new WholeNumberQueryResult(((DateQueryResult) result).getValue().getTime());
+ case DECIMAL:
+ final Double resultValue = ((DecimalQueryResult) result).getValue();
+ return new WholeNumberQueryResult(resultValue.longValue());
+ case NUMBER:
+ final Number numberValue = ((NumberQueryResult) result).getValue();
+ return new WholeNumberQueryResult(numberValue.longValue());
+ default:
+ return new WholeNumberQueryResult(null);
+ }
+ }
+
+ @Override
+ public Evaluator<?> getSubjectEvaluator() {
+ return subjectEvaluator;
+ }
+
+}
http://git-wip-us.apache.org/repos/asf/nifi/blob/94ab9990/nifi-commons/nifi-expression-language/src/main/java/org/apache/nifi/attribute/expression/language/evaluation/functions/DateToNumberEvaluator.java
----------------------------------------------------------------------
diff --git a/nifi-commons/nifi-expression-language/src/main/java/org/apache/nifi/attribute/expression/language/evaluation/functions/DateToNumberEvaluator.java b/nifi-commons/nifi-expression-language/src/main/java/org/apache/nifi/attribute/expression/language/evaluation/functions/DateToNumberEvaluator.java
deleted file mode 100644
index 0594c4a..0000000
--- a/nifi-commons/nifi-expression-language/src/main/java/org/apache/nifi/attribute/expression/language/evaluation/functions/DateToNumberEvaluator.java
+++ /dev/null
@@ -1,50 +0,0 @@
-/*
- * Licensed to the Apache Software Foundation (ASF) under one or more
- * contributor license agreements. See the NOTICE file distributed with
- * this work for additional information regarding copyright ownership.
- * The ASF licenses this file to You under the Apache License, Version 2.0
- * (the "License"); you may not use this file except in compliance with
- * the License. You may obtain a copy of the License at
- *
- * http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-package org.apache.nifi.attribute.expression.language.evaluation.functions;
-
-import java.util.Date;
-import java.util.Map;
-
-import org.apache.nifi.attribute.expression.language.evaluation.DateEvaluator;
-import org.apache.nifi.attribute.expression.language.evaluation.Evaluator;
-import org.apache.nifi.attribute.expression.language.evaluation.NumberEvaluator;
-import org.apache.nifi.attribute.expression.language.evaluation.NumberQueryResult;
-import org.apache.nifi.attribute.expression.language.evaluation.QueryResult;
-
-public class DateToNumberEvaluator extends NumberEvaluator {
-
- private final DateEvaluator subjectEvaluator;
-
- public DateToNumberEvaluator(final DateEvaluator subjectEvaluator) {
- this.subjectEvaluator = subjectEvaluator;
- }
-
- @Override
- public QueryResult<Long> evaluate(final Map<String, String> attributes) {
- final QueryResult<Date> subjectResult = subjectEvaluator.evaluate(attributes);
- if (subjectResult.getValue() == null) {
- return new NumberQueryResult(null);
- }
-
- return new NumberQueryResult(subjectResult.getValue().getTime());
- }
-
- @Override
- public Evaluator<?> getSubjectEvaluator() {
- return subjectEvaluator;
- }
-}
http://git-wip-us.apache.org/repos/asf/nifi/blob/94ab9990/nifi-commons/nifi-expression-language/src/main/java/org/apache/nifi/attribute/expression/language/evaluation/functions/DivideEvaluator.java
----------------------------------------------------------------------
diff --git a/nifi-commons/nifi-expression-language/src/main/java/org/apache/nifi/attribute/expression/language/evaluation/functions/DivideEvaluator.java b/nifi-commons/nifi-expression-language/src/main/java/org/apache/nifi/attribute/expression/language/evaluation/functions/DivideEvaluator.java
index 12ab37f..711ca98 100644
--- a/nifi-commons/nifi-expression-language/src/main/java/org/apache/nifi/attribute/expression/language/evaluation/functions/DivideEvaluator.java
+++ b/nifi-commons/nifi-expression-language/src/main/java/org/apache/nifi/attribute/expression/language/evaluation/functions/DivideEvaluator.java
@@ -25,27 +25,32 @@ import org.apache.nifi.attribute.expression.language.evaluation.QueryResult;
public class DivideEvaluator extends NumberEvaluator {
- private final Evaluator<Long> subject;
- private final Evaluator<Long> divideValue;
+ private final Evaluator<Number> subject;
+ private final Evaluator<Number> divideValue;
- public DivideEvaluator(final Evaluator<Long> subject, final Evaluator<Long> divideValue) {
+ public DivideEvaluator(final Evaluator<Number> subject, final Evaluator<Number> divideValue) {
this.subject = subject;
this.divideValue = divideValue;
}
@Override
- public QueryResult<Long> evaluate(final Map<String, String> attributes) {
- final Long subjectValue = subject.evaluate(attributes).getValue();
+ public QueryResult<Number> evaluate(final Map<String, String> attributes) {
+ final Number subjectValue = subject.evaluate(attributes).getValue();
if (subjectValue == null) {
return new NumberQueryResult(null);
}
- final Long divide = divideValue.evaluate(attributes).getValue();
+ final Number divide = divideValue.evaluate(attributes).getValue();
if (divide == null) {
return new NumberQueryResult(null);
}
- final long result = subjectValue / divide;
+ final Number result;
+ if (subjectValue instanceof Double || divide instanceof Double){
+ result = subjectValue.doubleValue() / divide.doubleValue();
+ } else {
+ result = subjectValue.longValue() / divide.longValue();
+ }
return new NumberQueryResult(result);
}
http://git-wip-us.apache.org/repos/asf/nifi/blob/94ab9990/nifi-commons/nifi-expression-language/src/main/java/org/apache/nifi/attribute/expression/language/evaluation/functions/GreaterThanEvaluator.java
----------------------------------------------------------------------
diff --git a/nifi-commons/nifi-expression-language/src/main/java/org/apache/nifi/attribute/expression/language/evaluation/functions/GreaterThanEvaluator.java b/nifi-commons/nifi-expression-language/src/main/java/org/apache/nifi/attribute/expression/language/evaluation/functions/GreaterThanEvaluator.java
index 8850225..26d3ea9 100644
--- a/nifi-commons/nifi-expression-language/src/main/java/org/apache/nifi/attribute/expression/language/evaluation/functions/GreaterThanEvaluator.java
+++ b/nifi-commons/nifi-expression-language/src/main/java/org/apache/nifi/attribute/expression/language/evaluation/functions/GreaterThanEvaluator.java
@@ -25,27 +25,31 @@ import org.apache.nifi.attribute.expression.language.evaluation.QueryResult;
public class GreaterThanEvaluator extends BooleanEvaluator {
- private final Evaluator<Long> subject;
- private final Evaluator<Long> comparison;
+ private final Evaluator<Number> subject;
+ private final Evaluator<Number> comparison;
- public GreaterThanEvaluator(final Evaluator<Long> subject, final Evaluator<Long> comparison) {
+ public GreaterThanEvaluator(final Evaluator<Number> subject, final Evaluator<Number> comparison) {
this.subject = subject;
this.comparison = comparison;
}
@Override
public QueryResult<Boolean> evaluate(final Map<String, String> attributes) {
- final Long subjectValue = subject.evaluate(attributes).getValue();
+ final Number subjectValue = subject.evaluate(attributes).getValue();
if (subjectValue == null) {
return new BooleanQueryResult(false);
}
- final Long comparisonValue = comparison.evaluate(attributes).getValue();
+ final Number comparisonValue = comparison.evaluate(attributes).getValue();
if (comparisonValue == null) {
return new BooleanQueryResult(false);
}
- return new BooleanQueryResult(subjectValue > comparisonValue);
+ if (subjectValue instanceof Double || comparisonValue instanceof Double){
+ return new BooleanQueryResult(subjectValue.doubleValue() > comparisonValue.doubleValue());
+ } else {
+ return new BooleanQueryResult(subjectValue.longValue() > comparisonValue.longValue());
+ }
}
@Override
http://git-wip-us.apache.org/repos/asf/nifi/blob/94ab9990/nifi-commons/nifi-expression-language/src/main/java/org/apache/nifi/attribute/expression/language/evaluation/functions/GreaterThanOrEqualEvaluator.java
----------------------------------------------------------------------
diff --git a/nifi-commons/nifi-expression-language/src/main/java/org/apache/nifi/attribute/expression/language/evaluation/functions/GreaterThanOrEqualEvaluator.java b/nifi-commons/nifi-expression-language/src/main/java/org/apache/nifi/attribute/expression/language/evaluation/functions/GreaterThanOrEqualEvaluator.java
index ff71335..4b6eb5f 100644
--- a/nifi-commons/nifi-expression-language/src/main/java/org/apache/nifi/attribute/expression/language/evaluation/functions/GreaterThanOrEqualEvaluator.java
+++ b/nifi-commons/nifi-expression-language/src/main/java/org/apache/nifi/attribute/expression/language/evaluation/functions/GreaterThanOrEqualEvaluator.java
@@ -25,27 +25,31 @@ import org.apache.nifi.attribute.expression.language.evaluation.QueryResult;
public class GreaterThanOrEqualEvaluator extends BooleanEvaluator {
- private final Evaluator<Long> subject;
- private final Evaluator<Long> comparison;
+ private final Evaluator<Number> subject;
+ private final Evaluator<Number> comparison;
- public GreaterThanOrEqualEvaluator(final Evaluator<Long> subject, final Evaluator<Long> comparison) {
+ public GreaterThanOrEqualEvaluator(final Evaluator<Number> subject, final Evaluator<Number> comparison) {
this.subject = subject;
this.comparison = comparison;
}
@Override
public QueryResult<Boolean> evaluate(final Map<String, String> attributes) {
- final Long subjectValue = subject.evaluate(attributes).getValue();
+ final Number subjectValue = subject.evaluate(attributes).getValue();
if (subjectValue == null) {
return new BooleanQueryResult(false);
}
- final Long comparisonValue = comparison.evaluate(attributes).getValue();
+ final Number comparisonValue = comparison.evaluate(attributes).getValue();
if (comparisonValue == null) {
return new BooleanQueryResult(false);
}
- return new BooleanQueryResult(subjectValue >= comparisonValue);
+ if (subjectValue instanceof Double || comparisonValue instanceof Double){
+ return new BooleanQueryResult(subjectValue.doubleValue() >= comparisonValue.doubleValue());
+ } else {
+ return new BooleanQueryResult(subjectValue.longValue() >= comparisonValue.longValue());
+ }
}
@Override
http://git-wip-us.apache.org/repos/asf/nifi/blob/94ab9990/nifi-commons/nifi-expression-language/src/main/java/org/apache/nifi/attribute/expression/language/evaluation/functions/IndexOfEvaluator.java
----------------------------------------------------------------------
diff --git a/nifi-commons/nifi-expression-language/src/main/java/org/apache/nifi/attribute/expression/language/evaluation/functions/IndexOfEvaluator.java b/nifi-commons/nifi-expression-language/src/main/java/org/apache/nifi/attribute/expression/language/evaluation/functions/IndexOfEvaluator.java
index c4bc03e..073570c 100644
--- a/nifi-commons/nifi-expression-language/src/main/java/org/apache/nifi/attribute/expression/language/evaluation/functions/IndexOfEvaluator.java
+++ b/nifi-commons/nifi-expression-language/src/main/java/org/apache/nifi/attribute/expression/language/evaluation/functions/IndexOfEvaluator.java
@@ -19,11 +19,11 @@ package org.apache.nifi.attribute.expression.language.evaluation.functions;
import java.util.Map;
import org.apache.nifi.attribute.expression.language.evaluation.Evaluator;
-import org.apache.nifi.attribute.expression.language.evaluation.NumberEvaluator;
-import org.apache.nifi.attribute.expression.language.evaluation.NumberQueryResult;
import org.apache.nifi.attribute.expression.language.evaluation.QueryResult;
+import org.apache.nifi.attribute.expression.language.evaluation.WholeNumberEvaluator;
+import org.apache.nifi.attribute.expression.language.evaluation.WholeNumberQueryResult;
-public class IndexOfEvaluator extends NumberEvaluator {
+public class IndexOfEvaluator extends WholeNumberEvaluator {
private final Evaluator<String> subject;
private final Evaluator<String> indexEvaluator;
@@ -37,11 +37,11 @@ public class IndexOfEvaluator extends NumberEvaluator {
public QueryResult<Long> evaluate(final Map<String, String> attributes) {
final String subjectValue = subject.evaluate(attributes).getValue();
if (subjectValue == null) {
- return new NumberQueryResult(-1L);
+ return new WholeNumberQueryResult(-1L);
}
final String indexEvalValue = indexEvaluator.evaluate(attributes).getValue();
- return new NumberQueryResult((long) subjectValue.indexOf(indexEvalValue));
+ return new WholeNumberQueryResult((long) subjectValue.indexOf(indexEvalValue));
}
@Override
http://git-wip-us.apache.org/repos/asf/nifi/blob/94ab9990/nifi-commons/nifi-expression-language/src/main/java/org/apache/nifi/attribute/expression/language/evaluation/functions/LastIndexOfEvaluator.java
----------------------------------------------------------------------
diff --git a/nifi-commons/nifi-expression-language/src/main/java/org/apache/nifi/attribute/expression/language/evaluation/functions/LastIndexOfEvaluator.java b/nifi-commons/nifi-expression-language/src/main/java/org/apache/nifi/attribute/expression/language/evaluation/functions/LastIndexOfEvaluator.java
index 3ebbee7..c8bb2b0 100644
--- a/nifi-commons/nifi-expression-language/src/main/java/org/apache/nifi/attribute/expression/language/evaluation/functions/LastIndexOfEvaluator.java
+++ b/nifi-commons/nifi-expression-language/src/main/java/org/apache/nifi/attribute/expression/language/evaluation/functions/LastIndexOfEvaluator.java
@@ -19,11 +19,11 @@ package org.apache.nifi.attribute.expression.language.evaluation.functions;
import java.util.Map;
import org.apache.nifi.attribute.expression.language.evaluation.Evaluator;
-import org.apache.nifi.attribute.expression.language.evaluation.NumberEvaluator;
-import org.apache.nifi.attribute.expression.language.evaluation.NumberQueryResult;
import org.apache.nifi.attribute.expression.language.evaluation.QueryResult;
+import org.apache.nifi.attribute.expression.language.evaluation.WholeNumberEvaluator;
+import org.apache.nifi.attribute.expression.language.evaluation.WholeNumberQueryResult;
-public class LastIndexOfEvaluator extends NumberEvaluator {
+public class LastIndexOfEvaluator extends WholeNumberEvaluator {
private final Evaluator<String> subject;
private final Evaluator<String> indexEvaluator;
@@ -37,11 +37,11 @@ public class LastIndexOfEvaluator extends NumberEvaluator {
public QueryResult<Long> evaluate(final Map<String, String> attributes) {
final String subjectValue = subject.evaluate(attributes).getValue();
if (subjectValue == null) {
- return new NumberQueryResult(-1L);
+ return new WholeNumberQueryResult(-1L);
}
final String indexEvalValue = indexEvaluator.evaluate(attributes).getValue();
- return new NumberQueryResult((long) subjectValue.lastIndexOf(indexEvalValue));
+ return new WholeNumberQueryResult((long) subjectValue.lastIndexOf(indexEvalValue));
}
@Override
http://git-wip-us.apache.org/repos/asf/nifi/blob/94ab9990/nifi-commons/nifi-expression-language/src/main/java/org/apache/nifi/attribute/expression/language/evaluation/functions/LengthEvaluator.java
----------------------------------------------------------------------
diff --git a/nifi-commons/nifi-expression-language/src/main/java/org/apache/nifi/attribute/expression/language/evaluation/functions/LengthEvaluator.java b/nifi-commons/nifi-expression-language/src/main/java/org/apache/nifi/attribute/expression/language/evaluation/functions/LengthEvaluator.java
index 46bc24c..27a70ad 100644
--- a/nifi-commons/nifi-expression-language/src/main/java/org/apache/nifi/attribute/expression/language/evaluation/functions/LengthEvaluator.java
+++ b/nifi-commons/nifi-expression-language/src/main/java/org/apache/nifi/attribute/expression/language/evaluation/functions/LengthEvaluator.java
@@ -19,11 +19,11 @@ package org.apache.nifi.attribute.expression.language.evaluation.functions;
import java.util.Map;
import org.apache.nifi.attribute.expression.language.evaluation.Evaluator;
-import org.apache.nifi.attribute.expression.language.evaluation.NumberEvaluator;
-import org.apache.nifi.attribute.expression.language.evaluation.NumberQueryResult;
import org.apache.nifi.attribute.expression.language.evaluation.QueryResult;
+import org.apache.nifi.attribute.expression.language.evaluation.WholeNumberEvaluator;
+import org.apache.nifi.attribute.expression.language.evaluation.WholeNumberQueryResult;
-public class LengthEvaluator extends NumberEvaluator {
+public class LengthEvaluator extends WholeNumberEvaluator {
private final Evaluator<String> subject;
@@ -34,7 +34,7 @@ public class LengthEvaluator extends NumberEvaluator {
@Override
public QueryResult<Long> evaluate(final Map<String, String> attributes) {
final String subjectValue = subject.evaluate(attributes).getValue();
- return new NumberQueryResult((long) (subjectValue == null ? 0 : subjectValue.length()));
+ return new WholeNumberQueryResult((long) (subjectValue == null ? 0 : subjectValue.length()));
}
@Override
http://git-wip-us.apache.org/repos/asf/nifi/blob/94ab9990/nifi-commons/nifi-expression-language/src/main/java/org/apache/nifi/attribute/expression/language/evaluation/functions/LessThanEvaluator.java
----------------------------------------------------------------------
diff --git a/nifi-commons/nifi-expression-language/src/main/java/org/apache/nifi/attribute/expression/language/evaluation/functions/LessThanEvaluator.java b/nifi-commons/nifi-expression-language/src/main/java/org/apache/nifi/attribute/expression/language/evaluation/functions/LessThanEvaluator.java
index e9bf231..4b614fb 100644
--- a/nifi-commons/nifi-expression-language/src/main/java/org/apache/nifi/attribute/expression/language/evaluation/functions/LessThanEvaluator.java
+++ b/nifi-commons/nifi-expression-language/src/main/java/org/apache/nifi/attribute/expression/language/evaluation/functions/LessThanEvaluator.java
@@ -25,27 +25,31 @@ import org.apache.nifi.attribute.expression.language.evaluation.QueryResult;
public class LessThanEvaluator extends BooleanEvaluator {
- private final Evaluator<Long> subject;
- private final Evaluator<Long> comparison;
+ private final Evaluator<Number> subject;
+ private final Evaluator<Number> comparison;
- public LessThanEvaluator(final Evaluator<Long> subject, final Evaluator<Long> comparison) {
+ public LessThanEvaluator(final Evaluator<Number> subject, final Evaluator<Number> comparison) {
this.subject = subject;
this.comparison = comparison;
}
@Override
public QueryResult<Boolean> evaluate(final Map<String, String> attributes) {
- final Long subjectValue = subject.evaluate(attributes).getValue();
+ final Number subjectValue = subject.evaluate(attributes).getValue();
if (subjectValue == null) {
return new BooleanQueryResult(false);
}
- final Long comparisonValue = comparison.evaluate(attributes).getValue();
+ final Number comparisonValue = comparison.evaluate(attributes).getValue();
if (comparisonValue == null) {
return new BooleanQueryResult(false);
}
- return new BooleanQueryResult(subjectValue < comparisonValue);
+ if (subjectValue instanceof Double || comparisonValue instanceof Double){
+ return new BooleanQueryResult(subjectValue.doubleValue() < comparisonValue.doubleValue());
+ } else {
+ return new BooleanQueryResult(subjectValue.longValue() < comparisonValue.longValue());
+ }
}
@Override
http://git-wip-us.apache.org/repos/asf/nifi/blob/94ab9990/nifi-commons/nifi-expression-language/src/main/java/org/apache/nifi/attribute/expression/language/evaluation/functions/LessThanOrEqualEvaluator.java
----------------------------------------------------------------------
diff --git a/nifi-commons/nifi-expression-language/src/main/java/org/apache/nifi/attribute/expression/language/evaluation/functions/LessThanOrEqualEvaluator.java b/nifi-commons/nifi-expression-language/src/main/java/org/apache/nifi/attribute/expression/language/evaluation/functions/LessThanOrEqualEvaluator.java
index 5bf5ee5..eea4820 100644
--- a/nifi-commons/nifi-expression-language/src/main/java/org/apache/nifi/attribute/expression/language/evaluation/functions/LessThanOrEqualEvaluator.java
+++ b/nifi-commons/nifi-expression-language/src/main/java/org/apache/nifi/attribute/expression/language/evaluation/functions/LessThanOrEqualEvaluator.java
@@ -25,27 +25,31 @@ import org.apache.nifi.attribute.expression.language.evaluation.QueryResult;
public class LessThanOrEqualEvaluator extends BooleanEvaluator {
- private final Evaluator<Long> subject;
- private final Evaluator<Long> comparison;
+ private final Evaluator<Number> subject;
+ private final Evaluator<Number> comparison;
- public LessThanOrEqualEvaluator(final Evaluator<Long> subject, final Evaluator<Long> comparison) {
+ public LessThanOrEqualEvaluator(final Evaluator<Number> subject, final Evaluator<Number> comparison) {
this.subject = subject;
this.comparison = comparison;
}
@Override
public QueryResult<Boolean> evaluate(final Map<String, String> attributes) {
- final Long subjectValue = subject.evaluate(attributes).getValue();
+ final Number subjectValue = subject.evaluate(attributes).getValue();
if (subjectValue == null) {
return new BooleanQueryResult(false);
}
- final Long comparisonValue = comparison.evaluate(attributes).getValue();
+ final Number comparisonValue = comparison.evaluate(attributes).getValue();
if (comparisonValue == null) {
return new BooleanQueryResult(false);
}
- return new BooleanQueryResult(subjectValue <= comparisonValue);
+ if (subjectValue instanceof Double || comparisonValue instanceof Double){
+ return new BooleanQueryResult(subjectValue.doubleValue() <= comparisonValue.doubleValue());
+ } else {
+ return new BooleanQueryResult(subjectValue.longValue() <= comparisonValue.longValue());
+ }
}
@Override
http://git-wip-us.apache.org/repos/asf/nifi/blob/94ab9990/nifi-commons/nifi-expression-language/src/main/java/org/apache/nifi/attribute/expression/language/evaluation/functions/MinusEvaluator.java
----------------------------------------------------------------------
diff --git a/nifi-commons/nifi-expression-language/src/main/java/org/apache/nifi/attribute/expression/language/evaluation/functions/MinusEvaluator.java b/nifi-commons/nifi-expression-language/src/main/java/org/apache/nifi/attribute/expression/language/evaluation/functions/MinusEvaluator.java
index 0555187..2940252 100644
--- a/nifi-commons/nifi-expression-language/src/main/java/org/apache/nifi/attribute/expression/language/evaluation/functions/MinusEvaluator.java
+++ b/nifi-commons/nifi-expression-language/src/main/java/org/apache/nifi/attribute/expression/language/evaluation/functions/MinusEvaluator.java
@@ -25,27 +25,32 @@ import org.apache.nifi.attribute.expression.language.evaluation.QueryResult;
public class MinusEvaluator extends NumberEvaluator {
- private final Evaluator<Long> subject;
- private final Evaluator<Long> minusValue;
+ private final Evaluator<Number> subject;
+ private final Evaluator<Number> minusValue;
- public MinusEvaluator(final Evaluator<Long> subject, final Evaluator<Long> minusValue) {
+ public MinusEvaluator(final Evaluator<Number> subject, final Evaluator<Number> minusValue) {
this.subject = subject;
this.minusValue = minusValue;
}
@Override
- public QueryResult<Long> evaluate(final Map<String, String> attributes) {
- final Long subjectValue = subject.evaluate(attributes).getValue();
+ public QueryResult<Number> evaluate(final Map<String, String> attributes) {
+ final Number subjectValue = subject.evaluate(attributes).getValue();
if (subjectValue == null) {
return new NumberQueryResult(null);
}
- final Long minus = minusValue.evaluate(attributes).getValue();
+ final Number minus = minusValue.evaluate(attributes).getValue();
if (minus == null) {
return new NumberQueryResult(null);
}
- final long result = subjectValue - minus;
+ final Number result;
+ if (subjectValue instanceof Double || minus instanceof Double){
+ result = subjectValue.doubleValue() - minus.doubleValue();
+ } else {
+ result = subjectValue.longValue() - minus.longValue();
+ }
return new NumberQueryResult(result);
}
http://git-wip-us.apache.org/repos/asf/nifi/blob/94ab9990/nifi-commons/nifi-expression-language/src/main/java/org/apache/nifi/attribute/expression/language/evaluation/functions/ModEvaluator.java
----------------------------------------------------------------------
diff --git a/nifi-commons/nifi-expression-language/src/main/java/org/apache/nifi/attribute/expression/language/evaluation/functions/ModEvaluator.java b/nifi-commons/nifi-expression-language/src/main/java/org/apache/nifi/attribute/expression/language/evaluation/functions/ModEvaluator.java
index cf2121c..eb42b3d 100644
--- a/nifi-commons/nifi-expression-language/src/main/java/org/apache/nifi/attribute/expression/language/evaluation/functions/ModEvaluator.java
+++ b/nifi-commons/nifi-expression-language/src/main/java/org/apache/nifi/attribute/expression/language/evaluation/functions/ModEvaluator.java
@@ -25,27 +25,32 @@ import org.apache.nifi.attribute.expression.language.evaluation.QueryResult;
public class ModEvaluator extends NumberEvaluator {
- private final Evaluator<Long> subject;
- private final Evaluator<Long> modValue;
+ private final Evaluator<Number> subject;
+ private final Evaluator<Number> modValue;
- public ModEvaluator(final Evaluator<Long> subject, final Evaluator<Long> modValue) {
+ public ModEvaluator(final Evaluator<Number> subject, final Evaluator<Number> modValue) {
this.subject = subject;
this.modValue = modValue;
}
@Override
- public QueryResult<Long> evaluate(final Map<String, String> attributes) {
- final Long subjectValue = subject.evaluate(attributes).getValue();
+ public QueryResult<Number> evaluate(final Map<String, String> attributes) {
+ final Number subjectValue = subject.evaluate(attributes).getValue();
if (subjectValue == null) {
return new NumberQueryResult(null);
}
- final Long mod = modValue.evaluate(attributes).getValue();
+ final Number mod = modValue.evaluate(attributes).getValue();
if (mod == null) {
return new NumberQueryResult(null);
}
- final long result = subjectValue % mod;
+ final Number result;
+ if (subjectValue instanceof Double || mod instanceof Double){
+ result = subjectValue.doubleValue() % mod.doubleValue();
+ } else {
+ result = subjectValue.longValue() % mod.longValue();
+ }
return new NumberQueryResult(result);
}
http://git-wip-us.apache.org/repos/asf/nifi/blob/94ab9990/nifi-commons/nifi-expression-language/src/main/java/org/apache/nifi/attribute/expression/language/evaluation/functions/MultiplyEvaluator.java
----------------------------------------------------------------------
diff --git a/nifi-commons/nifi-expression-language/src/main/java/org/apache/nifi/attribute/expression/language/evaluation/functions/MultiplyEvaluator.java b/nifi-commons/nifi-expression-language/src/main/java/org/apache/nifi/attribute/expression/language/evaluation/functions/MultiplyEvaluator.java
index 4480c98..3d98ddd 100644
--- a/nifi-commons/nifi-expression-language/src/main/java/org/apache/nifi/attribute/expression/language/evaluation/functions/MultiplyEvaluator.java
+++ b/nifi-commons/nifi-expression-language/src/main/java/org/apache/nifi/attribute/expression/language/evaluation/functions/MultiplyEvaluator.java
@@ -25,27 +25,32 @@ import org.apache.nifi.attribute.expression.language.evaluation.QueryResult;
public class MultiplyEvaluator extends NumberEvaluator {
- private final Evaluator<Long> subject;
- private final Evaluator<Long> multiplyValue;
+ private final Evaluator<Number> subject;
+ private final Evaluator<Number> multiplyValue;
- public MultiplyEvaluator(final Evaluator<Long> subject, final Evaluator<Long> multiplyValue) {
+ public MultiplyEvaluator(final Evaluator<Number> subject, final Evaluator<Number> multiplyValue) {
this.subject = subject;
this.multiplyValue = multiplyValue;
}
@Override
- public QueryResult<Long> evaluate(final Map<String, String> attributes) {
- final Long subjectValue = subject.evaluate(attributes).getValue();
+ public QueryResult<Number> evaluate(final Map<String, String> attributes) {
+ final Number subjectValue = subject.evaluate(attributes).getValue();
if (subjectValue == null) {
return new NumberQueryResult(null);
}
- final Long multiply = multiplyValue.evaluate(attributes).getValue();
+ final Number multiply = multiplyValue.evaluate(attributes).getValue();
if (multiply == null) {
return new NumberQueryResult(null);
}
- final long result = subjectValue * multiply;
+ final Number result;
+ if (subjectValue instanceof Double || multiply instanceof Double){
+ result = subjectValue.doubleValue() * multiply.doubleValue();
+ } else {
+ result = subjectValue.longValue() * multiply.longValue();
+ }
return new NumberQueryResult(result);
}
http://git-wip-us.apache.org/repos/asf/nifi/blob/94ab9990/nifi-commons/nifi-expression-language/src/main/java/org/apache/nifi/attribute/expression/language/evaluation/functions/OneUpSequenceEvaluator.java
----------------------------------------------------------------------
diff --git a/nifi-commons/nifi-expression-language/src/main/java/org/apache/nifi/attribute/expression/language/evaluation/functions/OneUpSequenceEvaluator.java b/nifi-commons/nifi-expression-language/src/main/java/org/apache/nifi/attribute/expression/language/evaluation/functions/OneUpSequenceEvaluator.java
index 11d3fa9..5c507d6 100644
--- a/nifi-commons/nifi-expression-language/src/main/java/org/apache/nifi/attribute/expression/language/evaluation/functions/OneUpSequenceEvaluator.java
+++ b/nifi-commons/nifi-expression-language/src/main/java/org/apache/nifi/attribute/expression/language/evaluation/functions/OneUpSequenceEvaluator.java
@@ -20,17 +20,17 @@ import java.util.Map;
import java.util.concurrent.atomic.AtomicLong;
import org.apache.nifi.attribute.expression.language.evaluation.Evaluator;
-import org.apache.nifi.attribute.expression.language.evaluation.NumberEvaluator;
-import org.apache.nifi.attribute.expression.language.evaluation.NumberQueryResult;
import org.apache.nifi.attribute.expression.language.evaluation.QueryResult;
+import org.apache.nifi.attribute.expression.language.evaluation.WholeNumberEvaluator;
+import org.apache.nifi.attribute.expression.language.evaluation.WholeNumberQueryResult;
-public class OneUpSequenceEvaluator extends NumberEvaluator {
+public class OneUpSequenceEvaluator extends WholeNumberEvaluator {
private static final AtomicLong value = new AtomicLong(0L);
@Override
public QueryResult<Long> evaluate(final Map<String, String> attributes) {
- return new NumberQueryResult(value.getAndIncrement());
+ return new WholeNumberQueryResult(value.getAndIncrement());
}
@Override