With Recursive
Definition
The withRecursive method allows you to add the WITH RECURSIVE clause to the query.
Available methods
1. with(KCommonTableExpressionFilled... kCommonTableExpressionsFilled)
- kCommonTableExpressionsFilled: are all Common Table Expressions or CTEs that will be added to the
WITH RECURSIVEclause.
Method hierarchy
The withRecursive method can be used right after the following methods or objects:
and the subsequent method that can be called is:
Example
Java code:
final PermissionMetadata PERMISSION_2 = PERMISSION.alias("pe2");
final KFrom kQueryUnionTree =
k
.select(PERMISSION_2.ID)
.from(PERMISSION_2)
.innerJoin(raw("permission_tree_cte ptc2 ON ptc2.id = %s", PERMISSION_2.PERMISSION_ID));
final KGenericQuery kQueryRecursive =
k
.select(PERMISSION.ID)
.from(PERMISSION)
.where(PERMISSION.ID.eq(14L))
.union(kQueryUnionTree);
final KCommonTableExpressionFilled permissionTreeCte =
cte("permission_tree_cte")
.as(kQueryRecursive, "ptc");
k
.withRecursive(permissionTreeCte)
.update(PERMISSION)
.set(PERMISSION.PERMISSION_ID, PERMISSION.ID.add(val(1)))
.from(permissionTreeCte)
.where(permissionTreeCte.c("id").eq(PERMISSION.ID))
.execute();
SQL generated:
WITH RECURSIVE permission_tree_cte AS (
SELECT pe.id
FROM permission pe
WHERE pe.id = ?1
UNION (
SELECT pe2.id
FROM permission pe2
INNER JOIN permission_tree_cte ptc2 ON ptc2.id = pe2.permission_id
)
)
UPDATE permission pe
SET permission_id = pe.id + ?2
FROM permission_tree_cte ptc
WHERE ptc.id = pe.id
Parameters:
- ?1: 14
- ?2: 1