diff options
author | 2024-11-21 18:05:05 +0000 | |
---|---|---|
committer | 2024-11-25 18:00:28 +0000 | |
commit | 1ea72e9c1dff6b1fcdd584362d1d2aaa1d9ce28d (patch) | |
tree | 983642f2ca867971f2c4c168ef31bc2635752cc7 /cps-path-parser/src/main/java/org/onap | |
parent | 295495b3f4376f42c5788e89725aef0466a8a578 (diff) |
[Cps Path Parser] Don't quote numbers in comparison
Presently, Cps Path Parser will wrap numbers in quotes when
normalizing or getting parent path, which can lead to invalid paths.
For example:
/books[@price > 15]
will be normalized to:
/books[@price>'15']
This causes trouble when running queries on normalized paths:
(CpsPathException: "can use only > with integer")
Note this patch will still normalize numbers to string for equality:
/books[@price='15']
Much existing code relies on this, and it does not cause problems.
Issue-ID: CPS-2365
Signed-off-by: danielhanrahan <daniel.hanrahan@est.tech>
Change-Id: I15d326ad7db2311b64c636283a4d52623a125176
Diffstat (limited to 'cps-path-parser/src/main/java/org/onap')
-rw-r--r-- | cps-path-parser/src/main/java/org/onap/cps/cpspath/parser/CpsPathBuilder.java | 16 |
1 files changed, 10 insertions, 6 deletions
diff --git a/cps-path-parser/src/main/java/org/onap/cps/cpspath/parser/CpsPathBuilder.java b/cps-path-parser/src/main/java/org/onap/cps/cpspath/parser/CpsPathBuilder.java index ed7dbecc18..b67d70847c 100644 --- a/cps-path-parser/src/main/java/org/onap/cps/cpspath/parser/CpsPathBuilder.java +++ b/cps-path-parser/src/main/java/org/onap/cps/cpspath/parser/CpsPathBuilder.java @@ -180,12 +180,12 @@ public class CpsPathBuilder extends CpsPathBaseListener { if (!isStartOfExpression) { currentNormalizedPathBuilder.append(" ").append(getLastElement(booleanOperators)).append(" "); } - currentNormalizedPathBuilder.append("@") - .append(name) - .append(operator) - .append("'") - .append(value.toString().replace("'", "''")) - .append("'"); + currentNormalizedPathBuilder.append("@").append(name).append(operator); + if (operator.equals("=")) { + currentNormalizedPathBuilder.append(wrapValueInSingleQuotes(value)); + } else { + currentNormalizedPathBuilder.append(value); + } } private static String getLastElement(final List<String> listOfStrings) { @@ -202,6 +202,10 @@ public class CpsPathBuilder extends CpsPathBaseListener { } } + private static String wrapValueInSingleQuotes(final Object value) { + return "'" + value.toString().replace("'", "''") + "'"; + } + private static String stripFirstAndLastCharacter(final String wrappedString) { return wrappedString.substring(1, wrappedString.length() - 1); } |