fix: cast numeric type in SqlLiteral [DHIS2-13925]
https://dhis2.atlassian.net/browse/DHIS2-13925
Issue
- User create programIndicator with expression "22/10"
- Expected result returned by
api/analyticis "2.2". However "2" is returned.
Fix
- The Expression parser doesn't have
::numericcast in the sql query. Therefore, a select statementselect 22/10" in postgresql will always return "2". We need to cast either "22" or "10" tonumeric` so postgreSQL will not ignore the decimal. - The expected sql query generated should be
select 22::numeric/10::numeric - I have add a new
NumericLiteralwhich donumericcast if the expression contains a math equation which matches regex pattern"^[0-9+\\-*/]+$"
Quality Gate passed
Issues
0 New issues
0 Accepted issues
Measures
0 Security Hotspots
0.0% Coverage on New Code
0.0% Duplication on New Code
Quality Gate passed
Issues
0 New issues
0 Accepted issues
Measures
0 Security Hotspots
0.0% Coverage on New Code
0.0% Duplication on New Code
Quality Gate passed
Issues
0 New issues
0 Accepted issues
Measures
0 Security Hotspots
0.0% Coverage on New Code
0.0% Duplication on New Code
Quality Gate passed
Issues
0 New issues
0 Accepted issues
Measures
0 Security Hotspots
0.0% Coverage on New Code
0.0% Duplication on New Code
Quality Gate passed
Issues
0 New issues
0 Accepted issues
Measures
0 Security Hotspots
0.0% Coverage on New Code
0.0% Duplication on New Code
Closing this PR can't be merged because it contains unsigned commit. Create a new one here https://github.com/dhis2/dhis2-core/pull/20162