private SelectOffsetStep<Record1<byte[]>> getRangeQuery(DSLContext ctx, TableReference tableRef, RangeRequest rangeRequest, long timestamp, int maxRows) { boolean reverse = rangeRequest.isReverse(); byte[] start = rangeRequest.getStartInclusive(); byte[] end = rangeRequest.getEndExclusive(); Condition cond = R_TIMESTAMP.lessThan(timestamp); if (start.length > 0) { cond = cond.and(reverse ? R_ROW_NAME.lessOrEqual(start) : R_ROW_NAME.greaterOrEqual(start)); } if (end.length > 0) { cond = cond.and(reverse ? R_ROW_NAME.greaterThan(end) : R_ROW_NAME.lessThan(end)); } return ctx.selectDistinct(R_ROW_NAME) .from(atlasTable(tableRef).as(RANGE_TABLE)) .where(cond) .orderBy(reverse ? R_ROW_NAME.desc() : R_ROW_NAME.asc()) .limit(maxRows); }
private Condition getCompareCondition(Object value, BiPredicate<?, ?> biPredicate, Field<Object> field) { String predicateString = biPredicate.toString(); switch (predicateString) { case ("eq"): return field.eq(value); case ("neq"): return field.notEqual(value); case ("gt"): return field.greaterThan(value); case ("gte"): return field.greaterOrEqual(value); case ("lt"): return field.lessThan(value); case ("lte"): return field.lessOrEqual(value); case ("inside"): List items = (List) value; Object firstItem = items.get(0); Object secondItem = items.get(1); return field.between(firstItem, secondItem); default: throw new IllegalArgumentException("predicate not supported in has step: " + biPredicate.toString()); } }
return field.lessThan(convertToSqlDate(value.toString())); case ("lte"): return field.lessOrEqual(convertToSqlDate(value.toString())); case ("inside"): List items = (List) value;
public Map<String, List<ProjectProcesses>> processByOrgs(int maxProjectRows, Set<UUID> orgIds, Set<ProcessStatus> processStatuses, Timestamp fromUpdatedAt) { Set<String> statuses = processStatuses.stream().map(Enum::name).collect(Collectors.toSet()); try (DSLContext tx = DSL.using(cfg)) { WindowRowsStep<Integer> rnField = rowNumber().over().partitionBy(V_PROCESS_QUEUE.ORG_NAME).orderBy(V_PROCESS_QUEUE.ORG_NAME); SelectHavingStep<Record4<String, String, Integer, Integer>> a = tx.select(V_PROCESS_QUEUE.ORG_NAME, V_PROCESS_QUEUE.PROJECT_NAME, count(), rnField) .from(V_PROCESS_QUEUE) .where(V_PROCESS_QUEUE.ORG_ID.in(orgIds) .and(V_PROCESS_QUEUE.CURRENT_STATUS.in(statuses)) .and(V_PROCESS_QUEUE.LAST_UPDATED_AT.greaterOrEqual(fromUpdatedAt))) .groupBy(V_PROCESS_QUEUE.ORG_NAME, V_PROCESS_QUEUE.PROJECT_NAME); Result<Record3<String, String, Integer>> r = tx.select(a.field(0, String.class), a.field(1, String.class), a.field(2, Integer.class)) .from(a) .where(a.field(rnField).lessOrEqual(maxProjectRows)) .fetch(); Map<String, List<ProjectProcesses>> result = new HashMap<>(); r.forEach(i -> { String orgName = i.value1(); String projectName = i.value2(); int count = i.value3(); result.computeIfAbsent(orgName, (k) -> new ArrayList<>()).add(new ProjectProcesses(projectName, count)); }); return result; } } }
public List<TimedOutEntry> pollExpired(DSLContext tx, int maxEntries) { ProcessQueue q = PROCESS_QUEUE.as("q"); @SuppressWarnings("unchecked") Field<? extends Number> i = (Field<? extends Number>) interval("1 second"); return tx.select(q.INSTANCE_ID, q.CREATED_AT, q.LAST_AGENT_ID, q.TIMEOUT) .from(q) .where(q.CURRENT_STATUS.eq(ProcessStatus.RUNNING.toString()) .and(q.LAST_RUN_AT.plus(q.TIMEOUT.mul(i)).lessOrEqual(currentTimestamp()))) .orderBy(q.CREATED_AT) .limit(maxEntries) .forUpdate() .skipLocked() .fetch(WatchdogDao::toExpiredEntry); }
@Override public Condition visit(IsLessOrEqualQueryCriteria criteria, Boolean inArray) { String[] keys = translateArrayRef(criteria); Field field = DSL.field(databaseInterface.arraySerializer().getFieldName(keys)); Param<?> value; Condition typeCondition = null; if (!isInArrayValue(criteria.getAttributeReference(), inArray)) { value = translateValueToSQL(criteria.getValue()); } else { value = translateValueToArraySerialization(criteria.getValue()); typeCondition = databaseInterface.arraySerializer().typeof( field.getName(), getJsonType(criteria.getValue().getType()) ); } Condition criteriaCondition = field.lessOrEqual(value); if (typeCondition != null) { criteriaCondition = typeCondition.and(criteriaCondition); } return addArrayCondition(criteria, criteriaCondition, keys, inArray); }
public List<String> poll() { @SuppressWarnings("unchecked") Field<? extends Number> i = (Field<? extends Number>) PgUtils.interval("1 second"); return txResult(tx -> { List<String> ids = tx.select(TASKS.TASK_ID) .from(TASKS) .where(TASKS.TASK_INTERVAL.greaterThan(0L).and(TASKS.STARTED_AT.isNull() .or(TASKS.FINISHED_AT.isNotNull() .and(TASKS.FINISHED_AT.plus(TASKS.TASK_INTERVAL.mul(i)).lessOrEqual(currentTimestamp()))))) .forUpdate() .skipLocked() .fetch(TASKS.TASK_ID); if (ids.isEmpty()) { return ids; } tx.update(TASKS) .set(TASKS.STARTED_AT, currentTimestamp()) .set(TASKS.TASK_STATUS, value("RUNNING")) .set(TASKS.FINISHED_AT, (Timestamp)null) .set(TASKS.LAST_UPDATED_AT, currentTimestamp()) .where(TASKS.TASK_ID.in(ids)) .execute(); return ids; }); }