You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@jena.apache.org by an...@apache.org on 2018/08/05 15:33:37 UTC
[12/19] jena git commit: ARQ:Query:ParameterizedSparqlString -
"extractTargetVars" method now checks for missing VALUES keyword and braces.
Additional test cases added.
ARQ:Query:ParameterizedSparqlString
- "extractTargetVars" method now checks for missing VALUES keyword and braces. Additional test cases added.
Project: http://git-wip-us.apache.org/repos/asf/jena/repo
Commit: http://git-wip-us.apache.org/repos/asf/jena/commit/ec242ef1
Tree: http://git-wip-us.apache.org/repos/asf/jena/tree/ec242ef1
Diff: http://git-wip-us.apache.org/repos/asf/jena/diff/ec242ef1
Branch: refs/heads/master
Commit: ec242ef1ffc5cf081f5e8652dd72c4b8002f7b32
Parents: 856e06c
Author: Greg Albiston <gr...@hotmail.com>
Authored: Thu Aug 2 14:24:00 2018 +0100
Committer: Greg Albiston <gr...@hotmail.com>
Committed: Thu Aug 2 14:24:00 2018 +0100
----------------------------------------------------------------------
.../jena/query/ParameterizedSparqlString.java | 18 ++--
.../query/TestParameterizedSparqlString.java | 94 ++++++++++++++++++--
2 files changed, 98 insertions(+), 14 deletions(-)
----------------------------------------------------------------------
http://git-wip-us.apache.org/repos/asf/jena/blob/ec242ef1/jena-arq/src/main/java/org/apache/jena/query/ParameterizedSparqlString.java
----------------------------------------------------------------------
diff --git a/jena-arq/src/main/java/org/apache/jena/query/ParameterizedSparqlString.java b/jena-arq/src/main/java/org/apache/jena/query/ParameterizedSparqlString.java
index c3b3857..b65106e 100644
--- a/jena-arq/src/main/java/org/apache/jena/query/ParameterizedSparqlString.java
+++ b/jena-arq/src/main/java/org/apache/jena/query/ParameterizedSparqlString.java
@@ -1816,17 +1816,18 @@ public class ParameterizedSparqlString implements PrefixMapping {
private static final String VALUES_KEYWORD = "values";
protected static String[] extractTargetVars(String command, String varName) {
- String[] targetVars;
+ String[] targetVars = new String[]{};
int varIndex = command.indexOf(varName);
if (varIndex > -1) {
String subCmd = command.substring(0, varIndex).toLowerCase(); //Truncate the command at the varName. Lowercase to search both types of values.
int valuesIndex = subCmd.lastIndexOf(VALUES_KEYWORD);
- int bracesIndex = subCmd.lastIndexOf("{");
- String vars = command.substring(valuesIndex + VALUES_KEYWORD.length(), bracesIndex);
- targetVars = vars.replaceAll("[(?)]", "").trim().split(" ");
- } else {
- targetVars = new String[]{};
+ int openBracesIndex = subCmd.lastIndexOf("{");
+ int closeBracesIndex = subCmd.lastIndexOf("}");
+ if (valuesIndex > -1 && valuesIndex < openBracesIndex && closeBracesIndex < valuesIndex) { //Ensure that VALUES keyword is found, open braces index is located after the VALUES and any close braces is located before the VALUES.
+ String vars = command.substring(valuesIndex + VALUES_KEYWORD.length(), openBracesIndex);
+ targetVars = vars.replaceAll("[(?)]", "").trim().split(" ");
+ }
}
return targetVars;
}
@@ -1852,6 +1853,11 @@ public class ParameterizedSparqlString implements PrefixMapping {
}
String[] targetVars = extractTargetVars(command, varName);
+ if (targetVars.length == 0) {
+ //VALUES keyword has not been found or there is another issue so do not modify the command.
+ return command;
+ }
+
validateValuesSafeToInject(command, targetVars);
String target = createTarget();
http://git-wip-us.apache.org/repos/asf/jena/blob/ec242ef1/jena-arq/src/test/java/org/apache/jena/query/TestParameterizedSparqlString.java
----------------------------------------------------------------------
diff --git a/jena-arq/src/test/java/org/apache/jena/query/TestParameterizedSparqlString.java b/jena-arq/src/test/java/org/apache/jena/query/TestParameterizedSparqlString.java
index 1cf3312..6f174fb 100644
--- a/jena-arq/src/test/java/org/apache/jena/query/TestParameterizedSparqlString.java
+++ b/jena-arq/src/test/java/org/apache/jena/query/TestParameterizedSparqlString.java
@@ -1992,8 +1992,8 @@ public class TestParameterizedSparqlString {
String exp = "SELECT * WHERE { VALUES ?p {(<http://example.org/prop_A>) (<http://example.org/prop_B>)} VALUES ?o {(\"obj_A\") (\"obj_B\")} ?s ?p ?o }";
String res = pss.toString();
- System.out.println("Exp: " + exp);
- System.out.println("Res: " + res);
+ //System.out.println("Exp: " + exp);
+ //System.out.println("Res: " + res);
Assert.assertEquals(exp, res);
}
@@ -2042,8 +2042,8 @@ public class TestParameterizedSparqlString {
String[] res = ParameterizedSparqlString.extractTargetVars(cmd, varName);
String[] exp = new String[]{"o"};
- //System.out.println("Exp: " + exp);
- //System.out.println("Res: " + res);
+ //System.out.println("Exp: " + String.join(",", exp));
+ //System.out.println("Res: " + String.join(",", res));
Assert.assertArrayEquals(exp, res);
}
@@ -2055,8 +2055,8 @@ public class TestParameterizedSparqlString {
String[] res = ParameterizedSparqlString.extractTargetVars(cmd, varName);
String[] exp = new String[]{"p", "o"};
- //System.out.println("Exp: " + exp);
- //System.out.println("Res: " + res);
+ ///System.out.println("Exp: " + String.join(",", exp));
+ //System.out.println("Res: " + String.join(",", res));
Assert.assertArrayEquals(exp, res);
}
@@ -2068,8 +2068,86 @@ public class TestParameterizedSparqlString {
String[] res = ParameterizedSparqlString.extractTargetVars(cmd, varName);
String[] exp = new String[]{"o"};
- //System.out.println("Exp: " + exp);
- //System.out.println("Res: " + res);
+ //System.out.println("Exp: " + String.join(",", exp));
+ //System.out.println("Res: " + String.join(",", res));
+ Assert.assertArrayEquals(exp, res);
+ }
+
+ @Test
+ public void test_extract_target_vars_missing_target() {
+ // Missing target variable name so should return empty array.
+ String cmd = "SELECT * WHERE { VALUES ?o {} ?s ?p ?o }";
+ String varName = "objs";
+ String[] res = ParameterizedSparqlString.extractTargetVars(cmd, varName);
+ String[] exp = new String[]{};
+
+ //System.out.println("Exp: " + String.join(",", exp));
+ //System.out.println("Res: " + String.join(",", res));
+ Assert.assertArrayEquals(exp, res);
+ }
+
+ @Test
+ public void test_extract_target_vars_missing_brace() {
+ // Missing brace so should return empty array.
+ String cmd = "SELECT * WHERE { VALUES ?o ?objs} ?s ?p ?o }";
+ String varName = "objs";
+ String[] res = ParameterizedSparqlString.extractTargetVars(cmd, varName);
+ String[] exp = new String[]{};
+
+ //System.out.println("Exp: " + String.join(",", exp));
+ //System.out.println("Res: " + String.join(",", res));
+ Assert.assertArrayEquals(exp, res);
+ }
+
+ @Test
+ public void test_extract_multiple_target_vars_missing_brace() {
+ // Missing brace so should return empty array.
+ String cmd = "SELECT * WHERE { VALUES ?p {?props} VALUES ?o ?objs} ?s ?p ?o }";
+ String varName = "objs";
+ String[] res = ParameterizedSparqlString.extractTargetVars(cmd, varName);
+ String[] exp = new String[]{};
+
+ //System.out.println("Exp: " + String.join(",", exp));
+ //System.out.println("Res: " + String.join(",", res));
+ Assert.assertArrayEquals(exp, res);
+ }
+
+ @Test
+ public void test_extract_target_vars_missing_values() {
+ // Missing VALUES keyword so should return empty array.
+ String cmd = "SELECT * WHERE { ?o {?objs} ?s ?p ?o }";
+ String varName = "objs";
+ String[] res = ParameterizedSparqlString.extractTargetVars(cmd, varName);
+ String[] exp = new String[]{};
+
+ //System.out.println("Exp: " + String.join(",", exp));
+ //System.out.println("Res: " + String.join(",", res));
+ Assert.assertArrayEquals(exp, res);
+ }
+
+ @Test
+ public void test_extract_multiple_target_vars_missing_values() {
+ // Missing VALUES keyword so should return empty array.
+ String cmd = "SELECT * WHERE { VALUES ?p {?props} ?o {?objs} ?s ?p ?o }";
+ String varName = "objs";
+ String[] res = ParameterizedSparqlString.extractTargetVars(cmd, varName);
+ String[] exp = new String[]{};
+
+ //System.out.println("Exp: " + String.join(",", exp));
+ //System.out.println("Res: " + String.join(",", res));
+ Assert.assertArrayEquals(exp, res);
+ }
+
+ @Test
+ public void test_extract_multiple_target_vars_no_braces() {
+ // Missing braces and VALUES keyword so should return empty array.
+ String cmd = "SELECT * WHERE { VALUES ?p ?props ?o ?objs ?s ?p ?o }";
+ String varName = "objs";
+ String[] res = ParameterizedSparqlString.extractTargetVars(cmd, varName);
+ String[] exp = new String[]{};
+
+ //System.out.println("Exp: " + String.join(",", exp));
+ //System.out.println("Res: " + String.join(",", res));
Assert.assertArrayEquals(exp, res);
}