SEARCH and CYCLE clauses
authorPeter Eisentraut <peter@eisentraut.org>
Mon, 1 Feb 2021 12:54:59 +0000 (13:54 +0100)
committerPeter Eisentraut <peter@eisentraut.org>
Mon, 1 Feb 2021 13:32:51 +0000 (14:32 +0100)
commit3696a600e2292d43c00949ddf0352e4ebb487e5b
tree11f19c8c9e5757c44b8da02d0e1f7b41f8ec5f13
parentbb513b364b4fe31574574c8d0afbb2255268b321
SEARCH and CYCLE clauses

This adds the SQL standard feature that adds the SEARCH and CYCLE
clauses to recursive queries to be able to do produce breadth- or
depth-first search orders and detect cycles.  These clauses can be
rewritten into queries using existing syntax, and that is what this
patch does in the rewriter.

Reviewed-by: Vik Fearing <vik@postgresfriends.org>
Reviewed-by: Pavel Stehule <pavel.stehule@gmail.com>
Discussion: https://www.postgresql.org/message-id/flat/db80ceee-6f97-9b4a-8ee8-3ba0c58e5be2@2ndquadrant.com
28 files changed:
doc/src/sgml/queries.sgml
doc/src/sgml/ref/select.sgml
src/backend/catalog/dependency.c
src/backend/nodes/copyfuncs.c
src/backend/nodes/equalfuncs.c
src/backend/nodes/nodeFuncs.c
src/backend/nodes/outfuncs.c
src/backend/nodes/readfuncs.c
src/backend/parser/analyze.c
src/backend/parser/gram.y
src/backend/parser/parse_agg.c
src/backend/parser/parse_cte.c
src/backend/parser/parse_expr.c
src/backend/parser/parse_func.c
src/backend/parser/parse_relation.c
src/backend/parser/parse_target.c
src/backend/rewrite/Makefile
src/backend/rewrite/rewriteHandler.c
src/backend/rewrite/rewriteSearchCycle.c [new file with mode: 0644]
src/backend/utils/adt/ruleutils.c
src/include/nodes/nodes.h
src/include/nodes/parsenodes.h
src/include/parser/analyze.h
src/include/parser/kwlist.h
src/include/parser/parse_node.h
src/include/rewrite/rewriteSearchCycle.h [new file with mode: 0644]
src/test/regress/expected/with.out
src/test/regress/sql/with.sql