summaryrefslogtreecommitdiff
path: root/mysql-test/r/cte_recursive.result
diff options
context:
space:
mode:
authorIgor Babaev <igor@askmonty.org>2016-11-13 14:55:50 -0800
committerIgor Babaev <igor@askmonty.org>2016-11-13 14:56:30 -0800
commit8283d7f70e9fd2b4da80426ac9f8c18f65c145f8 (patch)
treec3350306d290cee9e1bd7f0863cd0ac79605c7f3 /mysql-test/r/cte_recursive.result
parent92bcb906a01515874eb3095eabfde7057f4f8d50 (diff)
downloadmariadb-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.result465
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;