diff options
author | Kristóf Marussy <kristof@marussy.com> | 2024-07-09 21:17:59 +0200 |
---|---|---|
committer | Kristóf Marussy <kristof@marussy.com> | 2024-07-10 00:11:07 +0200 |
commit | bf3b06f8cc775216e69e7f3e14d595a1db244f05 (patch) | |
tree | bfb6511e249cbe07d5cb183b42dac11cda9f94f7 /subprojects/store-reasoning | |
parent | build: do not build shadow jars (diff) | |
download | refinery-bf3b06f8cc775216e69e7f3e14d595a1db244f05.tar.gz refinery-bf3b06f8cc775216e69e7f3e14d595a1db244f05.tar.zst refinery-bf3b06f8cc775216e69e7f3e14d595a1db244f05.zip |
feat: generator facade timeout and non-existent objects
Quality of life improvements for the semantics and generator facade APIs.
Diffstat (limited to 'subprojects/store-reasoning')
3 files changed, 23 insertions, 4 deletions
diff --git a/subprojects/store-reasoning/src/main/java/tools/refinery/store/reasoning/internal/ReasoningAdapterImpl.java b/subprojects/store-reasoning/src/main/java/tools/refinery/store/reasoning/internal/ReasoningAdapterImpl.java index 386ae1d8..b83d162e 100644 --- a/subprojects/store-reasoning/src/main/java/tools/refinery/store/reasoning/internal/ReasoningAdapterImpl.java +++ b/subprojects/store-reasoning/src/main/java/tools/refinery/store/reasoning/internal/ReasoningAdapterImpl.java | |||
@@ -204,6 +204,8 @@ class ReasoningAdapterImpl implements ReasoningAdapter { | |||
204 | if (nodeToDelete == currentModelSize - 1) { | 204 | if (nodeToDelete == currentModelSize - 1) { |
205 | nodeCountInterpretation.put(Tuple.of(), nodeToDelete); | 205 | nodeCountInterpretation.put(Tuple.of(), nodeToDelete); |
206 | } | 206 | } |
207 | // We mustn't reuse the ID of {@code nodeToDelete} in any circumstance, because clients may depend on stable | ||
208 | // node IDs for nodes in the initial partial model. | ||
207 | return true; | 209 | return true; |
208 | } | 210 | } |
209 | 211 | ||
diff --git a/subprojects/store-reasoning/src/main/java/tools/refinery/store/reasoning/translator/multiobject/CleanupPropagator.java b/subprojects/store-reasoning/src/main/java/tools/refinery/store/reasoning/translator/multiobject/CleanupPropagator.java index f14b4783..6feccae3 100644 --- a/subprojects/store-reasoning/src/main/java/tools/refinery/store/reasoning/translator/multiobject/CleanupPropagator.java +++ b/subprojects/store-reasoning/src/main/java/tools/refinery/store/reasoning/translator/multiobject/CleanupPropagator.java | |||
@@ -11,6 +11,7 @@ import tools.refinery.logic.term.uppercardinality.UpperCardinalities; | |||
11 | import tools.refinery.logic.term.uppercardinality.UpperCardinality; | 11 | import tools.refinery.logic.term.uppercardinality.UpperCardinality; |
12 | import tools.refinery.logic.term.uppercardinality.UpperCardinalityTerms; | 12 | import tools.refinery.logic.term.uppercardinality.UpperCardinalityTerms; |
13 | import tools.refinery.store.dse.propagation.BoundPropagator; | 13 | import tools.refinery.store.dse.propagation.BoundPropagator; |
14 | import tools.refinery.store.dse.propagation.PropagationRejectedResult; | ||
14 | import tools.refinery.store.dse.propagation.PropagationResult; | 15 | import tools.refinery.store.dse.propagation.PropagationResult; |
15 | import tools.refinery.store.dse.propagation.Propagator; | 16 | import tools.refinery.store.dse.propagation.Propagator; |
16 | import tools.refinery.store.model.Model; | 17 | import tools.refinery.store.model.Model; |
@@ -48,7 +49,7 @@ public class CleanupPropagator implements Propagator { | |||
48 | return new BoundCleanupPropagator(model); | 49 | return new BoundCleanupPropagator(model); |
49 | } | 50 | } |
50 | 51 | ||
51 | private static class BoundCleanupPropagator implements BoundPropagator { | 52 | private class BoundCleanupPropagator implements BoundPropagator { |
52 | private final Model model; | 53 | private final Model model; |
53 | private final ModelQueryAdapter queryEngine; | 54 | private final ModelQueryAdapter queryEngine; |
54 | private final ResultSet<Boolean> resultSet; | 55 | private final ResultSet<Boolean> resultSet; |
@@ -70,7 +71,11 @@ public class CleanupPropagator implements Propagator { | |||
70 | var cursor = resultSet.getAll(); | 71 | var cursor = resultSet.getAll(); |
71 | while (cursor.move()) { | 72 | while (cursor.move()) { |
72 | propagated = true; | 73 | propagated = true; |
73 | reasoningAdapter.cleanup(cursor.getKey().get(0)); | 74 | var nodeToDelete = cursor.getKey().get(0); |
75 | if (!reasoningAdapter.cleanup(nodeToDelete)) { | ||
76 | return new PropagationRejectedResult(CleanupPropagator.this, | ||
77 | "Failed to remove node: " + nodeToDelete, true); | ||
78 | } | ||
74 | } | 79 | } |
75 | return propagated ? PropagationResult.PROPAGATED : PropagationResult.UNCHANGED; | 80 | return propagated ? PropagationResult.PROPAGATED : PropagationResult.UNCHANGED; |
76 | } | 81 | } |
diff --git a/subprojects/store-reasoning/src/main/java/tools/refinery/store/reasoning/translator/multiobject/MultiObjectTranslator.java b/subprojects/store-reasoning/src/main/java/tools/refinery/store/reasoning/translator/multiobject/MultiObjectTranslator.java index 05d96689..7b3be76d 100644 --- a/subprojects/store-reasoning/src/main/java/tools/refinery/store/reasoning/translator/multiobject/MultiObjectTranslator.java +++ b/subprojects/store-reasoning/src/main/java/tools/refinery/store/reasoning/translator/multiobject/MultiObjectTranslator.java | |||
@@ -41,6 +41,16 @@ public class MultiObjectTranslator implements ModelStoreConfiguration { | |||
41 | public static final PartialFunction<CardinalityInterval, Integer> COUNT_SYMBOL = new PartialFunction<>("COUNT", 1, | 41 | public static final PartialFunction<CardinalityInterval, Integer> COUNT_SYMBOL = new PartialFunction<>("COUNT", 1, |
42 | CardinalityDomain.INSTANCE); | 42 | CardinalityDomain.INSTANCE); |
43 | 43 | ||
44 | private final boolean keepNonExistingObjects; | ||
45 | |||
46 | public MultiObjectTranslator(boolean keepNonExistingObjects) { | ||
47 | this.keepNonExistingObjects = keepNonExistingObjects; | ||
48 | } | ||
49 | |||
50 | public MultiObjectTranslator() { | ||
51 | this(true); | ||
52 | } | ||
53 | |||
44 | @Override | 54 | @Override |
45 | public void apply(ModelStoreBuilder storeBuilder) { | 55 | public void apply(ModelStoreBuilder storeBuilder) { |
46 | storeBuilder.symbol(COUNT_STORAGE); | 56 | storeBuilder.symbol(COUNT_STORAGE); |
@@ -90,7 +100,9 @@ public class MultiObjectTranslator implements ModelStoreConfiguration { | |||
90 | reasoningBuilder.initializer(new MultiObjectInitializer(COUNT_STORAGE)); | 100 | reasoningBuilder.initializer(new MultiObjectInitializer(COUNT_STORAGE)); |
91 | reasoningBuilder.storageRefiner(COUNT_STORAGE, MultiObjectStorageRefiner::new); | 101 | reasoningBuilder.storageRefiner(COUNT_STORAGE, MultiObjectStorageRefiner::new); |
92 | 102 | ||
93 | storeBuilder.tryGetAdapter(PropagationBuilder.class) | 103 | if (!keepNonExistingObjects) { |
94 | .ifPresent(propagationBuilder -> propagationBuilder.propagator(new CleanupPropagator())); | 104 | storeBuilder.tryGetAdapter(PropagationBuilder.class) |
105 | .ifPresent(propagationBuilder -> propagationBuilder.propagator(new CleanupPropagator())); | ||
106 | } | ||
95 | } | 107 | } |
96 | } | 108 | } |