Skip to content

Commit d61fb7a

Browse files
authored
Merge main into develop (#5513)
2 parents 64c8647 + 9e8528f commit d61fb7a

2 files changed

Lines changed: 50 additions & 1 deletion

File tree

core/sparqlbuilder/src/main/java/org/eclipse/rdf4j/sparqlbuilder/graphpattern/FilterExistsGraphPattern.java

Lines changed: 10 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -11,6 +11,8 @@
1111

1212
package org.eclipse.rdf4j.sparqlbuilder.graphpattern;
1313

14+
import org.eclipse.rdf4j.sparqlbuilder.util.SparqlBuilderUtils;
15+
1416
/**
1517
* A SPARQL Graph Pattern Filter
1618
*
@@ -43,6 +45,13 @@ public String getQueryString() {
4345
}
4446
filterExists.append(EXISTS).append(" ");
4547

46-
return filterExists.append(super.getQueryString()).toString();
48+
String innerPattern = super.getQueryString();
49+
String trimmedPattern = innerPattern.trim();
50+
51+
if (!trimmedPattern.startsWith("{")) {
52+
innerPattern = SparqlBuilderUtils.getBracedString(innerPattern);
53+
}
54+
55+
return filterExists.append(innerPattern).toString();
4756
}
4857
}
Lines changed: 40 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,40 @@
1+
/*******************************************************************************
2+
* Copyright (c) 2025 Eclipse RDF4J contributors.
3+
*
4+
* All rights reserved. This program and the accompanying materials
5+
* are made available under the terms of the Eclipse Distribution License v1.0
6+
* which accompanies this distribution, and is available at
7+
* http://www.eclipse.org/org/documents/edl-v10.php.
8+
*
9+
* SPDX-License-Identifier: BSD-3-Clause
10+
*******************************************************************************/
11+
package org.eclipse.rdf4j.sparqlbuilder.core.query;
12+
13+
import static org.assertj.core.api.Assertions.assertThat;
14+
import static org.eclipse.rdf4j.sparqlbuilder.core.SparqlBuilder.var;
15+
import static org.eclipse.rdf4j.sparqlbuilder.rdf.Rdf.iri;
16+
17+
import org.eclipse.rdf4j.sparqlbuilder.core.Variable;
18+
import org.eclipse.rdf4j.sparqlbuilder.graphpattern.GraphPatterns;
19+
import org.eclipse.rdf4j.sparqlbuilder.rdf.Iri;
20+
import org.junit.jupiter.api.Test;
21+
22+
class ConstructQueryFilterNotExistsTest {
23+
24+
@Test
25+
void filterNotExistsGraphPatternIsWrappedInBraces() {
26+
Variable s = var("s");
27+
Variable p = var("p");
28+
Variable o = var("o");
29+
Iri sourceGraph = iri("http://example.com/source");
30+
Iri targetGraph = iri("http://example.com/target");
31+
32+
ConstructQuery query = Queries.CONSTRUCT()
33+
.construct(GraphPatterns.tp(s, p, o))
34+
.where(GraphPatterns.and(s.has(p, o).from(sourceGraph))
35+
.filterNotExists(s.has(p, o).from(targetGraph)));
36+
37+
assertThat(query.getQueryString())
38+
.contains("FILTER NOT EXISTS { GRAPH <http://example.com/target> { ?s ?p ?o . } }");
39+
}
40+
}

0 commit comments

Comments
 (0)