mirror of https://github.com/apache/nifi.git
NIFI-1662: Added support for decimal literal in Expression Language
This commit is contained in:
parent
94ab999026
commit
557e0b9f27
|
@ -79,6 +79,13 @@ DOT : '.';
|
||||||
SEMICOLON : ';';
|
SEMICOLON : ';';
|
||||||
WHOLE_NUMBER : ('0'..'9')+;
|
WHOLE_NUMBER : ('0'..'9')+;
|
||||||
|
|
||||||
|
DECIMAL : ('0'..'9')+ '.' ('0'..'9')* EXP?
|
||||||
|
| '.' ('0'..'9')+ EXP?
|
||||||
|
| ('0'..'9')+ EXP
|
||||||
|
| ('0'..'9')+ ;
|
||||||
|
|
||||||
|
fragment EXP : ('e'|'E') ('+'|'-')? ('0'..'9')+ ;
|
||||||
|
|
||||||
TRUE : 'true';
|
TRUE : 'true';
|
||||||
FALSE : 'false';
|
FALSE : 'false';
|
||||||
|
|
||||||
|
|
|
@ -100,7 +100,7 @@ stringFunctionRef : zeroArgString | oneArgString | twoArgString | fiveArgString;
|
||||||
booleanFunctionRef : zeroArgBool | oneArgBool | multiArgBool;
|
booleanFunctionRef : zeroArgBool | oneArgBool | multiArgBool;
|
||||||
numberFunctionRef : zeroArgNum | oneArgNum;
|
numberFunctionRef : zeroArgNum | oneArgNum;
|
||||||
|
|
||||||
anyArg : WHOLE_NUMBER | numberFunctionRef | STRING_LITERAL | zeroArgString | oneArgString | twoArgString | fiveArgString | booleanLiteral | zeroArgBool | oneArgBool | multiArgBool | expression;
|
anyArg : WHOLE_NUMBER | DECIMAL | numberFunctionRef | STRING_LITERAL | zeroArgString | oneArgString | twoArgString | fiveArgString | booleanLiteral | zeroArgBool | oneArgBool | multiArgBool | expression;
|
||||||
stringArg : STRING_LITERAL | zeroArgString | oneArgString | twoArgString | expression;
|
stringArg : STRING_LITERAL | zeroArgString | oneArgString | twoArgString | expression;
|
||||||
functionRef : stringFunctionRef | booleanFunctionRef | numberFunctionRef;
|
functionRef : stringFunctionRef | booleanFunctionRef | numberFunctionRef;
|
||||||
|
|
||||||
|
|
|
@ -97,6 +97,7 @@ 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.Base64EncodeEvaluator;
|
||||||
import org.apache.nifi.attribute.expression.language.evaluation.functions.UuidEvaluator;
|
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.BooleanLiteralEvaluator;
|
||||||
|
import org.apache.nifi.attribute.expression.language.evaluation.literals.DecimalLiteralEvaluator;
|
||||||
import org.apache.nifi.attribute.expression.language.evaluation.literals.StringLiteralEvaluator;
|
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.ToLiteralEvaluator;
|
||||||
import org.apache.nifi.attribute.expression.language.evaluation.literals.WholeNumberLiteralEvaluator;
|
import org.apache.nifi.attribute.expression.language.evaluation.literals.WholeNumberLiteralEvaluator;
|
||||||
|
@ -132,6 +133,7 @@ import static org.apache.nifi.attribute.expression.language.antlr.AttributeExpre
|
||||||
import static org.apache.nifi.attribute.expression.language.antlr.AttributeExpressionParser.ATTRIBUTE_REFERENCE;
|
import static org.apache.nifi.attribute.expression.language.antlr.AttributeExpressionParser.ATTRIBUTE_REFERENCE;
|
||||||
import static org.apache.nifi.attribute.expression.language.antlr.AttributeExpressionParser.ATTR_NAME;
|
import static org.apache.nifi.attribute.expression.language.antlr.AttributeExpressionParser.ATTR_NAME;
|
||||||
import static org.apache.nifi.attribute.expression.language.antlr.AttributeExpressionParser.CONTAINS;
|
import static org.apache.nifi.attribute.expression.language.antlr.AttributeExpressionParser.CONTAINS;
|
||||||
|
import static org.apache.nifi.attribute.expression.language.antlr.AttributeExpressionParser.DECIMAL;
|
||||||
import static org.apache.nifi.attribute.expression.language.antlr.AttributeExpressionParser.IN;
|
import static org.apache.nifi.attribute.expression.language.antlr.AttributeExpressionParser.IN;
|
||||||
import static org.apache.nifi.attribute.expression.language.antlr.AttributeExpressionParser.COUNT;
|
import static org.apache.nifi.attribute.expression.language.antlr.AttributeExpressionParser.COUNT;
|
||||||
import static org.apache.nifi.attribute.expression.language.antlr.AttributeExpressionParser.DIVIDE;
|
import static org.apache.nifi.attribute.expression.language.antlr.AttributeExpressionParser.DIVIDE;
|
||||||
|
@ -680,6 +682,9 @@ public class Query {
|
||||||
case STRING_LITERAL: {
|
case STRING_LITERAL: {
|
||||||
return newStringLiteralEvaluator(tree.getText());
|
return newStringLiteralEvaluator(tree.getText());
|
||||||
}
|
}
|
||||||
|
case DECIMAL: {
|
||||||
|
return new DecimalLiteralEvaluator(tree.getText());
|
||||||
|
}
|
||||||
case TRUE:
|
case TRUE:
|
||||||
case FALSE:
|
case FALSE:
|
||||||
return buildBooleanEvaluator(tree);
|
return buildBooleanEvaluator(tree);
|
||||||
|
|
|
@ -0,0 +1,44 @@
|
||||||
|
/*
|
||||||
|
* 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.literals;
|
||||||
|
|
||||||
|
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.QueryResult;
|
||||||
|
|
||||||
|
import java.util.Map;
|
||||||
|
|
||||||
|
|
||||||
|
public class DecimalLiteralEvaluator extends DecimalEvaluator {
|
||||||
|
|
||||||
|
private final double literal;
|
||||||
|
|
||||||
|
public DecimalLiteralEvaluator(final String value) {
|
||||||
|
this.literal = Double.parseDouble(value);
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public QueryResult<Double> evaluate(final Map<String, String> attributes) {
|
||||||
|
return new DecimalQueryResult(literal);
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public Evaluator<?> getSubjectEvaluator() {
|
||||||
|
return null;
|
||||||
|
}
|
||||||
|
}
|
|
@ -807,6 +807,9 @@ public class TestQuery {
|
||||||
// The expected resulted is calculated instead of a set number due to the inaccuracy of double arithmetic
|
// The expected resulted is calculated instead of a set number due to the inaccuracy of double arithmetic
|
||||||
verifyEquals("${ten:divide(${two:plus(3)}):toDecimal()}", attributes, (10.1 / (2.2 + 3)));
|
verifyEquals("${ten:divide(${two:plus(3)}):toDecimal()}", attributes, (10.1 / (2.2 + 3)));
|
||||||
|
|
||||||
|
// The expected resulted is calculated instead of a set number due to the inaccuracy of double arithmetic
|
||||||
|
verifyEquals("${ten:divide(${two:plus(3.1)}):toDecimal()}", attributes, (10.1 / (2.2 + 3.1)));
|
||||||
|
|
||||||
verifyEquals("${ten:divide(${two:plus(3)}):toDate():format(\"SSS\")}", attributes, "001");
|
verifyEquals("${ten:divide(${two:plus(3)}):toDate():format(\"SSS\")}", attributes, "001");
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
Loading…
Reference in New Issue