aboutsummaryrefslogtreecommitdiffstats
path: root/cps-path-parser/src/main/java/org/onap
diff options
context:
space:
mode:
authordanielhanrahan <daniel.hanrahan@est.tech>2024-11-21 18:05:05 +0000
committerdanielhanrahan <daniel.hanrahan@est.tech>2024-11-25 18:00:28 +0000
commit1ea72e9c1dff6b1fcdd584362d1d2aaa1d9ce28d (patch)
tree983642f2ca867971f2c4c168ef31bc2635752cc7 /cps-path-parser/src/main/java/org/onap
parent295495b3f4376f42c5788e89725aef0466a8a578 (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.java16
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);
}