]> gerrit.simantics Code Review - simantics/platform.git/blobdiff - bundles/org.simantics.db.impl/src/org/simantics/db/impl/query/CacheEntryBase.java
QueryListening sync is slow
[simantics/platform.git] / bundles / org.simantics.db.impl / src / org / simantics / db / impl / query / CacheEntryBase.java
index 7c87b50e3acfa0e4630f3eb93ba8859c1eb13c90..e79f99deae1d06ab4469e1496accd8fbcacb3e97 100644 (file)
@@ -14,10 +14,12 @@ package org.simantics.db.impl.query;
 import java.util.ArrayList;
 import java.util.Iterator;
 
+import org.simantics.databoard.Bindings;
+import org.simantics.db.DevelopmentKeys;
 import org.simantics.db.exception.DatabaseException;
-import org.simantics.db.impl.DebugPolicy;
 import org.simantics.db.impl.graph.ReadGraphImpl;
 import org.simantics.db.impl.procedure.InternalProcedure;
+import org.simantics.utils.Development;
 import org.slf4j.Logger;
 import org.slf4j.LoggerFactory;
 
@@ -34,8 +36,8 @@ public abstract class CacheEntryBase<Procedure> extends CacheEntry<Procedure> {
        
     final public static CacheEntryBase[] NONE = new CacheEntryBase[0];
 
-       static Object NO_RESULT = new Object();
-       static protected Object INVALID_RESULT = new Object();
+       static Object NO_RESULT = new Object() { public String toString() { return "NO_RESULT"; }};
+       static protected Object INVALID_RESULT = new Object() { public String toString() { return "INVALID_RESULT"; }};
        
 //     // Just created
 //    static protected Object FRESH = new Object() { public String toString() { return "CREATED"; }};
@@ -74,6 +76,7 @@ public abstract class CacheEntryBase<Procedure> extends CacheEntry<Procedure> {
     }
 
     public void setReady() {
+        assert(result != NO_RESULT);
        statusOrException = READY;
     }
 
@@ -84,7 +87,11 @@ public abstract class CacheEntryBase<Procedure> extends CacheEntry<Procedure> {
     
     @Override
     public void discard() {
-       if(DebugPolicy.QUERY_STATE) System.out.println("[QUERY STATE]: discarded " + this);
+               if (Development.DEVELOPMENT) {
+                       if(Development.<Boolean>getProperty(DevelopmentKeys.CACHE_ENTRY_STATE, Bindings.BOOLEAN)) {
+                               System.err.println("[QUERY STATE]: discarded " + this);
+                       }
+               }
        statusOrException = DISCARDED;
     }
     
@@ -95,7 +102,11 @@ public abstract class CacheEntryBase<Procedure> extends CacheEntry<Procedure> {
     
     @Override
     final public void refute() {
-       if(DebugPolicy.QUERY_STATE) System.out.println("[QUERY STATE]: refuted " + this);
+               if (Development.DEVELOPMENT) {
+                       if(Development.<Boolean>getProperty(DevelopmentKeys.CACHE_ENTRY_STATE, Bindings.BOOLEAN)) {
+                               System.err.println("[QUERY STATE]: refuted " + this);
+                       }
+               }
        statusOrException = REQUIRES_COMPUTATION;
     }
     
@@ -106,7 +117,11 @@ public abstract class CacheEntryBase<Procedure> extends CacheEntry<Procedure> {
 
     @Override
     public void except(Throwable throwable) {
-       if(DebugPolicy.QUERY_STATE) System.out.println("[QUERY STATE]: excepted " + this);
+               if (Development.DEVELOPMENT) {
+                       if(Development.<Boolean>getProperty(DevelopmentKeys.CACHE_ENTRY_STATE, Bindings.BOOLEAN)) {
+                               System.err.println("[QUERY STATE]: excepted " + this);
+                       }
+               }
        if(statusOrException != DISCARDED) {
                statusOrException = EXCEPTED;
                result = throwable;
@@ -130,8 +145,9 @@ public abstract class CacheEntryBase<Procedure> extends CacheEntry<Procedure> {
     }
 
     @Override
-    public void setPending() {
-       statusOrException = PENDING;
+    public void setPending(QuerySupport querySupport) {
+        statusOrException = PENDING;
+        clearResult(querySupport);
     }
     
     @Override
@@ -424,8 +440,7 @@ public abstract class CacheEntryBase<Procedure> extends CacheEntry<Procedure> {
     
     @Override
     void prepareRecompute(QuerySupport querySupport) {
-               setPending();
-               clearResult(querySupport);
+        setPending(querySupport);
     }
     
     @Override