-
Notifications
You must be signed in to change notification settings - Fork 6.6k
Commit
This commit does not belong to any branch on this repository, and may belong to a fork outside of the repository.
- Loading branch information
1 parent
f3b8e17
commit 1593978
Showing
18 changed files
with
2,125 additions
and
0 deletions.
There are no files selected for viewing
97 changes: 97 additions & 0 deletions
97
tests/queries/0_stateless/03033_recursive_cte_basic.reference
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,97 @@ | ||
-- { echoOn } | ||
|
||
WITH RECURSIVE recursive_cte AS (SELECT 1 AS n UNION ALL SELECT n + 1 FROM recursive_cte WHERE n < 10) | ||
SELECT n FROM recursive_cte; | ||
1 | ||
2 | ||
3 | ||
4 | ||
5 | ||
6 | ||
7 | ||
8 | ||
9 | ||
10 | ||
SELECT '--'; | ||
-- | ||
WITH RECURSIVE recursive_cte AS (SELECT toUInt8(1) AS n UNION ALL SELECT toUInt8(n + 1) FROM recursive_cte WHERE n < 10) | ||
SELECT n FROM recursive_cte; | ||
1 | ||
2 | ||
3 | ||
4 | ||
5 | ||
6 | ||
7 | ||
8 | ||
9 | ||
10 | ||
SELECT '--'; | ||
-- | ||
WITH RECURSIVE recursive_cte AS (SELECT toUInt16(1) AS n UNION ALL SELECT toUInt8(n + 1) FROM recursive_cte WHERE n < 10) | ||
SELECT n FROM recursive_cte; | ||
1 | ||
2 | ||
3 | ||
4 | ||
5 | ||
6 | ||
7 | ||
8 | ||
9 | ||
10 | ||
SELECT '--'; | ||
-- | ||
WITH RECURSIVE recursive_cte AS (SELECT materialize(toUInt16(1)) AS n UNION ALL SELECT toUInt8(n + 1) FROM recursive_cte WHERE n < 10) | ||
SELECT n FROM recursive_cte; | ||
1 | ||
2 | ||
3 | ||
4 | ||
5 | ||
6 | ||
7 | ||
8 | ||
9 | ||
10 | ||
SELECT '--'; | ||
-- | ||
WITH RECURSIVE recursive_cte AS (SELECT toUInt16(1) AS n UNION ALL SELECT materialize(toUInt8(n + 1)) FROM recursive_cte WHERE n < 10) | ||
SELECT n FROM recursive_cte; | ||
1 | ||
2 | ||
3 | ||
4 | ||
5 | ||
6 | ||
7 | ||
8 | ||
9 | ||
10 | ||
SELECT '--'; | ||
-- | ||
WITH RECURSIVE recursive_cte AS (SELECT toUInt16(1) AS n, '1' AS concat UNION ALL SELECT materialize(toUInt8(n + 1)), concat || toString(n + 1) FROM recursive_cte WHERE n < 10) | ||
SELECT n, concat FROM recursive_cte; | ||
1 1 | ||
2 12 | ||
3 123 | ||
4 1234 | ||
5 12345 | ||
6 123456 | ||
7 1234567 | ||
8 12345678 | ||
9 123456789 | ||
10 12345678910 | ||
SELECT '--'; | ||
-- | ||
WITH RECURSIVE recursive_cte AS (SELECT 1 AS n UNION ALL SELECT n + 1 FROM recursive_cte) | ||
SELECT n FROM recursive_cte LIMIT 5; | ||
1 | ||
2 | ||
3 | ||
4 | ||
5 | ||
SELECT '--'; | ||
-- | ||
WITH RECURSIVE recursive_cte AS (SELECT materialize(toUInt8(1)) AS n UNION ALL SELECT materialize(toUInt8(n + 1)) FROM recursive_cte WHERE n < 10) | ||
SELECT n FROM recursive_cte FORMAT Null SETTINGS max_recursive_cte_evaluation_depth = 5; -- { serverError TOO_DEEP_RECURSION } |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,41 @@ | ||
-- { echoOn } | ||
|
||
WITH RECURSIVE recursive_cte AS (SELECT 1 AS n UNION ALL SELECT n + 1 FROM recursive_cte WHERE n < 10) | ||
SELECT n FROM recursive_cte; | ||
|
||
SELECT '--'; | ||
|
||
WITH RECURSIVE recursive_cte AS (SELECT toUInt8(1) AS n UNION ALL SELECT toUInt8(n + 1) FROM recursive_cte WHERE n < 10) | ||
SELECT n FROM recursive_cte; | ||
|
||
SELECT '--'; | ||
|
||
WITH RECURSIVE recursive_cte AS (SELECT toUInt16(1) AS n UNION ALL SELECT toUInt8(n + 1) FROM recursive_cte WHERE n < 10) | ||
SELECT n FROM recursive_cte; | ||
|
||
SELECT '--'; | ||
|
||
WITH RECURSIVE recursive_cte AS (SELECT materialize(toUInt16(1)) AS n UNION ALL SELECT toUInt8(n + 1) FROM recursive_cte WHERE n < 10) | ||
SELECT n FROM recursive_cte; | ||
|
||
SELECT '--'; | ||
|
||
WITH RECURSIVE recursive_cte AS (SELECT toUInt16(1) AS n UNION ALL SELECT materialize(toUInt8(n + 1)) FROM recursive_cte WHERE n < 10) | ||
SELECT n FROM recursive_cte; | ||
|
||
SELECT '--'; | ||
|
||
WITH RECURSIVE recursive_cte AS (SELECT toUInt16(1) AS n, '1' AS concat UNION ALL SELECT materialize(toUInt8(n + 1)), concat || toString(n + 1) FROM recursive_cte WHERE n < 10) | ||
SELECT n, concat FROM recursive_cte; | ||
|
||
SELECT '--'; | ||
|
||
WITH RECURSIVE recursive_cte AS (SELECT 1 AS n UNION ALL SELECT n + 1 FROM recursive_cte) | ||
SELECT n FROM recursive_cte LIMIT 5; | ||
|
||
SELECT '--'; | ||
|
||
WITH RECURSIVE recursive_cte AS (SELECT materialize(toUInt8(1)) AS n UNION ALL SELECT materialize(toUInt8(n + 1)) FROM recursive_cte WHERE n < 10) | ||
SELECT n FROM recursive_cte FORMAT Null SETTINGS max_recursive_cte_evaluation_depth = 5; -- { serverError TOO_DEEP_RECURSION } | ||
|
||
-- { echoOff } |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,9 @@ | ||
0 \N ROOT | ||
1 0 Child_1 | ||
2 0 Child_2 | ||
3 1 Child_1_1 | ||
-- | ||
0 \N ROOT [0] | ||
1 0 Child_1 [0,1] | ||
2 0 Child_2 [0,2] | ||
3 1 Child_1_1 [0,1,3] |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,35 @@ | ||
DROP TABLE IF EXISTS tree; | ||
CREATE TABLE tree | ||
( | ||
id UInt64, | ||
link Nullable(UInt64), | ||
data String | ||
) ENGINE=TinyLog; | ||
|
||
INSERT INTO tree VALUES (0, NULL, 'ROOT'), (1, 0, 'Child_1'), (2, 0, 'Child_2'), (3, 1, 'Child_1_1'); | ||
|
||
WITH RECURSIVE search_tree AS ( | ||
SELECT id, link, data | ||
FROM tree t | ||
WHERE t.id = 0 | ||
UNION ALL | ||
SELECT t.id, t.link, t.data | ||
FROM tree t, search_tree st | ||
WHERE t.link = st.id | ||
) | ||
SELECT * FROM search_tree; | ||
|
||
SELECT '--'; | ||
|
||
WITH RECURSIVE search_tree AS ( | ||
SELECT id, link, data, [t.id] AS path | ||
FROM tree t | ||
WHERE t.id = 0 | ||
UNION ALL | ||
SELECT t.id, t.link, t.data, arrayConcat(path, [t.id]) | ||
FROM tree t, search_tree st | ||
WHERE t.link = st.id | ||
) | ||
SELECT * FROM search_tree; | ||
|
||
DROP TABLE tree; |
109 changes: 109 additions & 0 deletions
109
tests/queries/0_stateless/03035_recursive_cte_postgres_1.reference
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,109 @@ | ||
/** | ||
* Based on https://github.com/postgres/postgres/blob/master/src/test/regress/sql/with.sql, license: | ||
* | ||
* PostgreSQL Database Management System | ||
* (formerly known as Postgres, then as Postgres95) | ||
* | ||
* Portions Copyright (c) 1996-2024, PostgreSQL Global Development Group | ||
* | ||
* Portions Copyright (c) 1994, The Regents of the University of California | ||
* | ||
* Permission to use, copy, modify, and distribute this software and its | ||
* documentation for any purpose, without fee, and without a written agreement | ||
* is hereby granted, provided that the above copyright notice and this | ||
* paragraph and the following two paragraphs appear in all copies. | ||
* | ||
* IN NO EVENT SHALL THE UNIVERSITY OF CALIFORNIA BE LIABLE TO ANY PARTY FOR | ||
* DIRECT, INDIRECT, SPECIAL, INCIDENTAL, OR CONSEQUENTIAL DAMAGES, INCLUDING | ||
* LOST PROFITS, ARISING OUT OF THE USE OF THIS SOFTWARE AND ITS | ||
* DOCUMENTATION, EVEN IF THE UNIVERSITY OF CALIFORNIA HAS BEEN ADVISED OF THE | ||
* POSSIBILITY OF SUCH DAMAGE. | ||
* | ||
* THE UNIVERSITY OF CALIFORNIA SPECIFICALLY DISCLAIMS ANY WARRANTIES, | ||
* INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY | ||
* AND FITNESS FOR A PARTICULAR PURPOSE. THE SOFTWARE PROVIDED HEREUNDER IS | ||
* ON AN "AS IS" BASIS, AND THE UNIVERSITY OF CALIFORNIA HAS NO OBLIGATIONS TO | ||
*PROVIDE MAINTENANCE, SUPPORT, UPDATES, ENHANCEMENTS, OR MODIFICATIONS. | ||
*/ | ||
|
||
-- | ||
-- Tests for common table expressions (WITH query, ... SELECT ...) | ||
-- | ||
|
||
-- { echoOn } | ||
|
||
-- WITH RECURSIVE | ||
|
||
-- sum of 1..100 | ||
WITH RECURSIVE t AS ( | ||
SELECT 1 AS n | ||
UNION ALL | ||
SELECT n+1 FROM t WHERE n < 100 | ||
) | ||
SELECT sum(n) FROM t; | ||
5050 | ||
WITH RECURSIVE t AS ( | ||
SELECT 1 AS n | ||
UNION ALL | ||
SELECT n+1 FROM t WHERE n < 5 | ||
) | ||
SELECT * FROM t; | ||
1 | ||
2 | ||
3 | ||
4 | ||
5 | ||
-- This'd be an infinite loop, but outside query reads only as much as needed | ||
WITH RECURSIVE t AS ( | ||
SELECT 1 AS n | ||
UNION ALL | ||
SELECT n+1 FROM t) | ||
SELECT * FROM t LIMIT 10; | ||
1 | ||
2 | ||
3 | ||
4 | ||
5 | ||
6 | ||
7 | ||
8 | ||
9 | ||
10 | ||
WITH RECURSIVE t AS ( | ||
SELECT 'foo' AS n | ||
UNION ALL | ||
SELECT n || ' bar' FROM t WHERE length(n) < 20 | ||
) | ||
SELECT n, toTypeName(n) FROM t; | ||
foo String | ||
foo bar String | ||
foo bar bar String | ||
foo bar bar bar String | ||
foo bar bar bar bar String | ||
foo bar bar bar bar bar String | ||
WITH RECURSIVE t AS ( | ||
SELECT '7' AS n | ||
UNION ALL | ||
SELECT n+1 FROM t WHERE n < 10 | ||
) | ||
SELECT n, toTypeName(n) FROM t; -- { serverError ILLEGAL_TYPE_OF_ARGUMENT } | ||
-- Deeply nested WITH caused a list-munging problem in v13 | ||
-- Detection of cross-references and self-references | ||
WITH RECURSIVE w1 AS | ||
(WITH w2 AS | ||
(WITH w3 AS | ||
(WITH w4 AS | ||
(WITH w5 AS | ||
(WITH RECURSIVE w6 AS | ||
(WITH w7 AS | ||
(WITH w8 AS | ||
(SELECT 1) | ||
SELECT * FROM w8) | ||
SELECT * FROM w7) | ||
SELECT * FROM w6) | ||
SELECT * FROM w5) | ||
SELECT * FROM w4) | ||
SELECT * FROM w3) | ||
SELECT * FROM w2) | ||
SELECT * FROM w1; | ||
1 |
93 changes: 93 additions & 0 deletions
93
tests/queries/0_stateless/03035_recursive_cte_postgres_1.sql
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,93 @@ | ||
/** | ||
* Based on https://github.com/postgres/postgres/blob/master/src/test/regress/sql/with.sql, license: | ||
* | ||
* PostgreSQL Database Management System | ||
* (formerly known as Postgres, then as Postgres95) | ||
* | ||
* Portions Copyright (c) 1996-2024, PostgreSQL Global Development Group | ||
* | ||
* Portions Copyright (c) 1994, The Regents of the University of California | ||
* | ||
* Permission to use, copy, modify, and distribute this software and its | ||
* documentation for any purpose, without fee, and without a written agreement | ||
* is hereby granted, provided that the above copyright notice and this | ||
* paragraph and the following two paragraphs appear in all copies. | ||
* | ||
* IN NO EVENT SHALL THE UNIVERSITY OF CALIFORNIA BE LIABLE TO ANY PARTY FOR | ||
* DIRECT, INDIRECT, SPECIAL, INCIDENTAL, OR CONSEQUENTIAL DAMAGES, INCLUDING | ||
* LOST PROFITS, ARISING OUT OF THE USE OF THIS SOFTWARE AND ITS | ||
* DOCUMENTATION, EVEN IF THE UNIVERSITY OF CALIFORNIA HAS BEEN ADVISED OF THE | ||
* POSSIBILITY OF SUCH DAMAGE. | ||
* | ||
* THE UNIVERSITY OF CALIFORNIA SPECIFICALLY DISCLAIMS ANY WARRANTIES, | ||
* INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY | ||
* AND FITNESS FOR A PARTICULAR PURPOSE. THE SOFTWARE PROVIDED HEREUNDER IS | ||
* ON AN "AS IS" BASIS, AND THE UNIVERSITY OF CALIFORNIA HAS NO OBLIGATIONS TO | ||
*PROVIDE MAINTENANCE, SUPPORT, UPDATES, ENHANCEMENTS, OR MODIFICATIONS. | ||
*/ | ||
|
||
-- | ||
-- Tests for common table expressions (WITH query, ... SELECT ...) | ||
-- | ||
|
||
-- { echoOn } | ||
|
||
-- WITH RECURSIVE | ||
|
||
-- sum of 1..100 | ||
WITH RECURSIVE t AS ( | ||
SELECT 1 AS n | ||
UNION ALL | ||
SELECT n+1 FROM t WHERE n < 100 | ||
) | ||
SELECT sum(n) FROM t; | ||
|
||
WITH RECURSIVE t AS ( | ||
SELECT 1 AS n | ||
UNION ALL | ||
SELECT n+1 FROM t WHERE n < 5 | ||
) | ||
SELECT * FROM t; | ||
|
||
-- This'd be an infinite loop, but outside query reads only as much as needed | ||
WITH RECURSIVE t AS ( | ||
SELECT 1 AS n | ||
UNION ALL | ||
SELECT n+1 FROM t) | ||
SELECT * FROM t LIMIT 10; | ||
|
||
WITH RECURSIVE t AS ( | ||
SELECT 'foo' AS n | ||
UNION ALL | ||
SELECT n || ' bar' FROM t WHERE length(n) < 20 | ||
) | ||
SELECT n, toTypeName(n) FROM t; | ||
|
||
WITH RECURSIVE t AS ( | ||
SELECT '7' AS n | ||
UNION ALL | ||
SELECT n+1 FROM t WHERE n < 10 | ||
) | ||
SELECT n, toTypeName(n) FROM t; -- { serverError ILLEGAL_TYPE_OF_ARGUMENT } | ||
|
||
-- Deeply nested WITH caused a list-munging problem in v13 | ||
-- Detection of cross-references and self-references | ||
WITH RECURSIVE w1 AS | ||
(WITH w2 AS | ||
(WITH w3 AS | ||
(WITH w4 AS | ||
(WITH w5 AS | ||
(WITH RECURSIVE w6 AS | ||
(WITH w7 AS | ||
(WITH w8 AS | ||
(SELECT 1) | ||
SELECT * FROM w8) | ||
SELECT * FROM w7) | ||
SELECT * FROM w6) | ||
SELECT * FROM w5) | ||
SELECT * FROM w4) | ||
SELECT * FROM w3) | ||
SELECT * FROM w2) | ||
SELECT * FROM w1; | ||
|
||
-- { echoOff } |
Oops, something went wrong.