@Override public final Condition andNotExists(Select<?> select) { return getWhere().andNotExists(select); }
@Override public final Condition andNotExists(Select<?> select) { return getWhere().andNotExists(select); }
public List<ProcessKey> grabNext(ProcessStatus[] statuses, Timestamp ageCutoff, int limit) { return txResult(tx -> { List<ProcessKey> keys = tx.select(PROCESS_QUEUE.INSTANCE_ID, PROCESS_QUEUE.CREATED_AT) .from(PROCESS_QUEUE) .where(PROCESS_QUEUE.CURRENT_STATUS.in(Utils.toString(statuses)) .and(PROCESS_QUEUE.LAST_UPDATED_AT.lessOrEqual(ageCutoff)) .andNotExists(selectFrom(PROCESS_STATE_ARCHIVE) .where(PROCESS_STATE_ARCHIVE.INSTANCE_ID.eq(PROCESS_QUEUE.INSTANCE_ID)))) .limit(limit) .forUpdate() .skipLocked() .fetch(r -> new ProcessKey(r.get(PROCESS_QUEUE.INSTANCE_ID), r.get(PROCESS_QUEUE.CREATED_AT))); if (keys.isEmpty()) { return keys; } for (ProcessKey k : keys) { tx.insertInto(PROCESS_STATE_ARCHIVE) .columns(PROCESS_STATE_ARCHIVE.INSTANCE_ID, PROCESS_STATE_ARCHIVE.LAST_UPDATED_AT, PROCESS_STATE_ARCHIVE.STATUS) .values(value(k.getInstanceId()), currentTimestamp(), value(ArchivalStatus.IN_PROGRESS.toString())) .execute(); } return keys; }); }