From 0eeade2f4e513cb0d651d457c558f7d72671d0f2 Mon Sep 17 00:00:00 2001
From: Timm Fitschen <t.fitschen@indiscale.com>
Date: Wed, 18 Nov 2020 02:32:15 +0100
Subject: [PATCH] FIX buggy job loading during queries

---
 .../org/caosdb/server/jobs/core/ExecuteQuery.java    |  4 ++++
 .../org/caosdb/server/jobs/core/RetrieveAllJob.java  |  4 ++++
 .../org/caosdb/server/transaction/Transaction.java   | 12 +-----------
 3 files changed, 9 insertions(+), 11 deletions(-)

diff --git a/src/main/java/org/caosdb/server/jobs/core/ExecuteQuery.java b/src/main/java/org/caosdb/server/jobs/core/ExecuteQuery.java
index b6583f02..7f5444b3 100644
--- a/src/main/java/org/caosdb/server/jobs/core/ExecuteQuery.java
+++ b/src/main/java/org/caosdb/server/jobs/core/ExecuteQuery.java
@@ -22,6 +22,7 @@
  */
 package org.caosdb.server.jobs.core;
 
+import org.caosdb.server.entity.EntityInterface;
 import org.caosdb.server.entity.Message;
 import org.caosdb.server.jobs.FlagJob;
 import org.caosdb.server.jobs.JobAnnotation;
@@ -51,5 +52,8 @@ public class ExecuteQuery extends FlagJob {
       getContainer().addMessage(new Message(e.getMessage()));
     }
     getContainer().addMessage(queryInstance);
+    for (EntityInterface entity : getContainer()) {
+      getTransaction().getSchedule().addAll(loadJobs(entity, getTransaction()));
+    }
   }
 }
diff --git a/src/main/java/org/caosdb/server/jobs/core/RetrieveAllJob.java b/src/main/java/org/caosdb/server/jobs/core/RetrieveAllJob.java
index 1ca43cec..603d861a 100644
--- a/src/main/java/org/caosdb/server/jobs/core/RetrieveAllJob.java
+++ b/src/main/java/org/caosdb/server/jobs/core/RetrieveAllJob.java
@@ -23,6 +23,7 @@
 package org.caosdb.server.jobs.core;
 
 import org.caosdb.server.database.backend.transaction.RetrieveAll;
+import org.caosdb.server.entity.EntityInterface;
 import org.caosdb.server.jobs.FlagJob;
 import org.caosdb.server.jobs.JobAnnotation;
 import org.caosdb.server.jobs.JobExecutionTime;
@@ -37,6 +38,9 @@ public class RetrieveAllJob extends FlagJob {
         value = "ENTITY";
       }
       execute(new RetrieveAll(getContainer(), value));
+      for (EntityInterface entity : getContainer()) {
+        getTransaction().getSchedule().addAll(loadJobs(entity, getTransaction()));
+      }
     }
   }
 }
diff --git a/src/main/java/org/caosdb/server/transaction/Transaction.java b/src/main/java/org/caosdb/server/transaction/Transaction.java
index 6fb28c6f..b0f87105 100644
--- a/src/main/java/org/caosdb/server/transaction/Transaction.java
+++ b/src/main/java/org/caosdb/server/transaction/Transaction.java
@@ -105,17 +105,7 @@ public abstract class Transaction<C extends TransactionContainer> extends Abstra
 
       // additionally load datatype job
       if (e.hasValue()) {
-        boolean found = false;
-        for (final Job j : loadJobs) {
-
-          if (CheckDatatypePresent.class.isInstance(j)
-              && ((CheckDatatypePresent) j).getEntity() == e) {
-            found = true;
-          }
-        }
-        if (!found) {
-          this.schedule.add(new CheckDatatypePresent().init(Mode.MUST, e, this));
-        }
+        this.schedule.add(new CheckDatatypePresent().init(Mode.MUST, e, this));
       }
 
       // load pickup job if necessary
-- 
GitLab