Implement SQL-standard WITH clauses, including WITH RECURSIVE.
authorTom Lane <tgl@sss.pgh.pa.us>
Sat, 4 Oct 2008 21:56:55 +0000 (21:56 +0000)
committerTom Lane <tgl@sss.pgh.pa.us>
Sat, 4 Oct 2008 21:56:55 +0000 (21:56 +0000)
commitbc5d2de37c5dd99c2057763fe24174dee1ee161b
tree0c2d055e1054c3366d2166a7783227a60535de78
parenteab1a5a1041f3a15a5856104c87ebfb8b3eb7e78
Implement SQL-standard WITH clauses, including WITH RECURSIVE.

There are some unimplemented aspects: recursive queries must use UNION ALL
(should allow UNION too), and we don't have SEARCH or CYCLE clauses.
These might or might not get done for 8.4, but even without them it's a
pretty useful feature.

There are also a couple of small loose ends and definitional quibbles,
which I'll send a memo about to pgsql-hackers shortly.  But let's land
the patch now so we can get on with other development.

Yoshiyuki Asaba, with lots of help from Tatsuo Ishii and Tom Lane
77 files changed:
doc/src/sgml/errcodes.sgml
doc/src/sgml/queries.sgml
doc/src/sgml/ref/select.sgml
doc/src/sgml/ref/select_into.sgml
src/backend/catalog/dependency.c
src/backend/commands/explain.c
src/backend/executor/Makefile
src/backend/executor/execAmi.c
src/backend/executor/execProcnode.c
src/backend/executor/nodeCtescan.c [new file with mode: 0644]
src/backend/executor/nodeRecursiveunion.c [new file with mode: 0644]
src/backend/executor/nodeSubplan.c
src/backend/executor/nodeWorktablescan.c [new file with mode: 0644]
src/backend/nodes/copyfuncs.c
src/backend/nodes/equalfuncs.c
src/backend/nodes/nodeFuncs.c
src/backend/nodes/outfuncs.c
src/backend/nodes/print.c
src/backend/nodes/readfuncs.c
src/backend/optimizer/path/allpaths.c
src/backend/optimizer/path/clausesel.c
src/backend/optimizer/path/costsize.c
src/backend/optimizer/path/joinpath.c
src/backend/optimizer/plan/createplan.c
src/backend/optimizer/plan/planner.c
src/backend/optimizer/plan/setrefs.c
src/backend/optimizer/plan/subselect.c
src/backend/optimizer/prep/prepjointree.c
src/backend/optimizer/prep/prepunion.c
src/backend/optimizer/util/clauses.c
src/backend/optimizer/util/pathnode.c
src/backend/optimizer/util/plancat.c
src/backend/optimizer/util/relnode.c
src/backend/parser/Makefile
src/backend/parser/analyze.c
src/backend/parser/gram.y
src/backend/parser/keywords.c
src/backend/parser/parse_agg.c
src/backend/parser/parse_clause.c
src/backend/parser/parse_cte.c [new file with mode: 0644]
src/backend/parser/parse_relation.c
src/backend/parser/parse_target.c
src/backend/parser/parse_type.c
src/backend/rewrite/rewriteDefine.c
src/backend/rewrite/rewriteHandler.c
src/backend/rewrite/rewriteManip.c
src/backend/utils/adt/ruleutils.c
src/backend/utils/cache/plancache.c
src/backend/utils/sort/tuplestore.c
src/bin/psql/tab-complete.c
src/include/catalog/catversion.h
src/include/executor/nodeCtescan.h [new file with mode: 0644]
src/include/executor/nodeRecursiveunion.h [new file with mode: 0644]
src/include/executor/nodeWorktablescan.h [new file with mode: 0644]
src/include/nodes/execnodes.h
src/include/nodes/nodeFuncs.h
src/include/nodes/nodes.h
src/include/nodes/parsenodes.h
src/include/nodes/plannodes.h
src/include/nodes/primnodes.h
src/include/nodes/relation.h
src/include/optimizer/cost.h
src/include/optimizer/pathnode.h
src/include/optimizer/planmain.h
src/include/optimizer/planner.h
src/include/optimizer/subselect.h
src/include/parser/parse_cte.h [new file with mode: 0644]
src/include/parser/parse_node.h
src/include/parser/parse_relation.h
src/include/utils/errcodes.h
src/include/utils/tuplestore.h
src/interfaces/ecpg/preproc/preproc.y
src/pl/plpgsql/src/plerrcodes.h
src/test/regress/expected/with.out [new file with mode: 0644]
src/test/regress/parallel_schedule
src/test/regress/serial_schedule
src/test/regress/sql/with.sql [new file with mode: 0644]