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:34 UTC
[09/19] jena git commit: ARQ:Query:ParameterizedSparqlString -
parenthesis now always applied when there is more than one target variables.
Only check the query for parenthesis in the single target variable case.
ARQ:Query:ParameterizedSparqlString - parenthesis now always applied when there is more than one target variables. Only check the query for parenthesis in the single target variable case.
Project: http://git-wip-us.apache.org/repos/asf/jena/repo
Commit: http://git-wip-us.apache.org/repos/asf/jena/commit/9662ff6e
Tree: http://git-wip-us.apache.org/repos/asf/jena/tree/9662ff6e
Diff: http://git-wip-us.apache.org/repos/asf/jena/diff/9662ff6e
Branch: refs/heads/master
Commit: 9662ff6e7dc57633cfbc78632a596f56f2db3268
Parents: 8b1548c
Author: Greg Albiston <gr...@hotmail.com>
Authored: Mon Jul 30 16:49:37 2018 +0100
Committer: Greg Albiston <gr...@hotmail.com>
Committed: Mon Jul 30 16:49:37 2018 +0100
----------------------------------------------------------------------
.../jena/query/ParameterizedSparqlString.java | 48 ++++++++++++--------
.../query/TestParameterizedSparqlString.java | 17 +++++++
2 files changed, 46 insertions(+), 19 deletions(-)
----------------------------------------------------------------------
http://git-wip-us.apache.org/repos/asf/jena/blob/9662ff6e/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 9a3fae8..8ecc644 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
@@ -1745,8 +1745,8 @@ public class ParameterizedSparqlString implements PrefixMapping {
* Can be used to assign multiple values to a single variable or single
* value to multiple variables (if using a List) in the SPARQL query.<br>
* See setGroupedValues to assign multiple values to multiple variables.<br>
- * Using "var" with list(prop_A, obj_A) on query "VALUES ?p ?o {?var}" would
- * produce "VALUES ?p ?o {prop_A obj_A}".
+ * Using "var" with list(prop_A, obj_A) on query "VALUES (?p ?o) {?var}"
+ * would produce "VALUES (?p ?o) {(prop_A obj_A)}".
*
*
* @param varName
@@ -1868,7 +1868,8 @@ public class ParameterizedSparqlString implements PrefixMapping {
return command;
}
- validateValuesSafeToInject(command);
+ String[] targetVars = extractTargetVars(command, varName);
+ validateValuesSafeToInject(command, targetVars);
String target = createTarget();
@@ -1877,7 +1878,7 @@ public class ParameterizedSparqlString implements PrefixMapping {
replacement = groupedApply();
} else {
- replacement = ungroupedApply(command);
+ replacement = ungroupedApply(command, targetVars.length);
}
return command.replace(target, replacement);
@@ -1903,24 +1904,35 @@ public class ParameterizedSparqlString implements PrefixMapping {
return replacement;
}
- private StringBuilder ungroupedApply(String command) {
- boolean isParenthesisNeeded = checkParenthesis(command, varName);
+ private StringBuilder ungroupedApply(String command, int targetVarCount) {
+
StringBuilder replacement = new StringBuilder("");
- for (RDFNode item : items) {
- if (isParenthesisNeeded) {
- replacement.append("(");
+ if (targetVarCount == 1) {
+ boolean isParenthesisNeeded = checkParenthesis(command, varName);
+ for (RDFNode item : items) {
+ if (isParenthesisNeeded) {
+ replacement.append("(");
+ }
+ String insert = FmtUtils.stringForNode(item.asNode(), (PrefixMapping) null);
+ replacement.append(insert);
+ if (isParenthesisNeeded) {
+ replacement.append(")");
+ }
+ replacement.append(" ");
}
- String insert = FmtUtils.stringForNode(item.asNode(), (PrefixMapping) null);
- replacement.append(insert);
- if (isParenthesisNeeded) {
- replacement.append(")");
+ replacement.deleteCharAt(replacement.length() - 1);
+ } else {
+ replacement.append("(");
+ for (RDFNode item : items) {
+ String insert = FmtUtils.stringForNode(item.asNode(), (PrefixMapping) null);
+ replacement.append(insert);
+ replacement.append(" ");
}
- replacement.append(" ");
+ replacement.deleteCharAt(replacement.length() - 1);
+ replacement.append(")");
}
- replacement.deleteCharAt(replacement.length() - 1);
-
return replacement;
}
@@ -1941,9 +1953,7 @@ public class ParameterizedSparqlString implements PrefixMapping {
return target;
}
- protected void validateValuesSafeToInject(String command) {
-
- String[] targetVars = extractTargetVars(command, varName);
+ protected void validateValuesSafeToInject(String command, String[] targetVars) {
for (int i = 0; i < targetVars.length; i++) {
String targetVar = targetVars[i];
http://git-wip-us.apache.org/repos/asf/jena/blob/9662ff6e/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 adf1108..1dc14ee 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
@@ -1976,6 +1976,23 @@ public class TestParameterizedSparqlString {
}
@Test
+ public void test_set_values_multiple_variables_parenthesis() {
+ // Tests two values for same variable.
+ String str = "SELECT * WHERE { VALUES (?p ?o) {?vars} ?s ?p ?o }";
+ ParameterizedSparqlString pss = new ParameterizedSparqlString(str);
+ List<RDFNode> vars = new ArrayList<>();
+ vars.add(ResourceFactory.createProperty("http://example.org/prop_A"));
+ vars.add(ResourceFactory.createPlainLiteral("obj_A"));
+ pss.setValues("vars", vars);
+
+ String exp = "SELECT * WHERE { VALUES (?p ?o) {(<http://example.org/prop_A> \"obj_A\")} ?s ?p ?o }";
+ String res = pss.toString();
+ System.out.println("Exp: " + exp);
+ System.out.println("Res: " + res);
+ Assert.assertEquals(exp, res);
+ }
+
+ @Test
public void test_set_values_multi_var() {
// Tests two variables.
String str = "SELECT * WHERE { VALUES ?p {?props} VALUES ?o {?objs} ?s ?p ?o }";