summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorNicholas Car <nicholas.car@surroundaustralia.com>2020-04-16 10:41:21 +1000
committerGitHub <noreply@github.com>2020-04-16 10:41:21 +1000
commitacb9d100813c263add36754033847aaa669ae443 (patch)
tree9c84e724c411ff0283f1a7223b6845776245bb41
parent604d63e1b1750b26f7fd21b1d4ffb42d481d44c4 (diff)
parent1dbe7acc945a545d3b18ec5025c19b26d1ed110f (diff)
downloadrdflib-acb9d100813c263add36754033847aaa669ae443.tar.gz
Merge pull request #1002 from sa-bpelakh/1001-construct-init-bindings
CONSTRUCT resolve with initBindings fixes #1001
-rw-r--r--rdflib/plugins/sparql/sparql.py5
-rw-r--r--test/test_sparql_construct_bindings.py40
2 files changed, 44 insertions, 1 deletions
diff --git a/rdflib/plugins/sparql/sparql.py b/rdflib/plugins/sparql/sparql.py
index d6d445e8..be980f44 100644
--- a/rdflib/plugins/sparql/sparql.py
+++ b/rdflib/plugins/sparql/sparql.py
@@ -173,7 +173,10 @@ class FrozenBindings(FrozenDict):
if not type(key) in (BNode, Variable):
return key
- return self._d[key]
+ if key not in self._d:
+ return self.ctx.initBindings[key]
+ else:
+ return self._d[key]
def project(self, vars):
return FrozenBindings(
diff --git a/test/test_sparql_construct_bindings.py b/test/test_sparql_construct_bindings.py
new file mode 100644
index 00000000..d5a68b94
--- /dev/null
+++ b/test/test_sparql_construct_bindings.py
@@ -0,0 +1,40 @@
+from rdflib import Graph, URIRef, Literal, BNode
+from rdflib.plugins.sparql import prepareQuery
+from rdflib.compare import isomorphic
+
+import unittest
+from nose.tools import eq_
+
+class TestConstructInitBindings(unittest.TestCase):
+
+ def test_construct_init_bindings(self):
+ """
+ This is issue https://github.com/RDFLib/rdflib/issues/1001
+ """
+
+ g1 = Graph()
+
+ q_str = ("""
+ PREFIX : <urn:ns1:>
+ CONSTRUCT {
+ ?uri :prop1 ?val1;
+ :prop2 ?c .
+ }
+ WHERE {
+ bind(uri(concat("urn:ns1:", ?a)) as ?uri)
+ bind(?b as ?val1)
+ }
+ """)
+ q_prepared = prepareQuery(q_str)
+
+ expected = [
+ (URIRef('urn:ns1:A'),URIRef('urn:ns1:prop1'), Literal('B')),
+ (URIRef('urn:ns1:A'),URIRef('urn:ns1:prop2'), Literal('C'))
+ ]
+ results = g1.query(q_prepared, initBindings={
+ 'a': Literal('A'),
+ 'b': Literal('B'),
+ 'c': Literal('C')
+ })
+
+ eq_(sorted(results, key=lambda x: str(x[1])), expected)