Воспользуемся генерацией через представления.
CREATE OR REPLACE VIEW generator_16
AS SELECT 0 n UNION ALL SELECT 1 UNION ALL SELECT 2 UNION ALL
SELECT 3 UNION ALL SELECT 4 UNION ALL SELECT 5 UNION ALL
SELECT 6 UNION ALL SELECT 7 UNION ALL SELECT 8 UNION ALL
SELECT 9 UNION ALL SELECT 10 UNION ALL SELECT 11 UNION ALL
SELECT 12 UNION ALL SELECT 13 UNION ALL SELECT 14 UNION ALL
SELECT 15;
CREATE OR REPLACE VIEW generator_256
AS SELECT ( ( hi.n << 4 ) | lo.n ) AS n
FROM generator_16 lo, generator_16 hi;
CREATE OR REPLACE VIEW generator_4k
AS SELECT ( ( hi.n << 8 ) | lo.n ) AS n
FROM generator_256 lo, generator_16 hi;
CREATE OR REPLACE VIEW generator_64k
AS SELECT ( ( hi.n << 8 ) | lo.n ) AS n
FROM generator_256 lo, generator_256 hi;
CREATE OR REPLACE VIEW generator_1m
AS SELECT ( ( hi.n << 16 ) | lo.n ) AS n
FROM generator_64k lo, generator_16 hi;
-- SELECT COUNT(*), MAX(n) FROM generator_1m: 1048576, 1048575
CREATE OR REPLACE VIEW generator_16m
AS SELECT ( ( hi.n << 16 ) | lo.n ) AS n
FROM generator_64k lo, generator_256 hi;
-- SELECT COUNT(*), MAX(n) FROM generator_16m: 16777216, 16777215
CREATE OR REPLACE VIEW generator_268m
AS SELECT ( ( hi.n << 16 ) | lo.n ) AS n
FROM generator_64k lo, generator_4k hi;
-- SELECT COUNT(*), MAX(n) FROM generator_268m: 268435456, 268435455Как понять происходящее:
SELECT CONCAT(LPAD(hi.n,2,' '), ' * 16 + '
, LPAD(lo.n,2,' '), ' = '
, LPAD(hi.n*16+lo.n, 3,' '))
AS "HI LO SEQ"
FROM generator_16 lo, generator_16 hi;
SELECT (0 << 16 | 0), (0 << 16 | 1), (0 << 16 | 2), (0 << 16 | 65535)
UNION
SELECT (1 << 16 | 0), (1 << 16 | 1), (1 << 16 | 2), (1 << 16 | 65535)
UNION
SELECT (2 << 16 | 0), (2 << 16 | 1), (2 << 16 | 2), (2 << 16 | 65535)
UNION
SELECT (16 << 16 | 0), (16 << 16 | 1), (16 << 16 | 2), (16 << 16 | 65535);Как понять забавный синтаксис:
SELECT 1 << 1, 1 << 2, 2 << 1, 1 << 3, 3 << 1;Если генерация не подходит, то загрузите готовый дамп (2).
Комментарии
Комментариев пока нет.