aboutsummaryrefslogtreecommitdiffstats
path: root/subprojects/store-query-viatra
diff options
context:
space:
mode:
authorLibravatar Kristóf Marussy <kristof@marussy.com>2023-07-15 14:14:14 +0200
committerLibravatar Kristóf Marussy <kristof@marussy.com>2023-07-15 14:37:36 +0200
commit89c36d2982c6f163a4be380eedd8e13fbc0dc156 (patch)
treea02d0943bd6db8d58e716b48f21666ab13eae59a /subprojects/store-query-viatra
parentfeat: base indexer for store (diff)
downloadrefinery-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.java12
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);