Thread: 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: https://www.postgresql.org/message-id/flat/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(-)