From 370f6808edeed892490003e2f157c819363d4802 Mon Sep 17 00:00:00 2001 From: Andreas Schwarte Date: Tue, 27 Sep 2022 07:58:47 +0200 Subject: [PATCH] GH-4214: fix DESCRIBE queries in FedX when targeting a single source Previously DESCRIBE queries (when targeting a single source, i.e. a single federation member) could run into a QueryEvaluationException. This change now completes the code path for evaluating single source DESCRIBE queries in the the TripleSource by treating them in the same way as CONSTRUCT queries. Scenario covered with a simulated unit test. --- .../rdf4j/federated/evaluation/TripleSourceBase.java | 1 + .../test/java/org/eclipse/rdf4j/federated/BasicTests.java | 8 ++++++++ .../tests/basic/query_describe1_singleSource.ttl | 4 ++++ 3 files changed, 13 insertions(+) create mode 100644 tools/federation/src/test/resources/tests/basic/query_describe1_singleSource.ttl diff --git a/tools/federation/src/main/java/org/eclipse/rdf4j/federated/evaluation/TripleSourceBase.java b/tools/federation/src/main/java/org/eclipse/rdf4j/federated/evaluation/TripleSourceBase.java index a5c2204dd8f..24e99151426 100644 --- a/tools/federation/src/main/java/org/eclipse/rdf4j/federated/evaluation/TripleSourceBase.java +++ b/tools/federation/src/main/java/org/eclipse/rdf4j/federated/evaluation/TripleSourceBase.java @@ -88,6 +88,7 @@ public CloseableIteration getStatements( } return; case CONSTRUCT: + case DESCRIBE: monitorRemoteRequest(); GraphQuery gQuery = conn.prepareGraphQuery(QueryLanguage.SPARQL, preparedQuery, baseURI); applyBindings(gQuery, queryBindings); diff --git a/tools/federation/src/test/java/org/eclipse/rdf4j/federated/BasicTests.java b/tools/federation/src/test/java/org/eclipse/rdf4j/federated/BasicTests.java index 01073ad33b0..ece9aff1598 100644 --- a/tools/federation/src/test/java/org/eclipse/rdf4j/federated/BasicTests.java +++ b/tools/federation/src/test/java/org/eclipse/rdf4j/federated/BasicTests.java @@ -476,4 +476,12 @@ public void testDescribe_MultipleResources() throws Exception { prepareTest(Arrays.asList("/tests/basic/data01endpoint1.ttl", "/tests/basic/data01endpoint2.ttl")); execute("/tests/basic/query_describe2.rq", "/tests/basic/query_describe2.ttl", false, true); } + + @Test + public void testDescribe_SingleSource() throws Exception { + + /* test DESCRIBE query for a single resource (one federation member to simulate single source) */ + prepareTest(Arrays.asList("/tests/basic/data01endpoint1.ttl")); + execute("/tests/basic/query_describe1.rq", "/tests/basic/query_describe1_singleSource.ttl", false, true); + } } diff --git a/tools/federation/src/test/resources/tests/basic/query_describe1_singleSource.ttl b/tools/federation/src/test/resources/tests/basic/query_describe1_singleSource.ttl new file mode 100644 index 00000000000..4bbea0a968e --- /dev/null +++ b/tools/federation/src/test/resources/tests/basic/query_describe1_singleSource.ttl @@ -0,0 +1,4 @@ +@prefix : . +@prefix foaf: . + +:a foaf:name "Alan" . \ No newline at end of file