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:31 UTC
[06/19] jena git commit: ARQ:Query:ParameterizedSparqlString - need
for parenthesis in ungrouped values now determined based on the query rather
than as a parameter.
ARQ:Query:ParameterizedSparqlString - need for parenthesis in ungrouped values now determined based on the query rather than as a parameter.
Project: http://git-wip-us.apache.org/repos/asf/jena/repo
Commit: http://git-wip-us.apache.org/repos/asf/jena/commit/ecaf8d8b
Tree: http://git-wip-us.apache.org/repos/asf/jena/tree/ecaf8d8b
Diff: http://git-wip-us.apache.org/repos/asf/jena/diff/ecaf8d8b
Branch: refs/heads/master
Commit: ecaf8d8bf08be57146c4f52b03117f4dd39f45a2
Parents: a5f18c3
Author: Greg Albiston <gr...@hotmail.com>
Authored: Mon Jul 30 16:13:12 2018 +0100
Committer: Greg Albiston <gr...@hotmail.com>
Committed: Mon Jul 30 16:13:12 2018 +0100
----------------------------------------------------------------------
.../jena/query/ParameterizedSparqlString.java | 114 +++++++------------
.../query/TestParameterizedSparqlString.java | 18 +--
2 files changed, 41 insertions(+), 91 deletions(-)
----------------------------------------------------------------------
http://git-wip-us.apache.org/repos/asf/jena/blob/ecaf8d8b/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 cba1e6d..3acac63 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
@@ -1741,19 +1741,6 @@ public class ParameterizedSparqlString implements PrefixMapping {
}
/**
- * Assign a varName with a multiple items and whether to include
- * parenthesis.
- *
- * @param varName
- * @param items
- * @param isParenthesisNeeded
- */
- public void setValues(String varName, Collection<? extends RDFNode> items, boolean isParenthesisNeeded) {
- items.forEach(item -> validateParameterValue(item.asNode()));
- this.valuesReplacements.put(varName, new ValueReplacement(varName, items, isParenthesisNeeded));
- }
-
- /**
* Assign a varName with a multiple items.<br>
* 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>
@@ -1763,69 +1750,31 @@ public class ParameterizedSparqlString implements PrefixMapping {
* @param items
*/
public void setValues(String varName, Collection<? extends RDFNode> items) {
- setValues(varName, items, false);
- }
-
- /**
- * Assign a varName with a single item and whether to include parenthesis.
- *
- * @param varName
- * @param item
- * @param isParenthesisNeeded
- */
- public void setValues(String varName, RDFNode item, boolean isParenthesisNeeded) {
- setValues(varName, Arrays.asList(item), isParenthesisNeeded);
+ items.forEach(item -> validateParameterValue(item.asNode()));
+ this.valuesReplacements.put(varName, new ValueReplacement(varName, items));
}
/**
- * Assign a varName with a single item.
+ * Assign a varName with a single item.<br>
*
* @param varName
* @param item
*/
public void setValues(String varName, RDFNode item) {
- setValues(varName, Arrays.asList(item), false);
- }
-
- /**
- * Sets a map of varNames and their items.
- *
- * @param valuesItems
- */
- public void setValues(Map<String, Collection<? extends RDFNode>> valuesItems) {
- valuesItems.forEach(this::setValues);
+ setValues(varName, Arrays.asList(item));
}
/**
- * All varNames in the map will use the same approach to parenthesis.
- *
- * @param valuesItems
- * @param isParenthesisNeeded
- */
- public void setValues(Map<String, Collection<? extends RDFNode>> valuesItems, Boolean isParenthesisNeeded) {
- valuesItems.forEach((varName, items) -> setValues(varName, items, isParenthesisNeeded));
- }
-
- /**
- * Combine a map of varNames and items with whether to include parenthesis.
- * Missing varNames in the parenthesis map will default to false.
+ * **
+ * Sets a map of varNames and their items.<br>
+ * 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.
*
- * @param valuesItems
- * @param valuesParenthesis
+ * @param itemsMap
*/
- public void setValues(Map<String, Collection<? extends RDFNode>> valuesItems, Map<String, Boolean> valuesParenthesis) {
-
- for (String varName : valuesItems.keySet()) {
- Collection<? extends RDFNode> items = valuesItems.get(varName);
- Boolean isParenthesisNeeded;
- if (valuesParenthesis.containsKey(varName)) {
- isParenthesisNeeded = valuesParenthesis.get(varName);
- } else {
- isParenthesisNeeded = false;
- }
-
- setValues(varName, items, isParenthesisNeeded);
- }
+ public void setValues(Map<String, Collection<? extends RDFNode>> itemsMap) {
+ itemsMap.forEach(this::setValues);
}
/**
@@ -1835,11 +1784,11 @@ public class ParameterizedSparqlString implements PrefixMapping {
* (prop_B obj_B)}".
*
* @param varName
- * @param items
+ * @param groupedItems
*/
- public void setGroupedValues(String varName, Collection<List<? extends RDFNode>> items) {
- items.forEach(collection -> collection.forEach(item -> validateParameterValue(item.asNode())));
- this.valuesReplacements.put(varName, new ValueReplacement(varName, items));
+ public void setGroupedValues(String varName, Collection<List<? extends RDFNode>> groupedItems) {
+ groupedItems.forEach(collection -> collection.forEach(item -> validateParameterValue(item.asNode())));
+ this.valuesReplacements.put(varName, new ValueReplacement(varName, groupedItems, true));
}
private String applyValues(String command) {
@@ -1868,6 +1817,22 @@ public class ParameterizedSparqlString implements PrefixMapping {
return targetVars;
}
+ protected static boolean checkParenthesis(String command, String varName) {
+ boolean isNeeded;
+
+ 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);
+ isNeeded = vars.contains("(");
+ } else {
+ isNeeded = false;
+ }
+ return isNeeded;
+ }
+
/**
* Performs replacement of VALUES in query string.
*
@@ -1877,23 +1842,20 @@ public class ParameterizedSparqlString implements PrefixMapping {
private final String varName;
private final Collection<? extends RDFNode> items;
private final Collection<List<? extends RDFNode>> groupedItems;
- private final Boolean isParenthesisNeeded;
private final Boolean isGrouped;
- public ValueReplacement(String varName, Collection<? extends RDFNode> items, Boolean isParenthesisNeeded) {
+ public ValueReplacement(String varName, Collection<? extends RDFNode> items) {
this.varName = varName;
this.items = items;
this.groupedItems = new ArrayList<>();
- this.isParenthesisNeeded = isParenthesisNeeded;
this.isGrouped = false;
}
- public ValueReplacement(String varName, Collection<List<? extends RDFNode>> groupedItems) {
+ public ValueReplacement(String varName, Collection<List<? extends RDFNode>> groupedItems, Boolean isGrouped) {
this.varName = varName;
this.items = new ArrayList<>();
this.groupedItems = groupedItems;
- this.isParenthesisNeeded = true;
- this.isGrouped = true;
+ this.isGrouped = isGrouped;
}
public String apply(String command) {
@@ -1910,7 +1872,8 @@ public class ParameterizedSparqlString implements PrefixMapping {
if (isGrouped) {
replacement = groupedApply();
} else {
- replacement = ungroupedApply();
+
+ replacement = ungroupedApply(command);
}
return command.replace(target, replacement);
@@ -1936,7 +1899,8 @@ public class ParameterizedSparqlString implements PrefixMapping {
return replacement;
}
- private StringBuilder ungroupedApply() {
+ private StringBuilder ungroupedApply(String command) {
+ boolean isParenthesisNeeded = checkParenthesis(command, varName);
StringBuilder replacement = new StringBuilder("");
for (RDFNode item : items) {
http://git-wip-us.apache.org/repos/asf/jena/blob/ecaf8d8b/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 90e5385..adf1108 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
@@ -1942,20 +1942,6 @@ public class TestParameterizedSparqlString {
}
@Test
- public void test_set_values_item_parenthesis() {
- // Tests a single value with parenthesis.
- String str = "SELECT * WHERE { VALUES ?o {?objs} ?s ?p ?o }";
- ParameterizedSparqlString pss = new ParameterizedSparqlString(str);
- pss.setValues("objs", ResourceFactory.createPlainLiteral("test"), true);
-
- String exp = "SELECT * WHERE { VALUES ?o {(\"test\")} ?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_items() {
// Tests two values for same variable.
String str = "SELECT * WHERE { VALUES ?o {?objs} ?s ?p ?o }";
@@ -1980,7 +1966,7 @@ public class TestParameterizedSparqlString {
List<RDFNode> objs = new ArrayList<>();
objs.add(ResourceFactory.createPlainLiteral("obj_A"));
objs.add(ResourceFactory.createPlainLiteral("obj_B"));
- pss.setValues("objs", objs, true);
+ pss.setValues("objs", objs);
String exp = "SELECT * WHERE { VALUES (?o) {(\"obj_A\") (\"obj_B\")} ?s ?p ?o }";
String res = pss.toString();
@@ -2024,7 +2010,7 @@ public class TestParameterizedSparqlString {
List<RDFNode> props = new ArrayList<>();
props.add(ResourceFactory.createProperty("http://example.org/prop_A"));
props.add(ResourceFactory.createProperty("http://example.org/prop_B"));
- pss.setValues("props", props, true);
+ pss.setValues("props", props);
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();