SET allow_experimental_analyzer = 1;

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;
