X-Git-Url: https://gerrit.simantics.org/r/gitweb?a=blobdiff_plain;f=bundles%2Forg.simantics.db.impl%2Fsrc%2Forg%2Fsimantics%2Fdb%2Fimpl%2Fquery%2FAssertedStatements.java;h=eba1205e1f94dfd4a5dac0177d0b56cfc90d8a51;hb=68ce0966a57f5153b133c6283fdbae10f683b745;hp=d6d6fc08ad373bc9579de74bf55f4cdc760e1e76;hpb=a1dd54cd8e3595e66c83ad0e2d935470a3567481;p=simantics%2Fplatform.git 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 d6d6fc08a..eba1205e1 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 @@ -11,10 +11,10 @@ *******************************************************************************/ 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; @@ -33,81 +33,28 @@ 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.cache.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.cache.assertedStatementsMap.get(id); - } - - @Override - public void putEntry(QueryProcessor provider) { - provider.cache.assertedStatementsMap.put(id, this); - } +// 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) throws DatabaseException { +// +// assert(r1 != 0); +// assert(r2 != 0); +// +// return QueryCache.runnerAssertedStatements(graph, r1, r2, parent, listener, procedure); +// +// } @Override final public void removeEntry(QueryProcessor provider) { - provider.cache.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) { // @@ -118,29 +65,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) { @@ -233,18 +195,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; @@ -255,10 +217,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); @@ -268,8 +230,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); } @@ -343,8 +305,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(); @@ -447,35 +388,35 @@ final public class AssertedStatements extends CollectionBinaryQuery p = null; - - synchronized(this) { - - setReady(); -// p = procs; -// procs = null; - - } + static boolean addOrSet(int s, int p, int o, AssertedStatements entry) { + if(entry != null) { + return entry.addOrSet(s, p, o); + } else { + return true; + } + } + + static void finish(ReadGraphImpl graph, AssertedStatements entry) { -// if(p != null) { -// final IntArray value = (IntArray)getResult(); -// for(TripleIntProcedure proc : p) { -// for(int i=0;i