jOOQ WITH 子句的动态数量
jOOQ Dynamic Number of WITH Clauses
我正在研究 jOOQ 和嵌套查询。我有一个 JSON 有效负载,其中可能包含许多子查询。我想将这些子查询视为可变数量的 Common Table 表达式(即 WITH 子句中的 CTE)。目前我有这个工作示例,但它包含的 CTE 数量是静态的。我如何在 WITH 子句中完成可变数量的 CTE?
/*
+-----------------+
|sum_of_everything|
+-----------------+
| 100|
+-----------------+
*/
Supplier<Stream<Map<String, Object>>> resultsWith =
() ->
dslContext
.with("s1")
.as(query)
.select(sum(field("1", Integer.class)).as("sum_of_everything"))
.from(table(name("s1")))
.fetchStream()
.map(Record::intoMap);
最终我需要反序列化 JSON 有效负载以确保 CTE 引用层次结构正常工作,并且我需要查看 jOOQ
是否支持在选择最后结果。我需要完成这样的事情:
/*
+-----------------+
|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);
您可以创建 CommonTableExpression
instance starting out from a Name
, using 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)
我正在研究 jOOQ 和嵌套查询。我有一个 JSON 有效负载,其中可能包含许多子查询。我想将这些子查询视为可变数量的 Common Table 表达式(即 WITH 子句中的 CTE)。目前我有这个工作示例,但它包含的 CTE 数量是静态的。我如何在 WITH 子句中完成可变数量的 CTE?
/*
+-----------------+
|sum_of_everything|
+-----------------+
| 100|
+-----------------+
*/
Supplier<Stream<Map<String, Object>>> resultsWith =
() ->
dslContext
.with("s1")
.as(query)
.select(sum(field("1", Integer.class)).as("sum_of_everything"))
.from(table(name("s1")))
.fetchStream()
.map(Record::intoMap);
最终我需要反序列化 JSON 有效负载以确保 CTE 引用层次结构正常工作,并且我需要查看 jOOQ
是否支持在选择最后结果。我需要完成这样的事情:
/*
+-----------------+
|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);
您可以创建 CommonTableExpression
instance starting out from a Name
, using 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)