DuckDB 2.0 rewrote recursive CTEs.
Walking a 20,000-commit git history: 1.8 to 16 s on 1.5.5, 0.10 s on 2.0, every run.
1.5: re-read the whole table every round.
2.0: read once, build a lookup, touch only the frontier's rows.
Deep parent/child chains are where it shows.