X-Git-Url: https://gerrit.simantics.org/r/gitweb?p=simantics%2Fplatform.git;a=blobdiff_plain;f=bundles%2Forg.simantics.db.layer0%2Fsrc%2Forg%2Fsimantics%2Fdb%2Flayer0%2Fadapter%2Fimpl%2FEntityInstances.java;h=7717f04483de9be3e55953be82c6f4f8189328be;hp=b0d71503b192f1e7249717c43791864afeb271f6;hb=d7afa23;hpb=969bd23cab98a79ca9101af33334000879fb60c5 diff --git a/bundles/org.simantics.db.layer0/src/org/simantics/db/layer0/adapter/impl/EntityInstances.java b/bundles/org.simantics.db.layer0/src/org/simantics/db/layer0/adapter/impl/EntityInstances.java index b0d71503b..7717f0448 100644 --- a/bundles/org.simantics.db.layer0/src/org/simantics/db/layer0/adapter/impl/EntityInstances.java +++ b/bundles/org.simantics.db.layer0/src/org/simantics/db/layer0/adapter/impl/EntityInstances.java @@ -11,8 +11,6 @@ *******************************************************************************/ package org.simantics.db.layer0.adapter.impl; -import gnu.trove.set.hash.THashSet; - import java.util.ArrayList; import java.util.Collection; import java.util.Collections; @@ -30,11 +28,15 @@ import org.simantics.db.exception.DatabaseException; import org.simantics.db.layer0.adapter.Instances; import org.simantics.db.layer0.genericrelation.IndexQueries; import org.simantics.db.layer0.util.Layer0Utils; +import org.simantics.db.request.ReadExt; +import org.simantics.db.request.RequestFlags; import org.simantics.db.service.CollectionSupport; import org.simantics.layer0.Layer0; import org.simantics.operation.Layer0X; import org.simantics.scl.runtime.function.Function; +import gnu.trove.set.hash.THashSet; + /** * @author Antti Villberg * @author Tuukka Lehtonen @@ -58,7 +60,7 @@ public class EntityInstances implements Instances { * A (cacheable) query to optimize single index queries for immutable * indexes such as ontologies. */ - public static class QueryIndex extends TernaryRead> { + public static class QueryIndex extends TernaryRead> implements ReadExt { public QueryIndex(Resource index, Resource type, String filter) { super(index, type, filter); @@ -125,6 +127,17 @@ public class EntityInstances implements Instances { return "QueryIndex " + parameter + " " + parameter2 + " " + parameter3; } + @Override + public boolean isImmutable(ReadGraph graph) throws DatabaseException { + // TODO Auto-generated method stub + return false; + } + + @Override + public int getType() { + return RequestFlags.IMMEDIATE_UPDATE; + } + } private List findRec(ReadGraph graph, Resource index, String filter, Set visited) throws DatabaseException { @@ -161,8 +174,10 @@ public class EntityInstances implements Instances { public Collection find(ReadGraph graph, Resource index, String filter) throws DatabaseException { CollectionSupport coll = graph.getService(CollectionSupport.class); - List rec = findRec(graph, index, filter, new THashSet()); + THashSet visited = new THashSet<>(); + List rec = findRec(graph, index, filter, visited); for(Resource global : Layer0Utils.listGlobalOntologies(graph)) { + if (!visited.add(global)) continue; List rs = graph.syncRequest(new QueryIndex(global, type, filter), TransientCacheListener.>instance()); if(rec.isEmpty() && !rs.isEmpty()) { // TODO: rec could be an immutable empty list