Add tests verifying that updates return correct tuple counts.

This unfortunately requires adding a new table, triggering renumbering
of a number of shard ids.
pull/578/head
Andres Freund 2016-06-22 14:36:36 -07:00
parent 0b6819f773
commit d5ad8d7db9
2 changed files with 95 additions and 2 deletions

View File

@ -12,6 +12,10 @@ CREATE TABLE limit_orders (
kind order_side NOT NULL, kind order_side NOT NULL,
limit_price decimal NOT NULL DEFAULT 0.00 CHECK (limit_price >= 0.00) limit_price decimal NOT NULL DEFAULT 0.00 CHECK (limit_price >= 0.00)
); );
CREATE TABLE multiple_hash (
category text NOT NULL,
data text NOT NULL
);
CREATE TABLE insufficient_shards ( LIKE limit_orders ); CREATE TABLE insufficient_shards ( LIKE limit_orders );
CREATE TABLE range_partitioned ( LIKE limit_orders ); CREATE TABLE range_partitioned ( LIKE limit_orders );
CREATE TABLE append_partitioned ( LIKE limit_orders ); CREATE TABLE append_partitioned ( LIKE limit_orders );
@ -21,6 +25,12 @@ SELECT master_create_distributed_table('limit_orders', 'id', 'hash');
(1 row) (1 row)
SELECT master_create_distributed_table('multiple_hash', 'category', 'hash');
master_create_distributed_table
---------------------------------
(1 row)
SELECT master_create_distributed_table('insufficient_shards', 'id', 'hash'); SELECT master_create_distributed_table('insufficient_shards', 'id', 'hash');
master_create_distributed_table master_create_distributed_table
--------------------------------- ---------------------------------
@ -45,6 +55,12 @@ SELECT master_create_worker_shards('limit_orders', 2, 2);
(1 row) (1 row)
SELECT master_create_worker_shards('multiple_hash', 2, 2);
master_create_worker_shards
-----------------------------
(1 row)
-- make a single shard that covers no partition values -- make a single shard that covers no partition values
SELECT master_create_worker_shards('insufficient_shards', 1, 1); SELECT master_create_worker_shards('insufficient_shards', 1, 1);
master_create_worker_shards master_create_worker_shards
@ -95,7 +111,7 @@ INSERT INTO append_partitioned VALUES (414123, 'AAPL', 9580, '2004-10-19 10:23:5
SET client_min_messages TO 'DEBUG2'; SET client_min_messages TO 'DEBUG2';
SET citus.task_executor_type TO 'real-time'; SET citus.task_executor_type TO 'real-time';
SELECT * FROM range_partitioned WHERE id = 32743; SELECT * FROM range_partitioned WHERE id = 32743;
DEBUG: predicate pruning for shardId 750004 DEBUG: predicate pruning for shardId 750006
DEBUG: Plan is router executable DEBUG: Plan is router executable
id | symbol | bidder_id | placed_at | kind | limit_price id | symbol | bidder_id | placed_at | kind | limit_price
-------+--------+-----------+--------------------------+------+------------- -------+--------+-----------+--------------------------+------+-------------
@ -103,7 +119,7 @@ DEBUG: Plan is router executable
(1 row) (1 row)
SELECT * FROM append_partitioned WHERE id = 414123; SELECT * FROM append_partitioned WHERE id = 414123;
DEBUG: predicate pruning for shardId 750006 DEBUG: predicate pruning for shardId 750008
DEBUG: Plan is router executable DEBUG: Plan is router executable
id | symbol | bidder_id | placed_at | kind | limit_price id | symbol | bidder_id | placed_at | kind | limit_price
--------+--------+-----------+--------------------------+------+------------- --------+--------+-----------+--------------------------+------+-------------
@ -380,3 +396,46 @@ ERROR: functions used in modification queries on distributed tables must be mar
-- cursors are not supported -- cursors are not supported
UPDATE limit_orders SET symbol = 'GM' WHERE CURRENT OF cursor_name; UPDATE limit_orders SET symbol = 'GM' WHERE CURRENT OF cursor_name;
ERROR: distributed modifications must target exactly one shard ERROR: distributed modifications must target exactly one shard
-- ensure returned row counters are correct
\set QUIET off
INSERT INTO multiple_hash VALUES ('1', '1');
INSERT 0 1
INSERT INTO multiple_hash VALUES ('1', '2');
INSERT 0 1
INSERT INTO multiple_hash VALUES ('1', '3');
INSERT 0 1
INSERT INTO multiple_hash VALUES ('2', '1');
INSERT 0 1
INSERT INTO multiple_hash VALUES ('2', '2');
INSERT 0 1
INSERT INTO multiple_hash VALUES ('2', '3');
INSERT 0 1
-- check that update return the right number of rows
-- one row
UPDATE multiple_hash SET data = data ||'-1' WHERE category = '1' AND data = '1';
UPDATE 1
-- three rows
UPDATE multiple_hash SET data = data ||'-2' WHERE category = '1';
UPDATE 3
-- check
SELECT * FROM multiple_hash WHERE category = '1' ORDER BY category, data;
category | data
----------+-------
1 | 1-1-2
1 | 2-2
1 | 3-2
(3 rows)
-- check that deletes return the right number of rows
-- one row
DELETE FROM multiple_hash WHERE category = '2' AND data = '1';
DELETE 1
-- two rows
DELETE FROM multiple_hash WHERE category = '2';
DELETE 2
-- check
SELECT * FROM multiple_hash WHERE category = '2' ORDER BY category, data;
category | data
----------+------
(0 rows)

View File

@ -18,16 +18,24 @@ CREATE TABLE limit_orders (
limit_price decimal NOT NULL DEFAULT 0.00 CHECK (limit_price >= 0.00) limit_price decimal NOT NULL DEFAULT 0.00 CHECK (limit_price >= 0.00)
); );
CREATE TABLE multiple_hash (
category text NOT NULL,
data text NOT NULL
);
CREATE TABLE insufficient_shards ( LIKE limit_orders ); CREATE TABLE insufficient_shards ( LIKE limit_orders );
CREATE TABLE range_partitioned ( LIKE limit_orders ); CREATE TABLE range_partitioned ( LIKE limit_orders );
CREATE TABLE append_partitioned ( LIKE limit_orders ); CREATE TABLE append_partitioned ( LIKE limit_orders );
SELECT master_create_distributed_table('limit_orders', 'id', 'hash'); SELECT master_create_distributed_table('limit_orders', 'id', 'hash');
SELECT master_create_distributed_table('multiple_hash', 'category', 'hash');
SELECT master_create_distributed_table('insufficient_shards', 'id', 'hash'); SELECT master_create_distributed_table('insufficient_shards', 'id', 'hash');
SELECT master_create_distributed_table('range_partitioned', 'id', 'range'); SELECT master_create_distributed_table('range_partitioned', 'id', 'range');
SELECT master_create_distributed_table('append_partitioned', 'id', 'append'); SELECT master_create_distributed_table('append_partitioned', 'id', 'append');
SELECT master_create_worker_shards('limit_orders', 2, 2); SELECT master_create_worker_shards('limit_orders', 2, 2);
SELECT master_create_worker_shards('multiple_hash', 2, 2);
-- make a single shard that covers no partition values -- make a single shard that covers no partition values
SELECT master_create_worker_shards('insufficient_shards', 1, 1); SELECT master_create_worker_shards('insufficient_shards', 1, 1);
@ -292,3 +300,29 @@ UPDATE limit_orders SET placed_at = now() WHERE id = 246;
-- cursors are not supported -- cursors are not supported
UPDATE limit_orders SET symbol = 'GM' WHERE CURRENT OF cursor_name; UPDATE limit_orders SET symbol = 'GM' WHERE CURRENT OF cursor_name;
-- ensure returned row counters are correct
\set QUIET off
INSERT INTO multiple_hash VALUES ('1', '1');
INSERT INTO multiple_hash VALUES ('1', '2');
INSERT INTO multiple_hash VALUES ('1', '3');
INSERT INTO multiple_hash VALUES ('2', '1');
INSERT INTO multiple_hash VALUES ('2', '2');
INSERT INTO multiple_hash VALUES ('2', '3');
-- check that update return the right number of rows
-- one row
UPDATE multiple_hash SET data = data ||'-1' WHERE category = '1' AND data = '1';
-- three rows
UPDATE multiple_hash SET data = data ||'-2' WHERE category = '1';
-- check
SELECT * FROM multiple_hash WHERE category = '1' ORDER BY category, data;
-- check that deletes return the right number of rows
-- one row
DELETE FROM multiple_hash WHERE category = '2' AND data = '1';
-- two rows
DELETE FROM multiple_hash WHERE category = '2';
-- check
SELECT * FROM multiple_hash WHERE category = '2' ORDER BY category, data;