diff options
author | Igor Babaev <igor@askmonty.org> | 2016-11-13 14:55:50 -0800 |
---|---|---|
committer | Igor Babaev <igor@askmonty.org> | 2016-11-13 14:56:30 -0800 |
commit | 8283d7f70e9fd2b4da80426ac9f8c18f65c145f8 (patch) | |
tree | c3350306d290cee9e1bd7f0863cd0ac79605c7f3 /mysql-test/r/cte_recursive.result | |
parent | 92bcb906a01515874eb3095eabfde7057f4f8d50 (diff) | |
download | mariadb-git-8283d7f70e9fd2b4da80426ac9f8c18f65c145f8.tar.gz |
Added the test case from mdev-11259.
Diffstat (limited to 'mysql-test/r/cte_recursive.result')
-rw-r--r-- | mysql-test/r/cte_recursive.result | 465 |
1 files changed, 465 insertions, 0 deletions
diff --git a/mysql-test/r/cte_recursive.result b/mysql-test/r/cte_recursive.result index a624b5453b8..4a3ca4d1caa 100644 --- a/mysql-test/r/cte_recursive.result +++ b/mysql-test/r/cte_recursive.result @@ -1862,3 +1862,468 @@ a 2 drop view v1; drop table t1,t2; +# +# MDEV-11259: recursive CTE with concatenation operation +# +DROP TABLE IF EXISTS edges; +Warnings: +Note 1051 Unknown table 'test.edges' +CREATE TABLE edges( +a int(10) unsigned NOT NULL, +b int(10) unsigned NOT NULL, +PRIMARY KEY (a,b), +KEY b(b) +); +INSERT INTO edges +VALUES (1,3),(2,1),(2,4),(3,4),(3,5),(3,6),(4,7),(5,1),(5,6),(6,1); +DROP TABLE IF EXISTS edges2; +Warnings: +Note 1051 Unknown table 'test.edges2' +CREATE VIEW edges2 (a, b) AS +SELECT a, b FROM edges UNION ALL SELECT b, a FROM edges; +WITH RECURSIVE transitive_closure(a, b, distance, path_string) AS +( SELECT a, b, 1 AS distance, +concat(a, '.', b, '.') AS path_string +FROM edges +UNION ALL +SELECT tc.a, e.b, tc.distance + 1, +concat(tc.path_string, e.b, '.') AS path_string +FROM edges AS e +JOIN transitive_closure AS tc +ON e.a = tc.b +WHERE tc.path_string NOT LIKE concat('%', e.b, '.%') +) +SELECT * FROM transitive_closure +ORDER BY a, b, distance; +a b distance path_string +1 3 1 1.3. +1 4 2 1.3.4. +1 5 2 1.3.5. +1 6 2 1.3.6. +1 6 3 1.3.5.6. +1 7 3 1.3.4.7. +2 1 1 2.1. +2 3 2 2.1.3. +2 4 1 2.4. +2 4 3 2.1.3.4. +2 5 3 2.1.3.5. +2 6 3 2.1.3.6. +2 6 4 2.1.3.5.6. +2 7 2 2.4.7. +2 7 4 2.1.3.4.7. +3 1 2 3.6.1. +3 1 2 3.5.1. +3 1 3 3.5.6.1. +3 4 1 3.4. +3 5 1 3.5. +3 6 1 3.6. +3 6 2 3.5.6. +3 7 2 3.4.7. +4 7 1 4.7. +5 1 1 5.1. +5 1 2 5.6.1. +5 3 2 5.1.3. +5 3 3 5.6.1.3. +5 4 3 5.1.3.4. +5 4 4 5.6.1.3.4. +5 6 1 5.6. +5 6 3 5.1.3.6. +5 7 4 5.1.3.4.7. +5 7 5 5.6.1.3.4.7. +6 1 1 6.1. +6 3 2 6.1.3. +6 4 3 6.1.3.4. +6 5 3 6.1.3.5. +6 7 4 6.1.3.4.7. +WITH RECURSIVE transitive_closure(a, b, distance, path_string) AS +( SELECT a, b, 1 AS distance, +concat(a, '.', b, '.') AS path_string +FROM edges +WHERE a = 1 -- source +UNION ALL +SELECT tc.a, e.b, tc.distance + 1, +concat(tc.path_string, e.b, '.') AS path_string +FROM edges AS e +JOIN transitive_closure AS tc ON e.a = tc.b +WHERE tc.path_string NOT LIKE concat('%', e.b, '.%') +) +SELECT * FROM transitive_closure +WHERE b = 6 -- destination +ORDER BY a, b, distance; +a b distance path_string +1 6 2 1.3.6. +1 6 3 1.3.5.6. +WITH RECURSIVE transitive_closure(a, b, distance, path_string) AS +( SELECT a, b, 1 AS distance, +concat(a, '.', b, '.') AS path_string +FROM edges2 +UNION ALL +SELECT tc.a, e.b, tc.distance + 1, +concat(tc.path_string, e.b, '.') AS path_string +FROM edges2 AS e +JOIN transitive_closure AS tc ON e.a = tc.b +WHERE tc.path_string NOT LIKE concat('%', e.b, '.%') +) +SELECT * FROM transitive_closure +ORDER BY a, b, distance; +a b distance path_string +1 2 1 1.2. +1 2 3 1.3.4.2. +1 2 4 1.5.3.4.2. +1 2 4 1.6.3.4.2. +1 2 5 1.5.6.3.4.2. +1 2 5 1.6.5.3.4.2. +1 3 1 1.3. +1 3 2 1.5.3. +1 3 2 1.6.3. +1 3 3 1.2.4.3. +1 3 3 1.5.6.3. +1 3 3 1.6.5.3. +1 4 2 1.2.4. +1 4 2 1.3.4. +1 4 3 1.5.3.4. +1 4 3 1.6.3.4. +1 4 4 1.5.6.3.4. +1 4 4 1.6.5.3.4. +1 5 1 1.5. +1 5 2 1.3.5. +1 5 2 1.6.5. +1 5 3 1.3.6.5. +1 5 3 1.6.3.5. +1 5 4 1.2.4.3.5. +1 5 5 1.2.4.3.6.5. +1 6 1 1.6. +1 6 2 1.3.6. +1 6 2 1.5.6. +1 6 3 1.3.5.6. +1 6 3 1.5.3.6. +1 6 4 1.2.4.3.6. +1 6 5 1.2.4.3.5.6. +1 7 3 1.2.4.7. +1 7 3 1.3.4.7. +1 7 4 1.5.3.4.7. +1 7 4 1.6.3.4.7. +1 7 5 1.5.6.3.4.7. +1 7 5 1.6.5.3.4.7. +2 1 1 2.1. +2 1 3 2.4.3.1. +2 1 4 2.4.3.5.1. +2 1 4 2.4.3.6.1. +2 1 5 2.4.3.5.6.1. +2 1 5 2.4.3.6.5.1. +2 3 2 2.1.3. +2 3 2 2.4.3. +2 3 3 2.1.5.3. +2 3 3 2.1.6.3. +2 3 4 2.1.5.6.3. +2 3 4 2.1.6.5.3. +2 4 1 2.4. +2 4 3 2.1.3.4. +2 4 4 2.1.5.3.4. +2 4 4 2.1.6.3.4. +2 4 5 2.1.5.6.3.4. +2 4 5 2.1.6.5.3.4. +2 5 2 2.1.5. +2 5 3 2.1.3.5. +2 5 3 2.1.6.5. +2 5 3 2.4.3.5. +2 5 4 2.1.3.6.5. +2 5 4 2.1.6.3.5. +2 5 4 2.4.3.1.5. +2 5 4 2.4.3.6.5. +2 5 5 2.4.3.1.6.5. +2 5 5 2.4.3.6.1.5. +2 6 2 2.1.6. +2 6 3 2.1.3.6. +2 6 3 2.1.5.6. +2 6 3 2.4.3.6. +2 6 4 2.1.3.5.6. +2 6 4 2.1.5.3.6. +2 6 4 2.4.3.1.6. +2 6 4 2.4.3.5.6. +2 6 5 2.4.3.1.5.6. +2 6 5 2.4.3.5.1.6. +2 7 2 2.4.7. +2 7 4 2.1.3.4.7. +2 7 5 2.1.5.3.4.7. +2 7 5 2.1.6.3.4.7. +2 7 6 2.1.5.6.3.4.7. +2 7 6 2.1.6.5.3.4.7. +3 1 1 3.1. +3 1 2 3.5.1. +3 1 2 3.6.1. +3 1 3 3.4.2.1. +3 1 3 3.5.6.1. +3 1 3 3.6.5.1. +3 2 2 3.1.2. +3 2 2 3.4.2. +3 2 3 3.5.1.2. +3 2 3 3.6.1.2. +3 2 4 3.5.6.1.2. +3 2 4 3.6.5.1.2. +3 4 1 3.4. +3 4 3 3.1.2.4. +3 4 4 3.5.1.2.4. +3 4 4 3.6.1.2.4. +3 4 5 3.5.6.1.2.4. +3 4 5 3.6.5.1.2.4. +3 5 1 3.5. +3 5 2 3.1.5. +3 5 2 3.6.5. +3 5 3 3.1.6.5. +3 5 3 3.6.1.5. +3 5 4 3.4.2.1.5. +3 5 5 3.4.2.1.6.5. +3 6 1 3.6. +3 6 2 3.1.6. +3 6 2 3.5.6. +3 6 3 3.1.5.6. +3 6 3 3.5.1.6. +3 6 4 3.4.2.1.6. +3 6 5 3.4.2.1.5.6. +3 7 2 3.4.7. +3 7 4 3.1.2.4.7. +3 7 5 3.5.1.2.4.7. +3 7 5 3.6.1.2.4.7. +3 7 6 3.5.6.1.2.4.7. +3 7 6 3.6.5.1.2.4.7. +4 1 2 4.2.1. +4 1 2 4.3.1. +4 1 3 4.3.5.1. +4 1 3 4.3.6.1. +4 1 4 4.3.5.6.1. +4 1 4 4.3.6.5.1. +4 2 1 4.2. +4 2 3 4.3.1.2. +4 2 4 4.3.5.1.2. +4 2 4 4.3.6.1.2. +4 2 5 4.3.5.6.1.2. +4 2 5 4.3.6.5.1.2. +4 3 1 4.3. +4 3 3 4.2.1.3. +4 3 4 4.2.1.5.3. +4 3 4 4.2.1.6.3. +4 3 5 4.2.1.5.6.3. +4 3 5 4.2.1.6.5.3. +4 5 2 4.3.5. +4 5 3 4.2.1.5. +4 5 3 4.3.1.5. +4 5 3 4.3.6.5. +4 5 4 4.2.1.3.5. +4 5 4 4.2.1.6.5. +4 5 4 4.3.1.6.5. +4 5 4 4.3.6.1.5. +4 5 5 4.2.1.3.6.5. +4 5 5 4.2.1.6.3.5. +4 6 2 4.3.6. +4 6 3 4.2.1.6. +4 6 3 4.3.1.6. +4 6 3 4.3.5.6. +4 6 4 4.2.1.3.6. +4 6 4 4.2.1.5.6. +4 6 4 4.3.1.5.6. +4 6 4 4.3.5.1.6. +4 6 5 4.2.1.3.5.6. +4 6 5 4.2.1.5.3.6. +4 7 1 4.7. +5 1 1 5.1. +5 1 2 5.3.1. +5 1 2 5.6.1. +5 1 3 5.3.6.1. +5 1 3 5.6.3.1. +5 1 4 5.3.4.2.1. +5 1 5 5.6.3.4.2.1. +5 2 2 5.1.2. +5 2 3 5.3.1.2. +5 2 3 5.3.4.2. +5 2 3 5.6.1.2. +5 2 4 5.1.3.4.2. +5 2 4 5.3.6.1.2. +5 2 4 5.6.3.1.2. +5 2 4 5.6.3.4.2. +5 2 5 5.1.6.3.4.2. +5 2 5 5.6.1.3.4.2. +5 3 1 5.3. +5 3 2 5.1.3. +5 3 2 5.6.3. +5 3 3 5.1.6.3. +5 3 3 5.6.1.3. +5 3 4 5.1.2.4.3. +5 3 5 5.6.1.2.4.3. +5 4 2 5.3.4. +5 4 3 5.1.2.4. +5 4 3 5.1.3.4. +5 4 3 5.6.3.4. +5 4 4 5.1.6.3.4. +5 4 4 5.3.1.2.4. +5 4 4 5.6.1.2.4. +5 4 4 5.6.1.3.4. +5 4 5 5.3.6.1.2.4. +5 4 5 5.6.3.1.2.4. +5 6 1 5.6. +5 6 2 5.1.6. +5 6 2 5.3.6. +5 6 3 5.1.3.6. +5 6 3 5.3.1.6. +5 6 5 5.1.2.4.3.6. +5 6 5 5.3.4.2.1.6. +5 7 3 5.3.4.7. +5 7 4 5.1.2.4.7. +5 7 4 5.1.3.4.7. +5 7 4 5.6.3.4.7. +5 7 5 5.1.6.3.4.7. +5 7 5 5.3.1.2.4.7. +5 7 5 5.6.1.2.4.7. +5 7 5 5.6.1.3.4.7. +5 7 6 5.3.6.1.2.4.7. +5 7 6 5.6.3.1.2.4.7. +6 1 1 6.1. +6 1 2 6.3.1. +6 1 2 6.5.1. +6 1 3 6.3.5.1. +6 1 3 6.5.3.1. +6 1 4 6.3.4.2.1. +6 1 5 6.5.3.4.2.1. +6 2 2 6.1.2. +6 2 3 6.3.1.2. +6 2 3 6.3.4.2. +6 2 3 6.5.1.2. +6 2 4 6.1.3.4.2. +6 2 4 6.3.5.1.2. +6 2 4 6.5.3.1.2. +6 2 4 6.5.3.4.2. +6 2 5 6.1.5.3.4.2. +6 2 5 6.5.1.3.4.2. +6 3 1 6.3. +6 3 2 6.1.3. +6 3 2 6.5.3. +6 3 3 6.1.5.3. +6 3 3 6.5.1.3. +6 3 4 6.1.2.4.3. +6 3 5 6.5.1.2.4.3. +6 4 2 6.3.4. +6 4 3 6.1.2.4. +6 4 3 6.1.3.4. +6 4 3 6.5.3.4. +6 4 4 6.1.5.3.4. +6 4 4 6.3.1.2.4. +6 4 4 6.5.1.2.4. +6 4 4 6.5.1.3.4. +6 4 5 6.3.5.1.2.4. +6 4 5 6.5.3.1.2.4. +6 5 1 6.5. +6 5 2 6.1.5. +6 5 2 6.3.5. +6 5 3 6.1.3.5. +6 5 3 6.3.1.5. +6 5 5 6.1.2.4.3.5. +6 5 5 6.3.4.2.1.5. +6 7 3 6.3.4.7. +6 7 4 6.1.2.4.7. +6 7 4 6.1.3.4.7. +6 7 4 6.5.3.4.7. +6 7 5 6.1.5.3.4.7. +6 7 5 6.3.1.2.4.7. +6 7 5 6.5.1.2.4.7. +6 7 5 6.5.1.3.4.7. +6 7 6 6.3.5.1.2.4.7. +6 7 6 6.5.3.1.2.4.7. +7 1 3 7.4.2.1. +7 1 3 7.4.3.1. +7 1 4 7.4.3.5.1. +7 1 4 7.4.3.6.1. +7 1 5 7.4.3.5.6.1. +7 1 5 7.4.3.6.5.1. +7 2 2 7.4.2. +7 2 4 7.4.3.1.2. +7 2 5 7.4.3.5.1.2. +7 2 5 7.4.3.6.1.2. +7 2 6 7.4.3.5.6.1.2. +7 2 6 7.4.3.6.5.1.2. +7 3 2 7.4.3. +7 3 4 7.4.2.1.3. +7 3 5 7.4.2.1.5.3. +7 3 5 7.4.2.1.6.3. +7 3 6 7.4.2.1.5.6.3. +7 3 6 7.4.2.1.6.5.3. +7 4 1 7.4. +7 5 3 7.4.3.5. +7 5 4 7.4.2.1.5. +7 5 4 7.4.3.1.5. +7 5 4 7.4.3.6.5. +7 5 5 7.4.2.1.3.5. +7 5 5 7.4.2.1.6.5. +7 5 5 7.4.3.1.6.5. +7 5 5 7.4.3.6.1.5. +7 5 6 7.4.2.1.3.6.5. +7 5 6 7.4.2.1.6.3.5. +7 6 3 7.4.3.6. +7 6 4 7.4.2.1.6. +7 6 4 7.4.3.1.6. +7 6 4 7.4.3.5.6. +7 6 5 7.4.2.1.3.6. +7 6 5 7.4.2.1.5.6. +7 6 5 7.4.3.1.5.6. +7 6 5 7.4.3.5.1.6. +7 6 6 7.4.2.1.3.5.6. +7 6 6 7.4.2.1.5.3.6. +WITH RECURSIVE transitive_closure(a, b, distance, path_string) +AS +( SELECT a, b, 1 AS distance, +concat(a, '.', b, '.') AS path_string +FROM edges2 +UNION ALL +SELECT tc.a, e.b, tc.distance + 1, +concat(tc.path_string, e.b, '.') AS path_string +FROM edges2 AS e +JOIN transitive_closure AS tc ON e.a = tc.b +WHERE tc.path_string NOT LIKE concat('%', e.b, '.%') +) +SELECT a, b, min(distance) AS dist FROM transitive_closure +GROUP BY a, b +ORDER BY a, dist, b; +a b dist +1 2 1 +1 3 1 +1 4 2 +1 5 1 +1 6 1 +1 7 3 +2 1 1 +2 3 2 +2 4 1 +2 5 2 +2 6 2 +2 7 2 +3 1 1 +3 2 2 +3 4 1 +3 5 1 +3 6 1 +3 7 2 +4 1 2 +4 2 1 +4 3 1 +4 5 2 +4 6 2 +4 7 1 +5 1 1 +5 2 2 +5 3 1 +5 4 2 +5 6 1 +5 7 3 +6 1 1 +6 2 2 +6 3 1 +6 4 2 +6 5 1 +6 7 3 +7 1 3 +7 2 2 +7 3 2 +7 4 1 +7 5 3 +7 6 3 +DROP VIEW edges2; +DROP TABLE edges; |