ED2 KC- Found number when expecting Boolean parsing expression
Background
This is a validation error with a root cause of invalid indicator expressions
Resolution
Find and fix the invalid indicator expressions. Use the related Example Logs and SQL Example below to assist.
Example Logs
WARN 2021-07-01T06:46:48,436 Found number when expecting Boolean parsing expression '#{zXkIduhPT8m} || #{VkD5N9YEAsd} || #{SZf5lIxFg3x} || #{P947ZHQM0wt} || #{SvEC0WHWCep}' (DefaultExpressionService.java [http-nio2-8081-exec-92])
WARN 2021-07-01T06:46:48,438 Found number when expecting Boolean parsing expression '#{nTYDCVhSPcw} || #{CpQMfnShS07} || #{EmgZ1sWKbAM} || #{dJsuwFqYnxa} || #{bJgEMVTWWyr}' (DefaultExpressionService.java [http-nio2-8081-exec-92])
ERROR 2021-07-01T06:46:48,441 Error while executing action (ExceptionInterceptor.java [http-nio2-8081-exec-92])
java.lang.NullPointerException: null
at org.hisp.dhis.antlr.ParserErrorListener.syntaxError(ParserErrorListener.java:51) ~[dhis-antlr-expression-parser-1.0.13.jar:?]
at org.antlr.v4.runtime.ProxyErrorListener.syntaxError(ProxyErrorListener.java:41) ~[antlr4-runtime-4.7.2.jar:4.7.2]
at org.antlr.v4.runtime.Lexer.notifyListeners(Lexer.java:364) ~[antlr4-runtime-4.7.2.jar:4.7.2]
at org.antlr.v4.runtime.Lexer.nextToken(Lexer.java:144) ~[antlr4-runtime-4.7.2.jar:4.7.2]
at org.antlr.v4.runtime.BufferedTokenStream.fetch(BufferedTokenStream.java:169) ~[antlr4-runtime-4.7.2.jar:4.7.2]
at org.antlr.v4.runtime.BufferedTokenStream.sync(BufferedTokenStream.java:152) ~[antlr4-runtime-4.7.2.jar:4.7.2]
at org.antlr.v4.runtime.BufferedTokenStream.setup(BufferedTokenStream.java:254) ~[antlr4-runtime-4.7.2.jar:4.7.2]
at org.antlr.v4.runtime.BufferedTokenStream.lazyInit(BufferedTokenStream.java:249) ~[antlr4-runtime-4.7.2.jar:4.7.2]
at org.antlr.v4.runtime.CommonTokenStream.LT(CommonTokenStream.java:92) ~[antlr4-runtime-4.7.2.jar:4.7.2]
at org.antlr.v4.runtime.Parser.enterRule(Parser.java:628) ~[antlr4-runtime-4.7.2.jar:4.7.2]
at org.hisp.dhis.parser.expression.antlr.ExpressionParser.expression(ExpressionParser.java:195) ~[dhis-antlr-expression-parser-1.0.13.jar:?]
at org.hisp.dhis.antlr.Parser.createParseTree(Parser.java:176) ~[dhis-antlr-expression-parser-1.0.13.jar:?]
at org.hisp.dhis.antlr.Parser.access$000(Parser.java:52) ~[dhis-antlr-expression-parser-1.0.13.jar:?]
at org.hisp.dhis.antlr.Parser$1.getValue(Parser.java:147) ~[dhis-antlr-expression-parser-1.0.13.jar:?]
at org.hisp.dhis.antlr.Parser$1.getValue(Parser.java:143) ~[dhis-antlr-expression-parser-1.0.13.jar:?]
at org.hisp.dhis.antlr.cache.LocalCache.get(LocalCache.java:103) ~[dhis-antlr-expression-parser-1.0.13.jar:?]
at org.hisp.dhis.antlr.Parser.getParseTree(Parser.java:142) ~[dhis-antlr-expression-parser-1.0.13.jar:?]
at org.hisp.dhis.antlr.Parser.visit(Parser.java:98) ~[dhis-antlr-expression-parser-1.0.13.jar:?]
at org.hisp.dhis.expression.DefaultExpressionService.visit(DefaultExpressionService.java:737) ~[dhis-service-core-2.34.6.jar:?]
at org.hisp.dhis.expression.DefaultExpressionService.getExpressionDimensionalItemIds(DefaultExpressionService.java:721) ~[dhis-service-core-2.34.6.jar:?]
at org.hisp.dhis.expression.DefaultExpressionService.getExpressionDimensionalItemIds(DefaultExpressionService.java:546) ~[dhis-service-core-2.34.6.jar:?]
at org.hisp.dhis.expression.DefaultExpressionService.getExpressionElementAndOptionComboIds(DefaultExpressionService.java:470) ~[dhis-service-core-2.34.6.jar:?]
SQL to indicate the offending expression
Note: this example is using the UIDs from the Example Logs above ☝
select v.uid, v.name
from validationrule v
left join "expression" le on v.leftexpressionid = le.expressionid
left join "expression" re on v.rightexpressionid = re.expressionid
where le."expression" like '%#{zXkIduhPT8m} || #{VkD5N9YEAsd} || #{SZf5lIxFg3x} || #{P947ZHQM0wt} || #{SvEC0WHWCep}%'
or re."expression" like '%#{zXkIduhPT8m} || #{VkD5N9YEAsd} || #{SZf5lIxFg3x} || #{P947ZHQM0wt} || #{SvEC0WHWCep}%';