Skip to content

Commit 50c4d92

Browse files
committed
GH-5139 backport fix
1 parent 95b9222 commit 50c4d92

30 files changed

Lines changed: 140 additions & 62 deletions

core/sail/shacl/src/main/java/org/eclipse/rdf4j/sail/shacl/ast/NodeShape.java

Lines changed: 3 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -201,11 +201,12 @@ public SourceConstraintComponent getConstraintComponent() {
201201

202202
@Override
203203
public PlanNode getAllTargetsPlan(ConnectionsGroup connectionsGroup, Resource[] dataGraph, Scope scope,
204-
StatementMatcher.StableRandomVariableProvider stableRandomVariableProvider) {
204+
StatementMatcher.StableRandomVariableProvider stableRandomVariableProvider,
205+
ValidationSettings validationSettings) {
205206

206207
PlanNode planNode = constraintComponents.stream()
207208
.map(c -> c.getAllTargetsPlan(connectionsGroup, dataGraph, Scope.nodeShape,
208-
new StatementMatcher.StableRandomVariableProvider()))
209+
new StatementMatcher.StableRandomVariableProvider(), validationSettings))
209210
.distinct()
210211
.reduce(UnionNode::getInstanceDedupe)
211212
.orElse(EmptyNode.getInstance());

core/sail/shacl/src/main/java/org/eclipse/rdf4j/sail/shacl/ast/PropertyShape.java

Lines changed: 3 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -224,10 +224,11 @@ constraintComponent, getSeverity(), t.getScope(), t.getContexts(),
224224

225225
@Override
226226
public PlanNode getAllTargetsPlan(ConnectionsGroup connectionsGroup, Resource[] dataGraph, Scope scope,
227-
StatementMatcher.StableRandomVariableProvider stableRandomVariableProvider) {
227+
StatementMatcher.StableRandomVariableProvider stableRandomVariableProvider,
228+
ValidationSettings validationSettings) {
228229
PlanNode planNode = constraintComponents.stream()
229230
.map(c -> c.getAllTargetsPlan(connectionsGroup, dataGraph, Scope.propertyShape,
230-
new StatementMatcher.StableRandomVariableProvider()))
231+
new StatementMatcher.StableRandomVariableProvider(), validationSettings))
231232
.distinct()
232233
.reduce(UnionNode::getInstanceDedupe)
233234
.orElse(EmptyNode.getInstance());

core/sail/shacl/src/main/java/org/eclipse/rdf4j/sail/shacl/ast/constraintcomponents/AbstractConstraintComponent.java

Lines changed: 32 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -22,9 +22,16 @@
2222
import org.eclipse.rdf4j.sail.shacl.ast.StatementMatcher.Variable;
2323
import org.eclipse.rdf4j.sail.shacl.ast.ValidationApproach;
2424
import org.eclipse.rdf4j.sail.shacl.ast.ValidationQuery;
25+
import org.eclipse.rdf4j.sail.shacl.ast.paths.Path;
26+
import org.eclipse.rdf4j.sail.shacl.ast.planNodes.BufferedSplitter;
2527
import org.eclipse.rdf4j.sail.shacl.ast.planNodes.EmptyNode;
2628
import org.eclipse.rdf4j.sail.shacl.ast.planNodes.PlanNode;
2729
import org.eclipse.rdf4j.sail.shacl.ast.planNodes.PlanNodeProvider;
30+
import org.eclipse.rdf4j.sail.shacl.ast.planNodes.ReduceTargets;
31+
import org.eclipse.rdf4j.sail.shacl.ast.planNodes.TrimToTarget;
32+
import org.eclipse.rdf4j.sail.shacl.ast.planNodes.UnionNode;
33+
import org.eclipse.rdf4j.sail.shacl.ast.planNodes.Unique;
34+
import org.eclipse.rdf4j.sail.shacl.ast.targets.EffectiveTarget;
2835
import org.eclipse.rdf4j.sail.shacl.ast.targets.TargetChain;
2936
import org.eclipse.rdf4j.sail.shacl.wrapper.data.ConnectionsGroup;
3037
import org.eclipse.rdf4j.sail.shacl.wrapper.data.RdfsSubClassOfReasoner;
@@ -96,7 +103,8 @@ public boolean requiresEvaluation(ConnectionsGroup connectionsGroup, Scope scope
96103

97104
@Override
98105
public PlanNode getAllTargetsPlan(ConnectionsGroup connectionsGroup, Resource[] dataGraph, Scope scope,
99-
StatementMatcher.StableRandomVariableProvider stableRandomVariableProvider) {
106+
StatementMatcher.StableRandomVariableProvider stableRandomVariableProvider,
107+
ValidationSettings validationSettings) {
100108
throw new UnsupportedOperationException();
101109
}
102110

@@ -144,4 +152,27 @@ public String stringRepresentationOfValue(Value value) {
144152
throw new IllegalStateException(value.getClass().getSimpleName());
145153
}
146154

155+
static PlanNode getAllTargetsIncludingThoseAddedByPath(ConnectionsGroup connectionsGroup,
156+
ValidationSettings validationSettings, Scope scope, EffectiveTarget effectiveTarget, Path path,
157+
boolean includeTargetsAffectedByRemoval) {
158+
PlanNode allTargets;
159+
BufferedSplitter addedTargets = new BufferedSplitter(
160+
effectiveTarget.getPlanNode(connectionsGroup, validationSettings.getDataGraph(),
161+
scope, includeTargetsAffectedByRemoval, null));
162+
163+
PlanNode addedByPath = path.getAllAdded(connectionsGroup, validationSettings.getDataGraph(), null);
164+
165+
addedByPath = Unique.getInstance(new TrimToTarget(addedByPath), false);
166+
167+
addedByPath = new ReduceTargets(addedByPath, addedTargets.getPlanNode());
168+
169+
addedByPath = effectiveTarget.extend(addedByPath, connectionsGroup, validationSettings.getDataGraph(),
170+
scope, EffectiveTarget.Extend.left,
171+
false,
172+
null);
173+
174+
allTargets = UnionNode.getInstance(addedTargets.getPlanNode(), addedByPath);
175+
return allTargets;
176+
}
177+
147178
}

