diff options
author | Peter Eisentraut <peter@eisentraut.org> | 2020-10-12 07:46:20 +0200 |
---|---|---|
committer | Peter Eisentraut <peter@eisentraut.org> | 2020-10-12 08:01:21 +0200 |
commit | 3fb676504da9c019540c7384423c7e3d7d394110 (patch) | |
tree | b3ea5e26972c6454a011a01a9df00f80f4c09a9d /doc/src | |
parent | 88ea7a1188d1afb25695124045e0ff81870f55e3 (diff) | |
download | postgresql-3fb676504da9c019540c7384423c7e3d7d394110.tar.gz postgresql-3fb676504da9c019540c7384423c7e3d7d394110.zip |
Adjust cycle detection examples and tests
Adjust the existing cycle detection example and test queries to put
the cycle column before the path column. This is mainly because the
SQL-standard CYCLE clause puts them in that order, and so if we added
that feature that would make the sequence of examples more consistent
and easier to follow.
Discussion: https://www.postgresql.org/message-id/c5603982-0088-7f14-0caa-fdcd0c837b57@2ndquadrant.com
Diffstat (limited to 'doc/src')
-rw-r--r-- | doc/src/sgml/queries.sgml | 26 |
1 files changed, 13 insertions, 13 deletions
diff --git a/doc/src/sgml/queries.sgml b/doc/src/sgml/queries.sgml index 77fb1991aeb..bad97a75b27 100644 --- a/doc/src/sgml/queries.sgml +++ b/doc/src/sgml/queries.sgml @@ -2144,20 +2144,20 @@ SELECT * FROM search_graph; <literal>UNION ALL</literal> to <literal>UNION</literal> would not eliminate the looping. Instead we need to recognize whether we have reached the same row again while following a particular path of links. We add two columns - <structfield>path</structfield> and <structfield>cycle</structfield> to the loop-prone query: + <structfield>is_cycle</structfield> and <structfield>path</structfield> to the loop-prone query: <programlisting> -WITH RECURSIVE search_graph(id, link, data, depth, path, cycle) AS ( +WITH RECURSIVE search_graph(id, link, data, depth, is_cycle, path) AS ( SELECT g.id, g.link, g.data, 1, - ARRAY[g.id], - false + false, + ARRAY[g.id] FROM graph g UNION ALL SELECT g.id, g.link, g.data, sg.depth + 1, - path || g.id, - g.id = ANY(path) + g.id = ANY(path), + path || g.id FROM graph g, search_graph sg - WHERE g.id = sg.link AND NOT cycle + WHERE g.id = sg.link AND NOT is_cycle ) SELECT * FROM search_graph; </programlisting> @@ -2172,17 +2172,17 @@ SELECT * FROM search_graph; compare fields <structfield>f1</structfield> and <structfield>f2</structfield>: <programlisting> -WITH RECURSIVE search_graph(id, link, data, depth, path, cycle) AS ( +WITH RECURSIVE search_graph(id, link, data, depth, is_cycle, path) AS ( SELECT g.id, g.link, g.data, 1, - ARRAY[ROW(g.f1, g.f2)], - false + false, + ARRAY[ROW(g.f1, g.f2)] FROM graph g UNION ALL SELECT g.id, g.link, g.data, sg.depth + 1, - path || ROW(g.f1, g.f2), - ROW(g.f1, g.f2) = ANY(path) + ROW(g.f1, g.f2) = ANY(path), + path || ROW(g.f1, g.f2) FROM graph g, search_graph sg - WHERE g.id = sg.link AND NOT cycle + WHERE g.id = sg.link AND NOT is_cycle ) SELECT * FROM search_graph; </programlisting> |