]> gerrit.simantics Code Review - simantics/platform.git/blobdiff - bundles/org.simantics.db.impl/src/org/simantics/db/impl/query/QueryProcessor.java
Multiple readers and variable optimization
[simantics/platform.git] / bundles / org.simantics.db.impl / src / org / simantics / db / impl / query / QueryProcessor.java
index a6c987a9d0e10e0b2beda36f7a571a8633527063..a54484a6566e623ae9fd4c1ea6b3dac63060572e 100644 (file)
@@ -16,6 +16,7 @@ import java.io.File;
 import java.io.FileOutputStream;
 import java.io.IOException;
 import java.io.PrintStream;
+import java.lang.ref.WeakReference;
 import java.util.ArrayList;
 import java.util.Arrays;
 import java.util.Collection;
@@ -279,10 +280,29 @@ final public class QueryProcessor extends AbstractDisposable implements ReadGrap
        public boolean resume(ReadGraphImpl graph) {
                return executors[0].runSynchronized();
        }
+       
+       //private WeakReference<GarbageTracker> garbageTracker;
+       
+       private class GarbageTracker    {
+               
+               @Override
+               protected void finalize() throws Throwable {
+                       
+//                     System.err.println("GarbageTracker");
+//                     
+//                     garbageTracker = new WeakReference<GarbageTracker>(new GarbageTracker());
+                       
+                       super.finalize();
+                       
+               }
+               
+       }
 
        public QueryProcessor(final int threads, QuerySupport core, Set<Thread> threadSet)
                        throws DatabaseException {
 
+               //garbageTracker = new WeakReference<GarbageTracker>(new GarbageTracker());
+               
                THREADS = threads;
                THREAD_MASK = threads - 1;
 
@@ -2324,11 +2344,8 @@ final public class QueryProcessor extends AbstractDisposable implements ReadGrap
        
        @Override
        final public IntSet getPredicates(final ReadGraphImpl impl, final Resource subject) throws Throwable {
-               
-               return QueryCacheBase.resultPredicates(impl, querySupport.getId(subject), impl.parent, null, null); 
-
+               return QueryCacheBase.resultPredicates(impl, querySupport.getId(subject), impl.parent, null); 
        }
-       
 
        @Override
        final public void forEachStatement(final ReadGraphImpl impl, final Resource subject,
@@ -3424,7 +3441,7 @@ final public class QueryProcessor extends AbstractDisposable implements ReadGrap
 
                assert(subject != null);
                
-               return QueryCacheBase.resultTypes(impl, querySupport.getId(subject), impl.parent, null, null);
+               return QueryCacheBase.resultTypes(impl, querySupport.getId(subject), impl.parent, null);
 
        }
 
@@ -3647,17 +3664,18 @@ final public class QueryProcessor extends AbstractDisposable implements ReadGrap
        }
 
        final public byte[] getValue(final ReadGraphImpl impl, final int subject) throws DatabaseException {
-               return QueryCache.resultValueQuery(impl, subject, impl.parent, null, null); 
+               return QueryCache.resultValueQuery(impl, subject, impl.parent, null); 
        }
 
        @Override
-       final public byte[] forValue(final ReadGraphImpl impl, final Resource subject, final AsyncProcedure<byte[]> procedure) {
+       final public void forValue(final ReadGraphImpl impl, final Resource subject, final AsyncProcedure<byte[]> procedure) {
 
                assert(subject != null);
+               assert(procedure != null);
 
                int sId = querySupport.getId(subject);
 
-               if(procedure != null) {
+//             if(procedure != null) {
                
                        final ListenerBase listener = getListenerBase(procedure);
 
@@ -3699,23 +3717,18 @@ final public class QueryProcessor extends AbstractDisposable implements ReadGrap
 //                     else impl.state.barrier.inc(null, null);
 
                        try {
-                               return QueryCacheBase.resultValueQuery(impl, sId, impl.parent, listener, ip);
+                               QueryCache.runnerValueQuery(impl, sId, impl.parent, listener, ip);
                        } catch (DatabaseException e) {
-                               Logger.defaultLogError(e);
-                       } 
-                       
-
-               } else {
+                               throw new IllegalStateException("Internal error");
+                       }
 
-                       try {
-                               return QueryCacheBase.resultValueQuery(impl, sId, impl.parent, null, null);
-                       } catch (DatabaseException e) {
-                               Logger.defaultLogError(e);
-                       } 
-                       
-               }
-               
-               throw new IllegalStateException("Internal error");
+//             } else {
+//
+//                     return QueryCacheBase.runnerValueQuery(impl, sId, impl.parent, null, null);
+//                     
+//             }
+//             
+//             throw new IllegalStateException("Internal error");
 
        }
 
@@ -3973,7 +3986,7 @@ final public class QueryProcessor extends AbstractDisposable implements ReadGrap
                final ListenerBase listener = getListenerBase(procedure);
 
                try {
-                       IntSet result = QueryCache.resultDirectPredicates(impl, querySupport.getId(subject), impl.parent, listener,QueryCache.emptyProcedureDirectPredicates);
+                       IntSet result = QueryCache.resultDirectPredicates(impl, querySupport.getId(subject), impl.parent, listener);
                        procedure.execute(impl, !result.isEmpty());
                } catch (DatabaseException e) {
                        procedure.exception(impl, e);