aboutsummaryrefslogtreecommitdiffstats
path: root/store
diff options
context:
space:
mode:
authorLibravatar generator <generator@fedora>2021-10-22 01:55:26 +0200
committerLibravatar generator <generator@fedora>2021-10-22 01:55:26 +0200
commitbb2c66e60a8a1be22f62189bb6d946ed1adf048e (patch)
tree63edb511387b9bdbe04abe89b8f3a8e01278b0dd /store
parentdocs: add note about code coverage (diff)
downloadrefinery-bb2c66e60a8a1be22f62189bb6d946ed1adf048e.tar.gz
refinery-bb2c66e60a8a1be22f62189bb6d946ed1adf048e.tar.zst
refinery-bb2c66e60a8a1be22f62189bb6d946ed1adf048e.zip
RawPatternMatcher for exposing raw pattern matches
Diffstat (limited to 'store')
-rw-r--r--store/src/main/java/tools/refinery/store/query/internal/DNF2PQuery.java16
-rw-r--r--store/src/main/java/tools/refinery/store/query/internal/PredicateResult.java24
-rw-r--r--store/src/main/java/tools/refinery/store/query/internal/RawPatternMatcher.java57
3 files changed, 91 insertions, 6 deletions
diff --git a/store/src/main/java/tools/refinery/store/query/internal/DNF2PQuery.java b/store/src/main/java/tools/refinery/store/query/internal/DNF2PQuery.java
index c9c8245b..f0ac0276 100644
--- a/store/src/main/java/tools/refinery/store/query/internal/DNF2PQuery.java
+++ b/store/src/main/java/tools/refinery/store/query/internal/DNF2PQuery.java
@@ -160,8 +160,8 @@ public class DNF2PQuery {
160 return bodies; 160 return bodies;
161 } 161 }
162 162
163 public GenericQuerySpecification<GenericPatternMatcher> build() { 163 public GenericQuerySpecification<RawPatternMatcher> build() {
164 return new GenericQuerySpecification<GenericPatternMatcher>(this) { 164 return new GenericQuerySpecification<RawPatternMatcher>(this) {
165 165
166 @Override 166 @Override
167 public Class<? extends QueryScope> getPreferredScopeClass() { 167 public Class<? extends QueryScope> getPreferredScopeClass() {
@@ -169,13 +169,17 @@ public class DNF2PQuery {
169 } 169 }
170 170
171 @Override 171 @Override
172 protected GenericPatternMatcher instantiate(ViatraQueryEngine engine) { 172 protected RawPatternMatcher instantiate(ViatraQueryEngine engine) {
173 return defaultInstantiate(engine); 173 RawPatternMatcher matcher = engine.getExistingMatcher(this);
174 if (matcher == null) {
175 matcher = engine.getMatcher(this);
176 }
177 return matcher;
174 } 178 }
175 179
176 @Override 180 @Override
177 public GenericPatternMatcher instantiate() { 181 public RawPatternMatcher instantiate() {
178 return new GenericPatternMatcher(this); 182 return new RawPatternMatcher(this);
179 } 183 }
180 184
181 }; 185 };
diff --git a/store/src/main/java/tools/refinery/store/query/internal/PredicateResult.java b/store/src/main/java/tools/refinery/store/query/internal/PredicateResult.java
new file mode 100644
index 00000000..65d23eb6
--- /dev/null
+++ b/store/src/main/java/tools/refinery/store/query/internal/PredicateResult.java
@@ -0,0 +1,24 @@
1package tools.refinery.store.query.internal;
2
3import java.util.Optional;
4import java.util.stream.Stream;
5
6public interface PredicateResult {
7
8 boolean hasResult();
9
10 boolean hasResult(Object[] parameters);
11
12 Optional<Object[]> oneResult();
13
14 Optional<Object[]> oneResult(Object[] parameters);
15
16 Stream<Object[]> allResults();
17
18 Stream<Object[]> allResults(Object[] parameters);
19
20 int countResults();
21
22 int countResults(Object[] parameters);
23
24} \ No newline at end of file
diff --git a/store/src/main/java/tools/refinery/store/query/internal/RawPatternMatcher.java b/store/src/main/java/tools/refinery/store/query/internal/RawPatternMatcher.java
new file mode 100644
index 00000000..c6d6353c
--- /dev/null
+++ b/store/src/main/java/tools/refinery/store/query/internal/RawPatternMatcher.java
@@ -0,0 +1,57 @@
1package tools.refinery.store.query.internal;
2
3import java.util.Optional;
4import java.util.stream.Stream;
5
6import org.eclipse.viatra.query.runtime.api.GenericPatternMatcher;
7import org.eclipse.viatra.query.runtime.api.GenericQuerySpecification;
8import org.eclipse.viatra.query.runtime.matchers.tuple.Tuple;
9import org.eclipse.viatra.query.runtime.matchers.tuple.AbstractTuple;
10
11public class RawPatternMatcher extends GenericPatternMatcher implements PredicateResult{
12
13 protected final Object[] empty;
14
15 public RawPatternMatcher(GenericQuerySpecification<? extends GenericPatternMatcher> specification) {
16 super(specification);
17 this.empty = new Object[specification.getParameterNames().size()];
18 }
19
20 @Override
21 public boolean hasResult() {
22 return hasResult(empty);
23 }
24 @Override
25 public boolean hasResult(Object[] parameters) {
26 return this.backend.hasMatch(parameters);
27 }
28 @Override
29 public Optional<Object[]> oneResult() {
30 return oneResult(empty);
31 }
32 @Override
33 public Optional<Object[]> oneResult(Object[] parameters) {
34 Optional<Tuple> tuple = this.backend.getOneArbitraryMatch(parameters);
35 if(tuple.isPresent()) {
36 return Optional.of(tuple.get().getElements());
37 } else {
38 return Optional.empty();
39 }
40 }
41 @Override
42 public Stream<Object[]> allResults() {
43 return allResults(empty);
44 }
45 @Override
46 public Stream<Object[]> allResults(Object[] parameters) {
47 return this.backend.getAllMatches(parameters).map(AbstractTuple::getElements);
48 }
49 @Override
50 public int countResults() {
51 return countResults(empty);
52 }
53 @Override
54 public int countResults(Object[] parameters) {
55 return backend.countMatches(parameters);
56 }
57}