-
Notifications
You must be signed in to change notification settings - Fork 68
Commit
This commit does not belong to any branch on this repository, and may belong to a fork outside of the repository.
- Loading branch information
Showing
5 changed files
with
300 additions
and
6 deletions.
There are no files selected for viewing
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,160 @@ | ||
-- =================================================================== | ||
-- test composite type, varchar and enum types | ||
-- create, distribute, INSERT, SELECT and UPDATE | ||
-- =================================================================== | ||
-- create a custom type... | ||
CREATE TYPE test_composite_type AS ( | ||
i integer, | ||
i2 integer | ||
); | ||
-- ... as well as a function to use as its comparator... | ||
CREATE FUNCTION equal_test_composite_type_function(test_composite_type, test_composite_type) RETURNS boolean | ||
AS 'select $1.i = $2.i AND $1.i2 = $2.i2;' | ||
LANGUAGE SQL | ||
IMMUTABLE | ||
RETURNS NULL ON NULL INPUT; | ||
-- ... use that function to create a custom equality operator... | ||
CREATE OPERATOR = ( | ||
LEFTARG = test_composite_type, | ||
RIGHTARG = test_composite_type, | ||
PROCEDURE = equal_test_composite_type_function, | ||
HASHES | ||
); | ||
-- ... and create a custom operator family for hash indexes... | ||
CREATE OPERATOR FAMILY cats_op_fam USING hash; | ||
-- ... create a test HASH function. Though it is a poor hash function, | ||
-- it is acceptable for our tests | ||
CREATE FUNCTION test_composite_type_hash(test_composite_type) RETURNS int | ||
AS 'SELECT hashtext( ($1.i + $1.i2)::text);' | ||
LANGUAGE SQL | ||
IMMUTABLE | ||
RETURNS NULL ON NULL INPUT; | ||
-- We need to define two different operator classes for the composite types | ||
-- One uses BTREE the other uses HASH | ||
CREATE OPERATOR CLASS cats_op_fam_clas3 | ||
DEFAULT FOR TYPE test_composite_type USING BTREE AS | ||
OPERATOR 3 = (test_composite_type, test_composite_type); | ||
CREATE OPERATOR CLASS cats_op_fam_class | ||
DEFAULT FOR TYPE test_composite_type USING HASH AS | ||
OPERATOR 1 = (test_composite_type, test_composite_type), | ||
FUNCTION 1 test_composite_type_hash(test_composite_type); | ||
-- create and distribute a table on composite type column | ||
CREATE TABLE composite_type_partitioned_table | ||
( | ||
id integer, | ||
col test_composite_type | ||
); | ||
SELECT master_create_distributed_table('composite_type_partitioned_table', 'col'); | ||
master_create_distributed_table | ||
--------------------------------- | ||
|
||
(1 row) | ||
|
||
-- squelch noisy warnings when creating shards | ||
\set VERBOSITY terse | ||
SELECT master_create_worker_shards('composite_type_partitioned_table', 4, 1); | ||
WARNING: Connection failed to adeadhost:5432 | ||
WARNING: could not create shard on "adeadhost:5432" | ||
WARNING: Connection failed to adeadhost:5432 | ||
WARNING: could not create shard on "adeadhost:5432" | ||
master_create_worker_shards | ||
----------------------------- | ||
|
||
(1 row) | ||
|
||
\set VERBOSITY default | ||
-- execute INSERT, SELECT and UPDATE queries on composite_type_partitioned_table | ||
INSERT INTO composite_type_partitioned_table VALUES (1, '(1, 2)'::test_composite_type); | ||
INSERT INTO composite_type_partitioned_table VALUES (2, '(3, 4)'::test_composite_type); | ||
INSERT INTO composite_type_partitioned_table VALUES (3, '(5, 6)'::test_composite_type); | ||
INSERT INTO composite_type_partitioned_table VALUES (4, '(7, 8)'::test_composite_type); | ||
INSERT INTO composite_type_partitioned_table VALUES (5, '(9, 10)'::test_composite_type); | ||
SELECT * FROM composite_type_partitioned_table WHERE col = '(7, 8)'::test_composite_type; | ||
id | col | ||
----+------- | ||
4 | (7,8) | ||
(1 row) | ||
|
||
UPDATE composite_type_partitioned_table SET id = 6 WHERE col = '(7, 8)'::test_composite_type; | ||
SELECT * FROM composite_type_partitioned_table WHERE col = '(7, 8)'::test_composite_type; | ||
id | col | ||
----+------- | ||
6 | (7,8) | ||
(1 row) | ||
|
||
-- create and distribute a table on enum type column | ||
CREATE TYPE bug_status AS ENUM ('new', 'open', 'closed'); | ||
CREATE TABLE bugs ( | ||
id integer, | ||
status bug_status | ||
); | ||
SELECT master_create_distributed_table('bugs', 'status'); | ||
master_create_distributed_table | ||
--------------------------------- | ||
|
||
(1 row) | ||
|
||
-- squelch noisy warnings when creating shards | ||
\set VERBOSITY terse | ||
SELECT master_create_worker_shards('bugs', 4, 1); | ||
WARNING: Connection failed to adeadhost:5432 | ||
WARNING: could not create shard on "adeadhost:5432" | ||
WARNING: Connection failed to adeadhost:5432 | ||
WARNING: could not create shard on "adeadhost:5432" | ||
master_create_worker_shards | ||
----------------------------- | ||
|
||
(1 row) | ||
|
||
\set VERBOSITY default | ||
-- execute INSERT, SELECT and UPDATE queries on composite_type_partitioned_table | ||
INSERT INTO bugs VALUES (1, 'new'); | ||
INSERT INTO bugs VALUES (2, 'open'); | ||
INSERT INTO bugs VALUES (3, 'closed'); | ||
INSERT INTO bugs VALUES (4, 'closed'); | ||
INSERT INTO bugs VALUES (5, 'open'); | ||
SELECT * FROM bugs WHERE status = 'closed'::bug_status; | ||
id | status | ||
----+-------- | ||
3 | closed | ||
4 | closed | ||
(2 rows) | ||
|
||
UPDATE bugs SET status = 'closed'::bug_status WHERE id = 2; | ||
ERROR: modifying the partition value of rows is not allowed | ||
SELECT * FROM bugs WHERE status = 'open'::bug_status; | ||
id | status | ||
----+-------- | ||
2 | open | ||
5 | open | ||
(2 rows) | ||
|
||
-- create and distribute a table on varchar column | ||
CREATE TABLE varchar_partitioned_table | ||
( | ||
id int, | ||
name varchar | ||
); | ||
SELECT master_create_distributed_table('varchar_partitioned_table', 'c1'); | ||
ERROR: column "c1" of relation "varchar_partitioned_table" does not exist | ||
SELECT master_create_worker_shards('varchar_partitioned_table', 4, 1); | ||
ERROR: no partition column is defined for relation "varchar_partitioned_table" | ||
-- execute INSERT, SELECT and UPDATE queries on composite_type_partitioned_table | ||
INSERT INTO varchar_partitioned_table VALUES (1, 'Jason'); | ||
INSERT INTO varchar_partitioned_table VALUES (2, 'Ozgun'); | ||
INSERT INTO varchar_partitioned_table VALUES (3, 'Onder'); | ||
INSERT INTO varchar_partitioned_table VALUES (4, 'Sumedh'); | ||
INSERT INTO varchar_partitioned_table VALUES (5, 'Marco'); | ||
SELECT * FROM varchar_partitioned_table WHERE name = 'Onder'; | ||
id | name | ||
----+------- | ||
3 | Onder | ||
(1 row) | ||
|
||
UPDATE varchar_partitioned_table SET name = 'Samay' WHERE id = 5; | ||
SELECT * FROM varchar_partitioned_table WHERE name = 'Samay'; | ||
id | name | ||
----+------- | ||
5 | Samay | ||
(1 row) | ||
|
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,127 @@ | ||
-- =================================================================== | ||
-- test composite type, varchar and enum types | ||
-- create, distribute, INSERT, SELECT and UPDATE | ||
-- =================================================================== | ||
|
||
-- create a custom type... | ||
CREATE TYPE test_composite_type AS ( | ||
i integer, | ||
i2 integer | ||
); | ||
|
||
-- ... as well as a function to use as its comparator... | ||
CREATE FUNCTION equal_test_composite_type_function(test_composite_type, test_composite_type) RETURNS boolean | ||
AS 'select $1.i = $2.i AND $1.i2 = $2.i2;' | ||
LANGUAGE SQL | ||
IMMUTABLE | ||
RETURNS NULL ON NULL INPUT; | ||
|
||
-- ... use that function to create a custom equality operator... | ||
CREATE OPERATOR = ( | ||
LEFTARG = test_composite_type, | ||
RIGHTARG = test_composite_type, | ||
PROCEDURE = equal_test_composite_type_function, | ||
HASHES | ||
); | ||
|
||
-- ... and create a custom operator family for hash indexes... | ||
CREATE OPERATOR FAMILY cats_op_fam USING hash; | ||
|
||
-- ... create a test HASH function. Though it is a poor hash function, | ||
-- it is acceptable for our tests | ||
CREATE FUNCTION test_composite_type_hash(test_composite_type) RETURNS int | ||
AS 'SELECT hashtext( ($1.i + $1.i2)::text);' | ||
LANGUAGE SQL | ||
IMMUTABLE | ||
RETURNS NULL ON NULL INPUT; | ||
|
||
|
||
-- We need to define two different operator classes for the composite types | ||
-- One uses BTREE the other uses HASH | ||
CREATE OPERATOR CLASS cats_op_fam_clas3 | ||
DEFAULT FOR TYPE test_composite_type USING BTREE AS | ||
OPERATOR 3 = (test_composite_type, test_composite_type); | ||
|
||
CREATE OPERATOR CLASS cats_op_fam_class | ||
DEFAULT FOR TYPE test_composite_type USING HASH AS | ||
OPERATOR 1 = (test_composite_type, test_composite_type), | ||
FUNCTION 1 test_composite_type_hash(test_composite_type); | ||
|
||
-- create and distribute a table on composite type column | ||
CREATE TABLE composite_type_partitioned_table | ||
( | ||
id integer, | ||
col test_composite_type | ||
); | ||
|
||
SELECT master_create_distributed_table('composite_type_partitioned_table', 'col'); | ||
|
||
-- squelch noisy warnings when creating shards | ||
\set VERBOSITY terse | ||
SELECT master_create_worker_shards('composite_type_partitioned_table', 4, 1); | ||
\set VERBOSITY default | ||
|
||
-- execute INSERT, SELECT and UPDATE queries on composite_type_partitioned_table | ||
INSERT INTO composite_type_partitioned_table VALUES (1, '(1, 2)'::test_composite_type); | ||
INSERT INTO composite_type_partitioned_table VALUES (2, '(3, 4)'::test_composite_type); | ||
INSERT INTO composite_type_partitioned_table VALUES (3, '(5, 6)'::test_composite_type); | ||
INSERT INTO composite_type_partitioned_table VALUES (4, '(7, 8)'::test_composite_type); | ||
INSERT INTO composite_type_partitioned_table VALUES (5, '(9, 10)'::test_composite_type); | ||
|
||
SELECT * FROM composite_type_partitioned_table WHERE col = '(7, 8)'::test_composite_type; | ||
|
||
UPDATE composite_type_partitioned_table SET id = 6 WHERE col = '(7, 8)'::test_composite_type; | ||
|
||
SELECT * FROM composite_type_partitioned_table WHERE col = '(7, 8)'::test_composite_type; | ||
|
||
|
||
-- create and distribute a table on enum type column | ||
CREATE TYPE bug_status AS ENUM ('new', 'open', 'closed'); | ||
|
||
CREATE TABLE bugs ( | ||
id integer, | ||
status bug_status | ||
); | ||
|
||
SELECT master_create_distributed_table('bugs', 'status'); | ||
|
||
-- squelch noisy warnings when creating shards | ||
\set VERBOSITY terse | ||
SELECT master_create_worker_shards('bugs', 4, 1); | ||
\set VERBOSITY default | ||
|
||
-- execute INSERT, SELECT and UPDATE queries on composite_type_partitioned_table | ||
INSERT INTO bugs VALUES (1, 'new'); | ||
INSERT INTO bugs VALUES (2, 'open'); | ||
INSERT INTO bugs VALUES (3, 'closed'); | ||
INSERT INTO bugs VALUES (4, 'closed'); | ||
INSERT INTO bugs VALUES (5, 'open'); | ||
|
||
SELECT * FROM bugs WHERE status = 'closed'::bug_status; | ||
|
||
UPDATE bugs SET status = 'closed'::bug_status WHERE id = 2; | ||
|
||
SELECT * FROM bugs WHERE status = 'open'::bug_status; | ||
|
||
-- create and distribute a table on varchar column | ||
CREATE TABLE varchar_partitioned_table | ||
( | ||
id int, | ||
name varchar | ||
); | ||
|
||
SELECT master_create_distributed_table('varchar_partitioned_table', 'c1'); | ||
SELECT master_create_worker_shards('varchar_partitioned_table', 4, 1); | ||
|
||
-- execute INSERT, SELECT and UPDATE queries on composite_type_partitioned_table | ||
INSERT INTO varchar_partitioned_table VALUES (1, 'Jason'); | ||
INSERT INTO varchar_partitioned_table VALUES (2, 'Ozgun'); | ||
INSERT INTO varchar_partitioned_table VALUES (3, 'Onder'); | ||
INSERT INTO varchar_partitioned_table VALUES (4, 'Sumedh'); | ||
INSERT INTO varchar_partitioned_table VALUES (5, 'Marco'); | ||
|
||
SELECT * FROM varchar_partitioned_table WHERE name = 'Onder'; | ||
|
||
UPDATE varchar_partitioned_table SET name = 'Samay' WHERE id = 5; | ||
|
||
SELECT * FROM varchar_partitioned_table WHERE name = 'Samay'; |