Генерация даных

Воспользуемся генерацией через представления.

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).

Источник: 1 - 2


31.03.2010 09:12

Комментарии

Комментариев пока нет.


Copyrights © 2007 - 2026 YaPro.Ru