Skip to main content

Module recursive_cte

Module recursive_cte 

Source
Expand description

E5.3 — Recursive CTE: iterative fixpoint execution.

DataFusion does not support WITH RECURSIVE natively. This module adds:

  1. Detection: parse WITH RECURSIVE name AS (base UNION ALL recursive).
  2. Rewriter: expand a recursive CTE into a NodeOp::RecursiveCte plan node.
  3. Iterative executor: given a SqlEngine, execute base + recursive rounds until fixpoint or max_iterations.

§Execution model

accumulator = execute(base_query)
for i in 0..max_iterations:
    delta = execute(recursive_query with cte_name = accumulator)
    if delta is empty: break (fixpoint)
    accumulator = accumulator UNION ALL delta
return accumulator

Each iteration materialises delta fully before the next starts. This is the “naïve” fixpoint strategy, suitable for transitive-closure and tree-traversal queries on bounded datasets.

Structs§

RecursiveCteResult
Result of a recursive CTE execution.
RecursiveCteStatement
A parsed WITH RECURSIVE statement ready for iterative execution.

Constants§

DEFAULT_MAX_ITERATIONS
Default maximum recursion depth for WITH RECURSIVE.

Functions§

build_recursive_cte_op
Build a NodeOp::RecursiveCte from a parsed RecursiveCteStatement.
execute_recursive_cte
Execute a recursive CTE using a SqlEngine-like executor callback.
parse_recursive_cte
Attempt to parse sql as a WITH RECURSIVE statement.