set allow_experimental_bigint_types=1;
drop database if exists db_01721;
drop table if exists db_01721.table_decimal_dict;
drop dictionary if exists db_01721.decimal_dict;


create database db_01721;

CREATE TABLE db_01721.table_decimal_dict(
KeyField UInt64,
Decimal32_ Decimal(5,4),
Decimal64_ Decimal(18,8),
Decimal128_ Decimal(25,8),
Decimal256_ Decimal(76,37)
)
ENGINE = Memory;

insert into db_01721.table_decimal_dict
select number,
       number / 3,
       number / 3,
       number / 3,
       number / 3
from numbers(5000);


CREATE DICTIONARY IF NOT EXISTS db_01721.decimal_dict (
	KeyField UInt64 DEFAULT 9999999,
	Decimal32_ Decimal(5,4) DEFAULT 0.11,
	Decimal64_ Decimal(18,8) DEFAULT 0.11,
	Decimal128_ Decimal(25,8) DEFAULT 0.11
--	,Decimal256_ Decimal256(37) DEFAULT 0.11
)
PRIMARY KEY KeyField
SOURCE(CLICKHOUSE(HOST 'localhost' PORT tcpPort() USER 'default' TABLE 'table_decimal_dict' DB 'db_01721'))
LIFETIME(0) LAYOUT(SPARSE_HASHED);

select '-------- 42 --------';

SELECT * from db_01721.table_decimal_dict where KeyField = 42;

SELECT * from db_01721.decimal_dict	where KeyField = 42;

SELECT dictGet('db_01721.decimal_dict', 'Decimal32_', toUInt64(42)),
       dictGet('db_01721.decimal_dict', 'Decimal64_', toUInt64(42)),
       dictGet('db_01721.decimal_dict', 'Decimal128_', toUInt64(42))
       -- ,dictGet('db_01721.decimal_dict', 'Decimal256_', toUInt64(42))
;


select '-------- 4999 --------';

SELECT * from db_01721.table_decimal_dict where KeyField = 4999;

SELECT * from db_01721.decimal_dict	where KeyField = 4999;

SELECT dictGet('db_01721.decimal_dict', 'Decimal32_', toUInt64(4999)),
       dictGet('db_01721.decimal_dict', 'Decimal64_', toUInt64(4999)),
       dictGet('db_01721.decimal_dict', 'Decimal128_', toUInt64(4999))
       --,dictGet('db_01721.decimal_dict', 'Decimal256_', toUInt64(4999))
;

select '-------- 5000 --------';

SELECT * from db_01721.table_decimal_dict where KeyField = 5000;

SELECT * from db_01721.decimal_dict	where KeyField = 5000;

SELECT dictGet('db_01721.decimal_dict', 'Decimal32_', toUInt64(5000)),
       dictGet('db_01721.decimal_dict', 'Decimal64_', toUInt64(5000)),
       dictGet('db_01721.decimal_dict', 'Decimal128_', toUInt64(5000))
       --,dictGet('db_01721.decimal_dict', 'Decimal256_', toUInt64(5000))
;

drop table if exists table_decimal_dict;
drop dictionary if exists cache_dict;
drop database if exists db_01721;

