*******************************************************************************/\r
package org.simantics.db.layer0.adapter.impl;\r
\r
-import gnu.trove.set.hash.THashSet;\r
-\r
import java.util.ArrayList;\r
import java.util.Collection;\r
import java.util.Collections;\r
import org.simantics.db.layer0.adapter.Instances;\r
import org.simantics.db.layer0.genericrelation.IndexQueries;\r
import org.simantics.db.layer0.util.Layer0Utils;\r
+import org.simantics.db.request.ReadExt;\r
+import org.simantics.db.request.RequestFlags;\r
import org.simantics.db.service.CollectionSupport;\r
import org.simantics.layer0.Layer0;\r
import org.simantics.operation.Layer0X;\r
import org.simantics.scl.runtime.function.Function;\r
\r
+import gnu.trove.set.hash.THashSet;\r
+\r
/**\r
* @author Antti Villberg\r
* @author Tuukka Lehtonen\r
* A (cacheable) query to optimize single index queries for immutable\r
* indexes such as ontologies.\r
*/\r
- public static class QueryIndex extends TernaryRead<Resource, Resource, String, List<Resource>> {\r
+ public static class QueryIndex extends TernaryRead<Resource, Resource, String, List<Resource>> implements ReadExt {\r
\r
public QueryIndex(Resource index, Resource type, String filter) {\r
super(index, type, filter);\r
return "QueryIndex " + parameter + " " + parameter2 + " " + parameter3;\r
}\r
\r
+ @Override\r
+ public boolean isImmutable(ReadGraph graph) throws DatabaseException {\r
+ // TODO Auto-generated method stub\r
+ return false;\r
+ }\r
+\r
+ @Override\r
+ public int getType() {\r
+ return RequestFlags.IMMEDIATE_UPDATE;\r
+ }\r
+\r
}\r
\r
private List<Resource> findRec(ReadGraph graph, Resource index, String filter, Set<Resource> visited) throws DatabaseException {\r
public Collection<Resource> find(ReadGraph graph, Resource index, String filter) throws DatabaseException {\r
CollectionSupport coll = graph.getService(CollectionSupport.class);\r
\r
- List<Resource> rec = findRec(graph, index, filter, new THashSet<Resource>());\r
+ THashSet<Resource> visited = new THashSet<>();\r
+ List<Resource> rec = findRec(graph, index, filter, visited);\r
for(Resource global : Layer0Utils.listGlobalOntologies(graph)) {\r
+ if(!visited.add(global)) continue;\r
List<Resource> rs = graph.syncRequest(new QueryIndex(global, type, filter), TransientCacheListener.<List<Resource>>instance());\r
if(rec.isEmpty() && !rs.isEmpty()) {\r
// TODO: rec could be an immutable empty list\r