mirror of
https://github.com/postgres/postgres.git
synced 2026-03-12 13:44:02 -04:00
This custom opclass was already in use in other tests -- defined independently in every such file. Move the definition to the earliest test that uses it, and keep it around so that later tests can reuse it. Use it in the tests for pruning of hash partitioning, and since this makes the second expected file unnecessary, put those tests back in partition_prune.sql whence they sprang. Author: Amit Langote Discussion: https://postgr.es/m/CA%2BTgmoZ0D5kJbt8eKXtvVdvTcGGWn6ehWCRSZbWytD-uzH92mQ%40mail.gmail.com
80 lines
2.5 KiB
SQL
80 lines
2.5 KiB
SQL
--
|
|
-- Hash partitioning.
|
|
--
|
|
|
|
-- Use hand-rolled hash functions and operator classes to get predictable
|
|
-- result on different matchines. See the definitions of
|
|
-- part_part_test_int4_ops and part_test_text_ops in insert.sql.
|
|
|
|
CREATE TABLE mchash (a int, b text, c jsonb)
|
|
PARTITION BY HASH (a part_test_int4_ops, b part_test_text_ops);
|
|
CREATE TABLE mchash1
|
|
PARTITION OF mchash FOR VALUES WITH (MODULUS 4, REMAINDER 0);
|
|
|
|
-- invalid OID, no such table
|
|
SELECT satisfies_hash_partition(0, 4, 0, NULL);
|
|
|
|
-- not partitioned
|
|
SELECT satisfies_hash_partition('tenk1'::regclass, 4, 0, NULL);
|
|
|
|
-- partition rather than the parent
|
|
SELECT satisfies_hash_partition('mchash1'::regclass, 4, 0, NULL);
|
|
|
|
-- invalid modulus
|
|
SELECT satisfies_hash_partition('mchash'::regclass, 0, 0, NULL);
|
|
|
|
-- remainder too small
|
|
SELECT satisfies_hash_partition('mchash'::regclass, 1, -1, NULL);
|
|
|
|
-- remainder too large
|
|
SELECT satisfies_hash_partition('mchash'::regclass, 1, 1, NULL);
|
|
|
|
-- modulus is null
|
|
SELECT satisfies_hash_partition('mchash'::regclass, NULL, 0, NULL);
|
|
|
|
-- remainder is null
|
|
SELECT satisfies_hash_partition('mchash'::regclass, 4, NULL, NULL);
|
|
|
|
-- too many arguments
|
|
SELECT satisfies_hash_partition('mchash'::regclass, 4, 0, NULL::int, NULL::text, NULL::json);
|
|
|
|
-- too few arguments
|
|
SELECT satisfies_hash_partition('mchash'::regclass, 3, 1, NULL::int);
|
|
|
|
-- wrong argument type
|
|
SELECT satisfies_hash_partition('mchash'::regclass, 2, 1, NULL::int, NULL::int);
|
|
|
|
-- ok, should be false
|
|
SELECT satisfies_hash_partition('mchash'::regclass, 4, 0, 0, ''::text);
|
|
|
|
-- ok, should be true
|
|
SELECT satisfies_hash_partition('mchash'::regclass, 4, 0, 2, ''::text);
|
|
|
|
-- argument via variadic syntax, should fail because not all partitioning
|
|
-- columns are of the correct type
|
|
SELECT satisfies_hash_partition('mchash'::regclass, 2, 1,
|
|
variadic array[1,2]::int[]);
|
|
|
|
-- multiple partitioning columns of the same type
|
|
CREATE TABLE mcinthash (a int, b int, c jsonb)
|
|
PARTITION BY HASH (a part_test_int4_ops, b part_test_int4_ops);
|
|
|
|
-- now variadic should work, should be false
|
|
SELECT satisfies_hash_partition('mcinthash'::regclass, 4, 0,
|
|
variadic array[0, 0]);
|
|
|
|
-- should be true
|
|
SELECT satisfies_hash_partition('mcinthash'::regclass, 4, 0,
|
|
variadic array[0, 1]);
|
|
|
|
-- wrong length
|
|
SELECT satisfies_hash_partition('mcinthash'::regclass, 4, 0,
|
|
variadic array[]::int[]);
|
|
|
|
-- wrong type
|
|
SELECT satisfies_hash_partition('mcinthash'::regclass, 4, 0,
|
|
variadic array[now(), now()]);
|
|
|
|
-- cleanup
|
|
DROP TABLE mchash;
|
|
DROP TABLE mcinthash;
|