| --------------------------------------------------------------------------- |
| -- Rules: |
| -- ------ |
| -- 1) Any DB objects should be created w/o schema prefix, |
| -- since this file is executed in a separate schema context. |
| -- 2) There should be no DROP statements in this script, since |
| -- all objects created in the default schema will be cleaned-up outside. |
| --------------------------------------------------------------------------- |
| |
| --------------------------------------------------------------------------- |
| -- Setup: |
| --------------------------------------------------------------------------- |
| CREATE FUNCTION fm_install_test() RETURNS VOID AS $$ |
| declare |
| |
| result INT[]; |
| result2 INT; |
| |
| begin |
| -- DROP TABLE IF EXISTS "FM_DATA"; |
| CREATE TABLE "FM_DATA"(class INT, a1 INT); |
| INSERT INTO "FM_DATA" SELECT 1,1 FROM generate_series(1,10000); |
| INSERT INTO "FM_DATA" SELECT 1,2 FROM generate_series(1,15000); |
| INSERT INTO "FM_DATA" SELECT 1,3 FROM generate_series(1,10000); |
| INSERT INTO "FM_DATA" SELECT 2,5 FROM generate_series(1,1000); |
| INSERT INTO "FM_DATA" SELECT 2,6 FROM generate_series(1,1000); |
| |
| -- DROP TABLE IF EXISTS fm_result_table; |
| CREATE TABLE fm_result_table AS |
| SELECT (fmsketch_dcount(a1)) as val FROM "FM_DATA" GROUP BY class ORDER BY class; |
| |
| SELECT array( SELECT val FROM fm_result_table) INTO result; |
| IF ((result[1] + result[2]) != 5) THEN |
| RAISE EXCEPTION 'Incorrect fmsketch_dcount results, got %',result; |
| END IF; |
| TRUNCATE fm_result_table; |
| |
| |
| RAISE INFO 'FM-Sketches install checks passed'; |
| RETURN; |
| |
| end |
| $$ language plpgsql; |
| |
| --------------------------------------------------------------------------- |
| -- Test: |
| --------------------------------------------------------------------------- |
| SELECT fm_install_test(); |
| |
| -- Tests for "little" tables using sortasorts |
| select fmsketch_dcount(R.i) |
| from generate_series(1,100) AS R(i), |
| generate_series(1,3) AS T(i); |
| |
| select fmsketch_dcount(CAST('2010-10-10' As date) + CAST((R.i || ' days') As interval)) |
| from generate_series(1,100) AS R(i), |
| generate_series(1,3) AS T(i); |
| |
| select fmsketch_dcount(R.i::float) |
| from generate_series(1,100) AS R(i), |
| generate_series(1,3) AS T(i); |
| |
| select fmsketch_dcount(R.i::text) |
| from generate_series(1,100) AS R(i), |
| generate_series(1,3) AS T(i); |
| |
| |
| -- Tests for "big" tables |
| select fmsketch_dcount(T.i) |
| from generate_series(1,3) AS R(i), |
| generate_series(1,20000) AS T(i); |
| |
| select fmsketch_dcount(CAST('2010-10-10' As date) + CAST((T.i || ' days') As interval)) |
| from generate_series(1,3) AS R(i), |
| generate_series(1,20000) AS T(i); |
| |
| select fmsketch_dcount(T.i::float) |
| from generate_series(1,3) AS R(i), |
| generate_series(1,20000) AS T(i); |
| |
| select fmsketch_dcount(T.i::text) |
| from generate_series(1,3) AS R(i), |
| generate_series(1,20000) AS T(i); |
| |
| -- Tests for all-NULL column |
| select fmsketch_dcount(NULL::integer) from generate_series(1,10000) as R(i); |
| |