X-Git-Url: https://gerrit.simantics.org/r/gitweb?p=simantics%2Fplatform.git;a=blobdiff_plain;f=bundles%2Forg.simantics.db.impl%2Fsrc%2Forg%2Fsimantics%2Fdb%2Fimpl%2Fquery%2FAssertedStatements.java;h=8649de32eeee907b1e551a4e681b165c1edd1768;hp=41b8e08d59486690543fd79494195c76395a01f9;hb=0d9b90834ce56b292c00b1a39850ed842c3e4d42;hpb=e5db6157fd8722c946613d4e46d7aaf6bfa92609 diff --git a/bundles/org.simantics.db.impl/src/org/simantics/db/impl/query/AssertedStatements.java b/bundles/org.simantics.db.impl/src/org/simantics/db/impl/query/AssertedStatements.java index 41b8e08d5..8649de32e 100644 --- a/bundles/org.simantics.db.impl/src/org/simantics/db/impl/query/AssertedStatements.java +++ b/bundles/org.simantics.db.impl/src/org/simantics/db/impl/query/AssertedStatements.java @@ -1,5 +1,5 @@ /******************************************************************************* - * Copyright (c) 2007, 2010 Association for Decentralized Information Management + * Copyright (c) 2007, 2018 Association for Decentralized Information Management * in Industry THTH ry. * All rights reserved. This program and the accompanying materials * are made available under the terms of the Eclipse Public License v1.0 @@ -11,22 +11,19 @@ *******************************************************************************/ package org.simantics.db.impl.query; -import java.util.concurrent.Semaphore; import java.util.concurrent.atomic.AtomicInteger; import org.simantics.db.RelationInfo; +import org.simantics.db.exception.DatabaseException; import org.simantics.db.exception.ManyObjectsForFunctionalRelationException; import org.simantics.db.impl.graph.ReadGraphImpl; import org.simantics.db.impl.procedure.InternalProcedure; import org.simantics.db.impl.procedure.TripleIntProcedureAdapter; -import org.simantics.db.procedure.ListenerBase; import org.simantics.db.request.RequestFlags; final public class AssertedStatements extends CollectionBinaryQuery { -// public ArrayList procs; - public AssertedStatements(final int r1, final int r2) { super(r1, r2); } @@ -34,82 +31,20 @@ final public class AssertedStatements extends CollectionBinaryQuery(); -// entry.procs.add(procedure); -// provider.registerDependencies(graph, entry, parent, listener, procedure, false); -// return entry; - } - } - } - provider.performForEach(graph, entry, parent, listener, procedure); - } - - return entry; - - } - - final public static AssertedStatements queryEach(ReadGraphImpl graph, final int r1, final int r2, final QueryProcessor provider, final CacheEntry parent, final ListenerBase listener, final TripleIntProcedure procedure) { - - assert(r1 != 0); - assert(r2 != 0); - - final AssertedStatements entry = (AssertedStatements)provider.assertedStatementsMap.get(id(r1,r2)); - - if(parent == null && !(listener != null)) { - if(entry != null && entry.isReady()) { - entry.performFromCache(graph, provider, procedure); - return entry; - } - } - - return runner(graph, r1, r2, provider, entry, parent, listener, procedure); - - } - - @Override - public BinaryQuery getEntry(QueryProcessor provider) { - return provider.assertedStatementsMap.get(id); - } - - @Override - public void putEntry(QueryProcessor provider) { - provider.assertedStatementsMap.put(id, this); - } @Override final public void removeEntry(QueryProcessor provider) { - provider.assertedStatementsMap.remove(id); + provider.cache.remove(this); } - void computeInheritedAssertions(ReadGraphImpl graph, int type, final int predicate, final RelationInfo ri, final QueryProcessor queryProvider, final TripleIntProcedure proc) { + static void computeInheritedAssertions(ReadGraphImpl graph, int type, final int predicate, final RelationInfo ri, final AssertedStatements entry, final TripleIntProcedure proc) throws DatabaseException { -// final AtomicBoolean found = new AtomicBoolean(0); + QueryProcessor processor = graph.processor; - DirectObjects.queryEach(graph, type, queryProvider.getInherits(), queryProvider, this, null, new SyncIntProcedure() { + QueryCache.runnerDirectObjects(graph, type, processor.getInherits(), entry, null, new SyncIntProcedure() { @Override - public void run(ReadGraphImpl graph) { + public void run(ReadGraphImpl graph) throws DatabaseException { // if(ri.isFunctional && found.get() == 1) { // @@ -120,29 +55,29 @@ final public class AssertedStatements extends CollectionBinaryQuery 1) { ManyObjectsForFunctionalRelationException exception = new ManyObjectsForFunctionalRelationException("Functional relation has more than one asserted statement."); - except(exception); - proc.exception(graph, exception); + except(exception, entry); + procedure.exception(graph, exception); return; } if(ri.isFunctional && found.get() == 1) { - finish(graph, queryProvider); - proc.finished(graph); + finish(graph, entry); + procedure.finished(graph); return; } - computeInheritedAssertions(graph, type, predicate, ri, queryProvider, proc); + computeInheritedAssertions(graph, type, predicate, ri, entry, procedure); } @Override - public void execute(ReadGraphImpl graph, final int ass) { + public void execute(ReadGraphImpl graph, final int ass) throws DatabaseException { if(ri.isFunctional && found.get() > 1) return; inc(); - DirectObjects.queryEach(graph, ass, queryProvider.getHasPredicate(), queryProvider, AssertedStatements.this, null, new IntProcedure() { + QueryCache.runnerDirectObjects(graph, ass, processor.getHasPredicate(), entry, null, new IntProcedure() { @Override - public void execute(ReadGraphImpl graph, final int pred) { + public void execute(ReadGraphImpl graph, final int pred) throws DatabaseException { if(ri.isFunctional) { @@ -235,18 +185,18 @@ final public class AssertedStatements extends CollectionBinaryQuery 1) return; if(pred == predicate) { if(found.getAndIncrement() == 0) { - if(addOrSet(type, pred, object)) - proc.execute(graph, type, pred, object); + if(addOrSet(type, pred, object, entry)) + procedure.execute(graph, type, pred, object); } return; @@ -257,10 +207,10 @@ final public class AssertedStatements extends CollectionBinaryQuery() { + QueryCache.runnerSuperRelations(graph, pred, entry, null, new InternalProcedure() { @Override - public void execute(ReadGraphImpl graph, IntSet result) { + public void execute(ReadGraphImpl graph, IntSet result) throws DatabaseException { if(found.get() > 1) { dec(graph); @@ -270,8 +220,8 @@ final public class AssertedStatements extends CollectionBinaryQuery() { + QueryCache.runnerSuperRelations(graph, pred, entry, null, new InternalProcedure() { @Override - public void execute(ReadGraphImpl graph, IntSet result) { + public void execute(ReadGraphImpl graph, IntSet result) throws DatabaseException { if(result.contains(predicate)) { - addOrSet(type, pred, object); - proc.execute(graph, type, pred, object); + addOrSet(type, pred, object, entry); + procedure.execute(graph, type, pred, object); } @@ -345,8 +295,8 @@ final public class AssertedStatements extends CollectionBinaryQuery() { - - @Override - public void execute(ReadGraphImpl graph, RelationInfo ri) { - - computeLocalAssertions(graph, r1(), r2(), ri, provider, procedure); - - } - - @Override - public void exception(ReadGraphImpl graph, Throwable t) { - procedure.exception(graph, t); - } - - }); - } @Override public String toString() { - return "AssertedStatements2[" + r1() + " - " + r2() + "]"; + return "AssertedStatements[" + r1() + " - " + r2() + "]"; } private boolean addOrSet(int s, int p, int o) { - + assert(isPending()); IntArray value = (IntArray)getResult(); @@ -449,39 +378,39 @@ final public class AssertedStatements extends CollectionBinaryQuery p = null; - - synchronized(this) { - - setReady(); -// p = procs; -// procs = null; - - } - -// if(p != null) { -// final IntArray value = (IntArray)getResult(); -// for(TripleIntProcedure proc : p) { -// for(int i=0;i