diff --git a/src/main/java/org/caosdb/server/jobs/TransactionStage.java b/src/main/java/org/caosdb/server/jobs/TransactionStage.java index 9e15b4e556269def79d58e532bbe3c9e6cbb9bbd..c265fc25b98aebb303c4f5b9907d3d59c2316347 100644 --- a/src/main/java/org/caosdb/server/jobs/TransactionStage.java +++ b/src/main/java/org/caosdb/server/jobs/TransactionStage.java @@ -50,6 +50,7 @@ import org.caosdb.server.utils.UndoHandler; * @author Timm Fitschen <t.fitschen@indiscale.com> */ public enum TransactionStage { + PRE_INIT, INIT, PRE_CHECK, CHECK, 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 352a7428f2007fc59cbf0b3fb7f067d1198857c1..20a31e3f72429dd22bd9abe1a9eb121e6eb0bcd4 100644 --- a/src/main/java/org/caosdb/server/jobs/core/ExecuteQuery.java +++ b/src/main/java/org/caosdb/server/jobs/core/ExecuteQuery.java @@ -31,6 +31,8 @@ import org.caosdb.server.jobs.JobAnnotation; import org.caosdb.server.jobs.TransactionStage; import org.caosdb.server.query.Query; import org.caosdb.server.query.Query.ParsingException; +import org.caosdb.server.transaction.Retrieve; +import org.caosdb.server.utils.EntityStatus; import org.caosdb.server.utils.ServerMessages; @JobAnnotation(flag = "query", stage = TransactionStage.INIT) @@ -53,8 +55,16 @@ public class ExecuteQuery extends FlagJob { .addMessage(new Message(MessageType.Info, (MessageCode) null, e.getMessage())); } getContainer().addMessage(queryInstance); + int index1 = getTransaction().getPagingIndex1(); + int index2 = getTransaction().getPagingIndex2(); + int ii = 0; for (final EntityInterface entity : getContainer()) { - getTransaction().getSchedule().addAll(loadJobs(entity, getTransaction())); + if (!(getTransaction() instanceof Retrieve) || (ii >= index1 && ii < index2)) { + getTransaction().getSchedule().addAll(loadJobs(entity, getTransaction())); + } else { + entity.setEntityStatus(EntityStatus.IGNORE); + } + ii++; } } } diff --git a/src/main/java/org/caosdb/server/jobs/core/Paging.java b/src/main/java/org/caosdb/server/jobs/core/Paging.java index 5f2a6ed62f48f20d09c34c8ee34190231903ffe7..ce499a5b766b58437bd248255f9394682d3608a1 100644 --- a/src/main/java/org/caosdb/server/jobs/core/Paging.java +++ b/src/main/java/org/caosdb/server/jobs/core/Paging.java @@ -24,14 +24,12 @@ package org.caosdb.server.jobs.core; import java.util.regex.Matcher; import java.util.regex.Pattern; -import org.caosdb.server.entity.EntityInterface; import org.caosdb.server.jobs.FlagJob; import org.caosdb.server.jobs.JobAnnotation; import org.caosdb.server.jobs.TransactionStage; import org.caosdb.server.transaction.Retrieve; -import org.caosdb.server.utils.EntityStatus; -@JobAnnotation(flag = "P", stage = TransactionStage.PRE_TRANSACTION) +@JobAnnotation(flag = "P", stage = TransactionStage.PRE_INIT) public class Paging extends FlagJob { public static final int DEFAULT_LENGTH = 100; @@ -53,6 +51,8 @@ public class Paging extends FlagJob { index2 = index1 + Integer.parseInt(m.group(2)); } } + getTransaction().setPagingIndices(index1, index2); + /* int i = 0; for (final EntityInterface e : getContainer()) { if (i >= index2 || i < index1) { @@ -61,6 +61,7 @@ public class Paging extends FlagJob { } i++; } + */ } } } diff --git a/src/main/java/org/caosdb/server/query/Query.java b/src/main/java/org/caosdb/server/query/Query.java index 88da39bce24f1cabf651eebf1532cab14bddb82c..cf71903e1182ed41bbc8bea1233981290cf87ff4 100644 --- a/src/main/java/org/caosdb/server/query/Query.java +++ b/src/main/java/org/caosdb/server/query/Query.java @@ -858,7 +858,8 @@ public class Query implements QueryInterface, ToElementable, TransactionInterfac /** * Filter out all entities which may not be retrieved by this user due to a missing RETRIEVE - * permission. This function is also designed for filtering of intermediate results. + * permission. This function is also designed for filtering of intermediate results + * TODO describe intermediate results. * * @param tabname * @throws SQLException diff --git a/src/main/java/org/caosdb/server/transaction/Transaction.java b/src/main/java/org/caosdb/server/transaction/Transaction.java index b4d63fbb293e0119cefe90db34b9cfb28f4e0ce1..2b616e995cca42c086a082d61474ebd5f3edeb1a 100644 --- a/src/main/java/org/caosdb/server/transaction/Transaction.java +++ b/src/main/java/org/caosdb/server/transaction/Transaction.java @@ -60,6 +60,8 @@ public abstract class Transaction<C extends TransactionContainer> extends Abstra public static final String CLEAN_UP = "TransactionCleanUp"; private final C container; + private int pagingIndex1; + private int pagingIndex2; private Access access = null; private final Schedule schedule = new Schedule(); @@ -82,6 +84,19 @@ public abstract class Transaction<C extends TransactionContainer> extends Abstra return this.container; } + public void setPagingIndices(int index1, int index2) { + pagingIndex1 = index1; + pagingIndex2 = index2; + } + + public int getPagingIndex1() { + return pagingIndex1; + } + + public int getPagingIndex2() { + return pagingIndex2; + } + /** * Implementation note: Not called in this class, but may be used by subclasses. * @@ -155,6 +170,7 @@ public abstract class Transaction<C extends TransactionContainer> extends Abstra long t1 = System.currentTimeMillis(); try { init(); + this.schedule.runJobs(TransactionStage.PRE_INIT); this.schedule.runJobs(TransactionStage.INIT); getContainer() .getTransactionBenchmark()