@@ -268,6 +268,7 @@ ParsedQuery Visitor::visit(Parser::ConstructQueryContext* ctx) {
268
268
ParsedQuery query;
269
269
query.datasetClauses_ = parsedQuery::DatasetClauses::fromClauses (
270
270
visitVector (ctx->datasetClause ()));
271
+ activeDatasetClauses_ = query.datasetClauses_ ;
271
272
if (ctx->constructTemplate ()) {
272
273
query._clause = visit (ctx->constructTemplate ())
273
274
.value_or (parsedQuery::ConstructClause{});
@@ -303,9 +304,9 @@ ParsedQuery Visitor::visit(Parser::DescribeQueryContext* ctx) {
303
304
}
304
305
305
306
// Parse the FROM and FROM NAMED clauses.
306
- auto datasetClauses = parsedQuery::DatasetClauses::fromClauses (
307
+ activeDatasetClauses_ = parsedQuery::DatasetClauses::fromClauses (
307
308
visitVector (ctx->datasetClause ()));
308
- describeClause.datasetClauses_ = datasetClauses ;
309
+ describeClause.datasetClauses_ = activeDatasetClauses_ ;
309
310
310
311
// Parse the WHERE clause and construct a SELECT query from it. For `DESCRIBE
311
312
// *`, add each visible variable as a resource to describe.
@@ -336,7 +337,7 @@ ParsedQuery Visitor::visit(Parser::DescribeQueryContext* ctx) {
336
337
parsedQuery_.addSolutionModifiers (visit (ctx->solutionModifier ()));
337
338
parsedQuery_._rootGraphPattern ._graphPatterns .emplace_back (
338
339
std::move (describeClause));
339
- parsedQuery_.datasetClauses_ = datasetClauses ;
340
+ parsedQuery_.datasetClauses_ = activeDatasetClauses_ ;
340
341
auto constructClause = ParsedQuery::ConstructClause{};
341
342
using G = GraphTerm;
342
343
using V = Variable;
@@ -352,6 +353,7 @@ ParsedQuery Visitor::visit(Parser::AskQueryContext* ctx) {
352
353
parsedQuery_._clause = ParsedQuery::AskClause{};
353
354
parsedQuery_.datasetClauses_ = parsedQuery::DatasetClauses::fromClauses (
354
355
visitVector (ctx->datasetClause ()));
356
+ activeDatasetClauses_ = parsedQuery_.datasetClauses_ ;
355
357
visitWhereClause (ctx->whereClause (), parsedQuery_);
356
358
// NOTE: It can make sense to have solution modifiers with an ASK query, for
357
359
// example, a GROUP BY with a HAVING.
@@ -595,6 +597,8 @@ ParsedQuery Visitor::visit(Parser::ModifyContext* ctx) {
595
597
};
596
598
AD_CORRECTNESS_CHECK (visibleVariables_.empty ());
597
599
auto graphPattern = visit (ctx->groupGraphPattern ());
600
+ parsedQuery_.datasetClauses_ =
601
+ parsedQuery::DatasetClauses::fromClauses (visitVector (ctx->usingClause ()));
598
602
parsedQuery_._rootGraphPattern = std::move (graphPattern);
599
603
parsedQuery_.registerVariablesVisibleInQueryBody (visibleVariables_);
600
604
visibleVariables_.clear ();
@@ -605,8 +609,6 @@ ParsedQuery Visitor::visit(Parser::ModifyContext* ctx) {
605
609
checkTriples (op.toDelete_ );
606
610
visitIf (&op.with_ , ctx->iri ());
607
611
parsedQuery_._clause = parsedQuery::UpdateClause{op};
608
- parsedQuery_.datasetClauses_ =
609
- parsedQuery::DatasetClauses::fromClauses (visitVector (ctx->usingClause ()));
610
612
611
613
return parsedQuery_;
612
614
}
@@ -1174,6 +1176,7 @@ ParsedQuery Visitor::visit(Parser::SelectQueryContext* ctx) {
1174
1176
parsedQuery_._clause = visit (ctx->selectClause ());
1175
1177
parsedQuery_.datasetClauses_ = parsedQuery::DatasetClauses::fromClauses (
1176
1178
visitVector (ctx->datasetClause ()));
1179
+ activeDatasetClauses_ = parsedQuery_.datasetClauses_ ;
1177
1180
visitWhereClause (ctx->whereClause (), parsedQuery_);
1178
1181
parsedQuery_.addSolutionModifiers (visit (ctx->solutionModifier ()));
1179
1182
return parsedQuery_;
@@ -2434,6 +2437,7 @@ ExpressionPtr Visitor::visitExists(Parser::GroupGraphPatternContext* pattern,
2434
2437
ParsedQuery query = std::exchange (parsedQuery_, std::move (queryBackup));
2435
2438
query.selectClause ().setAsterisk ();
2436
2439
query._rootGraphPattern = std::move (group);
2440
+ query.datasetClauses_ = activeDatasetClauses_;
2437
2441
visibleVariables_ = std::move (visibleVariablesSoFar);
2438
2442
auto exists =
2439
2443
std::make_unique<sparqlExpression::ExistsExpression>(std::move (query));
0 commit comments