DROP TABLE IF EXISTS test_hierarchy_source_table;
CREATE TABLE test_hierarchy_source_table
(
    id UInt64,
    parent_id UInt64
) ENGINE=MergeTree ORDER BY id;

INSERT INTO test_hierarchy_source_table VALUES (1, 0);

DROP DICTIONARY IF EXISTS hierarchy_flat_dictionary_index;
CREATE DICTIONARY hierarchy_flat_dictionary_index
(
    id UInt64,
    parent_id UInt64 BIDIRECTIONAL
)
PRIMARY KEY id
SOURCE(CLICKHOUSE(TABLE 'test_hierarchy_source_table'))
LAYOUT(FLAT())
LIFETIME(0); -- {serverError 36 }

DROP DICTIONARY IF EXISTS hierarchy_flat_dictionary_index;
CREATE DICTIONARY hierarchy_flat_dictionary_index
(
    id UInt64,
    parent_id UInt64 HIERARCHICAL BIDIRECTIONAL
)
PRIMARY KEY id
SOURCE(CLICKHOUSE(TABLE 'test_hierarchy_source_table'))
LAYOUT(FLAT())
LIFETIME(0);

SELECT * FROM hierarchy_flat_dictionary_index;
SELECT hierarchical_index_bytes_allocated > 0 FROM system.dictionaries WHERE name = 'hierarchy_flat_dictionary_index' AND database = currentDatabase();

DROP DICTIONARY hierarchy_flat_dictionary_index;

DROP DICTIONARY IF EXISTS hierarchy_hashed_dictionary_index;
CREATE DICTIONARY hierarchy_hashed_dictionary_index
(
    id UInt64,
    parent_id UInt64 HIERARCHICAL BIDIRECTIONAL
)
PRIMARY KEY id
SOURCE(CLICKHOUSE(TABLE 'test_hierarchy_source_table'))
LAYOUT(FLAT())
LIFETIME(0);

SELECT * FROM hierarchy_hashed_dictionary_index;
SELECT hierarchical_index_bytes_allocated > 0 FROM system.dictionaries WHERE name = 'hierarchy_hashed_dictionary_index' AND database = currentDatabase();
DROP DICTIONARY hierarchy_hashed_dictionary_index;

DROP DICTIONARY IF EXISTS hierarchy_hashed_array_dictionary_index;
CREATE DICTIONARY hierarchy_hashed_array_dictionary_index
(
    id UInt64,
    parent_id UInt64 HIERARCHICAL
)
PRIMARY KEY id
SOURCE(CLICKHOUSE(TABLE 'test_hierarchy_source_table'))
LAYOUT(HASHED_ARRAY())
LIFETIME(0);

SELECT * FROM hierarchy_hashed_array_dictionary_index;
SELECT hierarchical_index_bytes_allocated > 0 FROM system.dictionaries WHERE name = 'hierarchy_hashed_array_dictionary_index' AND database = currentDatabase();

DROP DICTIONARY hierarchy_hashed_array_dictionary_index;
DROP TABLE test_hierarchy_source_table;
