pgsql: SEARCH and CYCLE clauses
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: /messages/by-id/db80ceee-6f97-9b4a-8ee8-3ba0c58e5be2@2ndquadrant.com
Branch
------
master
Details
-------
https://git.postgresql.org/pg/commitdiff/3696a600e2292d43c00949ddf0352e4ebb487e5b
Modified Files
--------------
doc/src/sgml/queries.sgml | 64 ++-
doc/src/sgml/ref/select.sgml | 44 ++
src/backend/catalog/dependency.c | 15 +
src/backend/nodes/copyfuncs.c | 40 ++
src/backend/nodes/equalfuncs.c | 36 ++
src/backend/nodes/nodeFuncs.c | 42 +-
src/backend/nodes/outfuncs.c | 36 ++
src/backend/nodes/readfuncs.c | 44 ++
src/backend/parser/analyze.c | 47 ++-
src/backend/parser/gram.y | 58 ++-
src/backend/parser/parse_agg.c | 7 +
src/backend/parser/parse_cte.c | 193 +++++++++
src/backend/parser/parse_expr.c | 4 +
src/backend/parser/parse_func.c | 3 +
src/backend/parser/parse_relation.c | 54 ++-
src/backend/parser/parse_target.c | 17 +-
src/backend/rewrite/Makefile | 1 +
src/backend/rewrite/rewriteHandler.c | 18 +
src/backend/rewrite/rewriteSearchCycle.c | 668 +++++++++++++++++++++++++++++++
src/backend/utils/adt/ruleutils.c | 47 +++
src/include/nodes/nodes.h | 2 +
src/include/nodes/parsenodes.h | 30 +-
src/include/parser/analyze.h | 2 +
src/include/parser/kwlist.h | 2 +
src/include/parser/parse_node.h | 2 +
src/include/rewrite/rewriteSearchCycle.h | 21 +
src/test/regress/expected/with.out | 558 ++++++++++++++++++++++++++
src/test/regress/sql/with.sql | 279 +++++++++++++
28 files changed, 2301 insertions(+), 33 deletions(-)