]> granicus.if.org Git - postgresql/commit
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)
commit44d5be0e5308e951c0c5dc522b4bcacf2bcbc476
tree516f1c70436225751f631e7e686f7ea61b3db9df
parent607b2be7bb230ea4c558cb3101794f94de35ab85
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]