diff options
author | generator <generator@fedora> | 2021-10-22 01:55:26 +0200 |
---|---|---|
committer | generator <generator@fedora> | 2021-10-22 01:55:26 +0200 |
commit | bb2c66e60a8a1be22f62189bb6d946ed1adf048e (patch) | |
tree | 63edb511387b9bdbe04abe89b8f3a8e01278b0dd | |
parent | docs: add note about code coverage (diff) | |
download | refinery-bb2c66e60a8a1be22f62189bb6d946ed1adf048e.tar.gz refinery-bb2c66e60a8a1be22f62189bb6d946ed1adf048e.tar.zst refinery-bb2c66e60a8a1be22f62189bb6d946ed1adf048e.zip |
RawPatternMatcher for exposing raw pattern matches
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 @@ | |||
1 | package tools.refinery.store.query.internal; | ||
2 | |||
3 | import java.util.Optional; | ||
4 | import java.util.stream.Stream; | ||
5 | |||
6 | public 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 @@ | |||
1 | package tools.refinery.store.query.internal; | ||
2 | |||
3 | import java.util.Optional; | ||
4 | import java.util.stream.Stream; | ||
5 | |||
6 | import org.eclipse.viatra.query.runtime.api.GenericPatternMatcher; | ||
7 | import org.eclipse.viatra.query.runtime.api.GenericQuerySpecification; | ||
8 | import org.eclipse.viatra.query.runtime.matchers.tuple.Tuple; | ||
9 | import org.eclipse.viatra.query.runtime.matchers.tuple.AbstractTuple; | ||
10 | |||
11 | public 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 | } | ||