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);
     }