diff options
author | 2023-07-15 14:14:14 +0200 | |
---|---|---|
committer | 2023-07-15 14:37:36 +0200 | |
commit | 89c36d2982c6f163a4be380eedd8e13fbc0dc156 (patch) | |
tree | a02d0943bd6db8d58e716b48f21666ab13eae59a /subprojects/store-query-viatra | |
parent | feat: base indexer for store (diff) | |
download | refinery-89c36d2982c6f163a4be380eedd8e13fbc0dc156.tar.gz refinery-89c36d2982c6f163a4be380eedd8e13fbc0dc156.tar.zst refinery-89c36d2982c6f163a4be380eedd8e13fbc0dc156.zip |
feat: use base index for local search
Diffstat (limited to 'subprojects/store-query-viatra')
-rw-r--r-- | subprojects/store-query-viatra/src/main/java/tools/refinery/store/query/viatra/internal/context/RelationalRuntimeContext.java | 12 |
1 files changed, 11 insertions, 1 deletions
diff --git a/subprojects/store-query-viatra/src/main/java/tools/refinery/store/query/viatra/internal/context/RelationalRuntimeContext.java b/subprojects/store-query-viatra/src/main/java/tools/refinery/store/query/viatra/internal/context/RelationalRuntimeContext.java index 0f2daca8..df80a33e 100644 --- a/subprojects/store-query-viatra/src/main/java/tools/refinery/store/query/viatra/internal/context/RelationalRuntimeContext.java +++ b/subprojects/store-query-viatra/src/main/java/tools/refinery/store/query/viatra/internal/context/RelationalRuntimeContext.java | |||
@@ -119,10 +119,20 @@ public class RelationalRuntimeContext implements IQueryRuntimeContext { | |||
119 | 119 | ||
120 | private Iterable<Object[]> enumerate(IInputKey key, TupleMask seedMask, ITuple seed) { | 120 | private Iterable<Object[]> enumerate(IInputKey key, TupleMask seedMask, ITuple seed) { |
121 | var relationViewKey = checkKey(key); | 121 | var relationViewKey = checkKey(key); |
122 | Iterable<Object[]> allObjects = relationViewKey.getAll(model); | 122 | Iterable<Object[]> allObjects = getAllObjects(relationViewKey, seedMask, seed); |
123 | return filter(allObjects, objectArray -> isMatching(objectArray, seedMask, seed)); | 123 | return filter(allObjects, objectArray -> isMatching(objectArray, seedMask, seed)); |
124 | } | 124 | } |
125 | 125 | ||
126 | private Iterable<Object[]> getAllObjects(AnySymbolView key, TupleMask seedMask, ITuple seed) { | ||
127 | for (int i = 0; i < seedMask.indices.length; i++) { | ||
128 | int slot = seedMask.indices[i]; | ||
129 | if (key.canIndexSlot(slot)) { | ||
130 | return key.getAdjacent(model, slot, seed.get(i)); | ||
131 | } | ||
132 | } | ||
133 | return key.getAll(model); | ||
134 | } | ||
135 | |||
126 | private static boolean isMatching(Object[] tuple, TupleMask seedMask, ITuple seed) { | 136 | private static boolean isMatching(Object[] tuple, TupleMask seedMask, ITuple seed) { |
127 | for (int i = 0; i < seedMask.indices.length; i++) { | 137 | for (int i = 0; i < seedMask.indices.length; i++) { |
128 | final Object seedElement = seed.get(i); | 138 | final Object seedElement = seed.get(i); |