DROP TABLE IF EXISTS t1;

SET allow_experimental_statistic = 1;
SET allow_statistic_optimize = 1;

CREATE TABLE t1 
(
    a Float64,
    b Int64,
    pk String,
    STATISTIC a, b TYPE tdigest,
) Engine = MergeTree() ORDER BY pk
SETTINGS min_bytes_for_wide_part = 0;

SHOW CREATE TABLE t1;

INSERT INTO t1 select number, -number, generateUUIDv4() FROM system.numbers LIMIT 10000;

SELECT 'After insert';
EXPLAIN SYNTAX SELECT count(*) FROM t1 WHERE b < 10 and a < 10;
SELECT count(*) FROM t1 WHERE b < 10 and a < 10;
SELECT count(*) FROM t1 WHERE b < NULL and a < '10';

ALTER TABLE t1 DROP STATISTIC a, b TYPE tdigest;

SELECT 'After drop statistic';
EXPLAIN SYNTAX SELECT count(*) FROM t1 WHERE b < 10 and a < 10;
SELECT count(*) FROM t1 WHERE b < 10 and a < 10;

SHOW CREATE TABLE t1;

ALTER TABLE t1 ADD STATISTIC a, b TYPE tdigest;

SELECT 'After add statistic';

SHOW CREATE TABLE t1;

ALTER TABLE t1 MATERIALIZE STATISTIC a, b TYPE tdigest;
INSERT INTO t1 select number, -number, generateUUIDv4() FROM system.numbers LIMIT 10000;

SELECT 'After materialize statistic';
EXPLAIN SYNTAX SELECT count(*) FROM t1 WHERE b < 10 and a < 10;
SELECT count(*) FROM t1 WHERE b < 10 and a < 10;

OPTIMIZE TABLE t1 FINAL;

SELECT 'After merge';
EXPLAIN SYNTAX SELECT count(*) FROM t1 WHERE b < 10 and a < 10;
SELECT count(*) FROM t1 WHERE b < 10 and a < 10;

DROP TABLE IF EXISTS t1;
