jOOQ Dynami c Количество предложений WITH - PullRequest
1 голос
/ 17 июня 2020

Я играюсь с jOOQ и вложенными запросами. У меня есть полезная нагрузка JSON, которая может содержать множество подзапросов. Я хочу рассматривать эти подзапросы как переменное количество общих табличных выражений (т.е. CTE в предложении WITH). В настоящее время у меня есть этот рабочий пример, но он равен c по количеству включенных в него CTE. Как мне выполнить sh переменное количество CTE в предложении WITH? Перед выбором окончательного результата необходимо проверить, поддерживает ли jOOQ ссылку на один CTE в другом CTE. Мне нужно будет выполнить sh что-то вроде этого:


    /*
    +-----------------+
    |sum_of_everything|
    +-----------------+
    |              100|
    +-----------------+
     */
    Supplier<Stream<Map<String, Object>>> resultsWith =
        () ->
            dslContext
                .with("s1").as(query1)
                .with("s2").as(query2) // should be able to reference "s1" i.e. query1
                ...
                .with("sNMinus1").as(queryNMinus1)
                .with("sN").as(queryN) // should be able to reference any upstream CTE
                .select(sum(field("1", Integer.class)).as("sum_of_everything"))
                .from(table(name("sN")))
                .fetchStream()
                .map(Record::intoMap);

1 Ответ

1 голос
/ 17 июня 2020

Вы можете создать экземпляр CommonTableExpression, начиная с Name, используя Name.as(Select) например

CommonTableExpression<?> s1 = name("s1").as(query1);
CommonTableExpression<?> s2 = name("s2").as(query2);

// And then (or, of course, use a Collection)
dslContext.with(s1, s2, ..., SN)
...