core/sail/shacl/src/main/java/org/eclipse/rdf4j/sail/shacl/ast/constraintcomponents/SimpleAbstractConstraintComponent.java renamed to core/sail/shacl/src/main/java/org/eclipse/rdf4j/sail/shacl/ast/constraintcomponents/AbstractSimpleConstraintComponent.java

Lines changed: 6 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -47,18 +47,18 @@
4747
import org.slf4j.Logger;
4848
import org.slf4j.LoggerFactory;
4949

50-
public abstract class SimpleAbstractConstraintComponent extends AbstractConstraintComponent {
50+
public abstract class AbstractSimpleConstraintComponent extends AbstractConstraintComponent {
5151

52-
private static final Logger logger = LoggerFactory.getLogger(SimpleAbstractConstraintComponent.class);
52+
private static final Logger logger = LoggerFactory.getLogger(AbstractSimpleConstraintComponent.class);
5353

5454
private Resource id;
5555
TargetChain targetChain;
5656

57-
public SimpleAbstractConstraintComponent(Resource id) {
57+
public AbstractSimpleConstraintComponent(Resource id) {
5858
this.id = id;
5959
}
6060

61-
public SimpleAbstractConstraintComponent() {
61+
public AbstractSimpleConstraintComponent() {
6262

6363
}
6464

@@ -313,7 +313,8 @@ String literalToString(Literal literal) {
313313

314314
@Override
315315
public PlanNode getAllTargetsPlan(ConnectionsGroup connectionsGroup, Resource[] dataGraph, Scope scope,
316-
StatementMatcher.StableRandomVariableProvider stableRandomVariableProvider) {
316+
StatementMatcher.StableRandomVariableProvider stableRandomVariableProvider,
317+
ValidationSettings validationSettings) {
317318
if (scope == Scope.propertyShape) {
318319
PlanNode allTargetsPlan = getTargetChain()
319320
.getEffectiveTarget(Scope.nodeShape, connectionsGroup.getRdfsSubClassOfReasoner(),

core/sail/shacl/src/main/java/org/eclipse/rdf4j/sail/shacl/ast/constraintcomponents/AndConstraintComponent.java

Lines changed: 3 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -121,10 +121,11 @@ public PlanNode generateTransactionalValidationPlan(ConnectionsGroup connections
121121

122122
@Override
123123
public PlanNode getAllTargetsPlan(ConnectionsGroup connectionsGroup, Resource[] dataGraph, Scope scope,
124-
StatementMatcher.StableRandomVariableProvider stableRandomVariableProvider) {
124+
StatementMatcher.StableRandomVariableProvider stableRandomVariableProvider,
125+
ValidationSettings validationSettings) {
125126
PlanNode planNode = and.stream()
126127
.map(c -> c.getAllTargetsPlan(connectionsGroup, dataGraph, scope,
127-
new StatementMatcher.StableRandomVariableProvider()))
128+
new StatementMatcher.StableRandomVariableProvider(), validationSettings))
128129
.distinct()
129130
.reduce(UnionNode::getInstanceDedupe)
130131
.orElse(EmptyNode.getInstance());

core/sail/shacl/src/main/java/org/eclipse/rdf4j/sail/shacl/ast/constraintcomponents/ClassConstraintComponent.java

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -203,7 +203,8 @@ public PlanNode generateTransactionalValidationPlan(ConnectionsGroup connections
203203

204204
@Override
205205
public PlanNode getAllTargetsPlan(ConnectionsGroup connectionsGroup, Resource[] dataGraph, Scope scope,
206-
StatementMatcher.StableRandomVariableProvider stableRandomVariableProvider) {
206+
StatementMatcher.StableRandomVariableProvider stableRandomVariableProvider,
207+
ValidationSettings validationSettings) {
207208
if (scope == Scope.propertyShape) {
208209
PlanNode allTargetsPlan = getTargetChain()
209210
.getEffectiveTarget(Scope.nodeShape, connectionsGroup.getRdfsSubClassOfReasoner(),

core/sail/shacl/src/main/java/org/eclipse/rdf4j/sail/shacl/ast/constraintcomponents/ConstraintComponent.java

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -63,7 +63,8 @@ boolean requiresEvaluation(ConnectionsGroup connectionsGroup, Scope scope, Resou
6363
SourceConstraintComponent getConstraintComponent();
6464

6565
PlanNode getAllTargetsPlan(ConnectionsGroup connectionsGroup, Resource[] dataGraph, Scope scope,
66-
StatementMatcher.StableRandomVariableProvider stableRandomVariableProvider);
66+
StatementMatcher.StableRandomVariableProvider stableRandomVariableProvider,
67+
ValidationSettings validationSettings);
6768

6869
SparqlFragment buildSparqlValidNodes_rsx_targetShape(Variable<Value> subject,
6970
Variable<Value> object, RdfsSubClassOfReasoner rdfsSubClassOfReasoner, Scope scope,

core/sail/shacl/src/main/java/org/eclipse/rdf4j/sail/shacl/ast/constraintcomponents/DashHasValueInConstraintComponent.java

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -159,7 +159,8 @@ public PlanNode generateTransactionalValidationPlan(ConnectionsGroup connections
159159

160160
@Override
161161
public PlanNode getAllTargetsPlan(ConnectionsGroup connectionsGroup, Resource[] dataGraph, Scope scope,
162-
StatementMatcher.StableRandomVariableProvider stableRandomVariableProvider) {
162+
StatementMatcher.StableRandomVariableProvider stableRandomVariableProvider,
163+
ValidationSettings validationSettings) {
163164
if (scope == Scope.propertyShape) {
164165
PlanNode allTargetsPlan = getTargetChain()
165166
.getEffectiveTarget(Scope.nodeShape, connectionsGroup.getRdfsSubClassOfReasoner(),

core/sail/shacl/src/main/java/org/eclipse/rdf4j/sail/shacl/ast/constraintcomponents/DatatypeConstraintComponent.java

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -29,7 +29,7 @@
2929
import org.eclipse.rdf4j.sail.shacl.ast.planNodes.FilterPlanNode;
3030
import org.eclipse.rdf4j.sail.shacl.ast.planNodes.PlanNode;
3131

32-
public class DatatypeConstraintComponent extends SimpleAbstractConstraintComponent {
32+
public class DatatypeConstraintComponent extends AbstractSimpleConstraintComponent {
3333

3434
private final CoreDatatype coreDatatype;
3535
private final IRI datatype;

core/sail/shacl/src/main/java/org/eclipse/rdf4j/sail/shacl/ast/constraintcomponents/HasValueConstraintComponent.java

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -142,7 +142,8 @@ public PlanNode generateTransactionalValidationPlan(ConnectionsGroup connections
142142

143143
@Override
144144
public PlanNode getAllTargetsPlan(ConnectionsGroup connectionsGroup, Resource[] dataGraph, Scope scope,
145-
StatementMatcher.StableRandomVariableProvider stableRandomVariableProvider) {
145+
StatementMatcher.StableRandomVariableProvider stableRandomVariableProvider,
146+
ValidationSettings validationSettings) {
146147
if (scope == Scope.propertyShape) {
147148
PlanNode allTargetsPlan = getTargetChain()
148149
.getEffectiveTarget(Scope.nodeShape, connectionsGroup.getRdfsSubClassOfReasoner(),

0 commit comments

Comments
 (0)