public PolicyRules getRules(DSLContext tx, UUID orgId, UUID projectId, UUID userId) { PolicyEntry entry = getLinked(tx, orgId, projectId, userId); if (entry == null || entry.rules().isEmpty()) { return null; } Result<Record3<String, String, Integer>> rules = tx.withRecursive("children").as( select(POLICIES.POLICY_ID, POLICIES.PARENT_POLICY_ID, POLICIES.POLICY_NAME, POLICIES.RULES, field("1", Integer.class).as("level")).from(POLICIES) .where(POLICIES.POLICY_ID.eq(entry.id())) .unionAll( select(POLICIES.POLICY_ID, POLICIES.PARENT_POLICY_ID, POLICIES.POLICY_NAME, POLICIES.RULES, field("children.level + 1", Integer.class).as("level")).from(POLICIES) .join(name("children")) .on(POLICIES.POLICY_ID.eq( field(name("children", "PARENT_POLICY_ID"), UUID.class))))) .select(POLICIES.as("children").POLICY_NAME, POLICIES.as("children").RULES.cast(String.class), field("level", Integer.class)) .from(name("children")) .orderBy(field("level").desc()) .fetch(); ImmutablePolicyRules.Builder result = ImmutablePolicyRules.builder(); Map<String, Object> mergedRules = new HashMap<>(); for(Record3<String, String, Integer> r : rules) { result.addPolicyNames(r.value1()); mergedRules = ConfigurationUtils.deepMerge(mergedRules, deserialize(r.value2())); } return result .rules(mergedRules) .build(); }
public List<IdAndStatus> getCascade(PartialProcessKey parentKey) { UUID parentInstanceId = parentKey.getInstanceId(); try (DSLContext tx = DSL.using(cfg)) { return tx.withRecursive("children").as( select(PROCESS_QUEUE.INSTANCE_ID, PROCESS_QUEUE.CREATED_AT, PROCESS_QUEUE.CURRENT_STATUS).from(PROCESS_QUEUE) .where(PROCESS_QUEUE.INSTANCE_ID.eq(parentInstanceId)) .unionAll( select(PROCESS_QUEUE.INSTANCE_ID, PROCESS_QUEUE.CREATED_AT, PROCESS_QUEUE.CURRENT_STATUS).from(PROCESS_QUEUE) .join(name("children")) .on(PROCESS_QUEUE.PARENT_INSTANCE_ID.eq( field(name("children", "INSTANCE_ID"), UUID.class))))) .select() .from(name("children")) .fetch(r -> new IdAndStatus(new ProcessKey(r.get(0, UUID.class), r.get(1, Timestamp.class)), ProcessStatus.valueOf(r.get(2, String.class)))); } }
@WithTimer public int getDepth(UUID parentInstanceId) { return txResult(tx -> tx.withRecursive("ancestors").as( select(PROCESS_QUEUE.INSTANCE_ID, PROCESS_QUEUE.PARENT_INSTANCE_ID, field("1", Integer.class).as("depth")) .from(PROCESS_QUEUE) .where(PROCESS_QUEUE.INSTANCE_ID.eq(parentInstanceId)) .unionAll( select(PROCESS_QUEUE.INSTANCE_ID, PROCESS_QUEUE.PARENT_INSTANCE_ID, field("1 + ancestors.depth", Integer.class).as("depth")) .from(PROCESS_QUEUE) .join(name("ancestors")) .on(PROCESS_QUEUE.INSTANCE_ID.eq( field(name("ancestors", "PARENT_INSTANCE_ID"), UUID.class))))) .select(max(field(name("ancestors", "depth"), Integer.class))) .from(name("ancestors")) .fetchOne(Record1::value1)); } }
select(fields).where(falseCondition()).unionAll( select(field("*")).from(((Table<?>) wrapped).as(alias)));
private List<InventoryDataItem> get(DSLContext tx, UUID inventoryId, String path) { Table<Record> nodes = table("nodes"); Inventories i1 = INVENTORIES.as("i1"); Inventories i2 = INVENTORIES.as("i2"); SelectConditionStep<Record3<UUID, UUID, Integer>> s1 = select(i1.INVENTORY_ID, i1.PARENT_INVENTORY_ID, value(1)) .from(i1) .where(i1.INVENTORY_ID.eq(inventoryId)); SelectConditionStep<Record3<UUID, UUID, Integer>> s2 = select(i2.INVENTORY_ID, i2.PARENT_INVENTORY_ID, level().add(1)) .from(i2, nodes) .where(i2.INVENTORY_ID.eq(INVENTORIES.as("nodes").PARENT_INVENTORY_ID)); SelectConditionStep<Record3<String, String, Integer>> s = tx.withRecursive("nodes", INVENTORIES.INVENTORY_ID.getName(), INVENTORIES.PARENT_INVENTORY_ID.getName(), "level") .as(s1.unionAll(s2)) .select(INVENTORY_DATA.ITEM_PATH, INVENTORY_DATA.ITEM_DATA.cast(String.class), level()) .from(INVENTORY_DATA, nodes) .where(INVENTORY_DATA.INVENTORY_ID.eq(INVENTORIES.as("nodes").INVENTORY_ID) .and(INVENTORY_DATA.ITEM_PATH.startsWith(path))); return s.fetch(this::toEntry); }
INVENTORIES.OWNER_ID.getName(), USERS.USERNAME.getName()) .as(s1.unionAll(s2)) .select().from(nodes) .fetch(InventoryDao::toEntity);
.unionAll( select( PG_NAMESPACE.NSPNAME,
.where(d.TYPTYPE.eq("d")) .and(n.NSPNAME.in(getInputSchemata())) .unionAll( select( field(name("domains", "domain_id"), Long.class),
.and(pg_p.PRORETSET) .unionAll(