Skip to content

Commit 327d7a0

Browse files
author
James Leigh
authored
Merge pull request #891 from jamesrdf/issues/#888-sparql-bindings
Fix #888: Inline variable bindings for non-tuple SPARQL operations
2 parents 9a2471f + 735669b commit 327d7a0

5 files changed

Lines changed: 68 additions & 4 deletions

File tree

core/repository/sparql/src/main/java/org/eclipse/rdf4j/repository/sparql/query/QueryStringUtil.java

Lines changed: 64 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -35,8 +35,22 @@ public class QueryStringUtil {
3535
* @param queryString
3636
* @param bindings
3737
* @return the modified queryString
38+
* @deprecated since 2.3 use {@link #getTupleQueryString(String, BindingSet)}
3839
*/
40+
@Deprecated
3941
public static String getQueryString(String queryString, BindingSet bindings) {
42+
return getTupleQueryString(queryString, bindings);
43+
}
44+
45+
/**
46+
* Retrieve a modified queryString into which all bindings of the given argument are replaced, with the
47+
* binding names included in the SELECT clause.
48+
*
49+
* @param queryString
50+
* @param bindings
51+
* @return the modified queryString
52+
*/
53+
public static String getTupleQueryString(String queryString, BindingSet bindings) {
4054
if (bindings.size() == 0) {
4155
return queryString;
4256
}
@@ -61,6 +75,56 @@ public static String getQueryString(String queryString, BindingSet bindings) {
6175
return select + where;
6276
}
6377

78+
/**
79+
* Retrieve a modified queryString into which all bindings of the given argument are replaced with their
80+
* value.
81+
*
82+
* @param queryString
83+
* @param bindings
84+
* @return the modified queryString
85+
*/
86+
public static String getUpdateString(String queryString, BindingSet bindings) {
87+
return getGraphQueryString(queryString, bindings);
88+
}
89+
90+
/**
91+
* Retrieve a modified queryString into which all bindings of the given argument are replaced with their
92+
* value.
93+
*
94+
* @param queryString
95+
* @param bindings
96+
* @return the modified queryString
97+
*/
98+
public static String getBooleanQueryString(String queryString, BindingSet bindings) {
99+
return getGraphQueryString(queryString, bindings);
100+
}
101+
102+
/**
103+
* Retrieve a modified queryString into which all bindings of the given argument are replaced with their
104+
* value.
105+
*
106+
* @param queryString
107+
* @param bindings
108+
* @return the modified queryString
109+
*/
110+
public static String getGraphQueryString(String queryString, BindingSet bindings) {
111+
if (bindings.size() == 0) {
112+
return queryString;
113+
}
114+
115+
String qry = queryString;
116+
for (String name : bindings.getBindingNames()) {
117+
String replacement = getReplacement(bindings.getValue(name));
118+
if (replacement != null) {
119+
String pattern = "[\\?\\$]" + name + "(?=\\W)";
120+
// we use Matcher.quoteReplacement to make sure things like newlines
121+
// in literal values are preserved
122+
qry = qry.replaceAll(pattern, Matcher.quoteReplacement(replacement));
123+
}
124+
}
125+
return qry;
126+
}
127+
64128
private static String getReplacement(Value value) {
65129
StringBuilder sb = new StringBuilder();
66130
if (value instanceof IRI) {

core/repository/sparql/src/main/java/org/eclipse/rdf4j/repository/sparql/query/SPARQLBooleanQuery.java

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -50,6 +50,6 @@ public boolean evaluate()
5050
}
5151

5252
private String getQueryString() {
53-
return QueryStringUtil.getQueryString(queryString, getBindings());
53+
return QueryStringUtil.getBooleanQueryString(queryString, getBindings());
5454
}
5555
}

core/repository/sparql/src/main/java/org/eclipse/rdf4j/repository/sparql/query/SPARQLGraphQuery.java

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -74,6 +74,6 @@ public void evaluate(RDFHandler handler)
7474
}
7575

7676
private String getQueryString() {
77-
return QueryStringUtil.getQueryString(queryString, getBindings());
77+
return QueryStringUtil.getGraphQueryString(queryString, getBindings());
7878
}
7979
}

core/repository/sparql/src/main/java/org/eclipse/rdf4j/repository/sparql/query/SPARQLTupleQuery.java

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -75,6 +75,6 @@ public void evaluate(TupleQueryResultHandler handler)
7575
}
7676

7777
private String getQueryString() {
78-
return QueryStringUtil.getQueryString(queryString, getBindings());
78+
return QueryStringUtil.getTupleQueryString(queryString, getBindings());
7979
}
8080
}

core/repository/sparql/src/main/java/org/eclipse/rdf4j/repository/sparql/query/SPARQLUpdate.java

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -64,6 +64,6 @@ public void execute()
6464

6565
@Override
6666
public String getQueryString() {
67-
return QueryStringUtil.getQueryString(queryString, getBindings());
67+
return QueryStringUtil.getUpdateString(queryString, getBindings());
6868
}
6969
}

0 commit comments

Comments
 (0)