citus/src/test/regress/specs/isolation_select_for_update...

160 lines
4.1 KiB
Python

setup
{
SELECT citus.replace_isolation_tester_func();
SELECT citus.refresh_isolation_tester_prepared_statement();
SET citus.shard_replication_factor to 1;
CREATE TABLE test_table_1_rf1(id int, val_1 int);
SELECT create_distributed_table('test_table_1_rf1','id');
INSERT INTO test_table_1_rf1 values(1,2),(2,3),(3,4);
CREATE VIEW test_1 AS SELECT * FROM test_table_1_rf1 WHERE val_1 = 2;
CREATE TABLE test_table_2_rf1(id int, val_1 int);
SELECT create_distributed_table('test_table_2_rf1','id');
INSERT INTO test_table_2_rf1 values(1,2),(2,3),(3,4);
CREATE TABLE ref_table(id int, val_1 int);
SELECT create_reference_table('ref_table');
INSERT INTO ref_table values(1,2),(3,4),(5,6);
}
teardown
{
DROP TABLE test_table_1_rf1 CASCADE;
DROP TABLE test_table_2_rf1;
DROP TABLE ref_table;
SELECT citus.restore_isolation_tester_func();
}
session "s1"
step "s1-begin"
{
BEGIN;
}
step "s1-select-from-t1-t2-for-update"
{
SELECT * FROM
test_table_1_rf1 as tt1 INNER JOIN test_table_2_rf1 as tt2 on tt1.id = tt2.id
WHERE tt1.id = 1
ORDER BY 1
FOR UPDATE;
}
step "s1-select-from-t1-t2-for-share"
{
SELECT * FROM
test_table_1_rf1 as tt1 INNER JOIN test_table_2_rf1 as tt2 on tt1.id = tt2.id
WHERE tt1.id = 1
ORDER BY 1
FOR SHARE;
}
step "s1-select-from-t1-rt-for-update"
{
SELECT * FROM
test_table_1_rf1 as tt1 INNER JOIN ref_table as rt1 on tt1.id = rt1.id
WHERE tt1.id = 1
ORDER BY 1
FOR UPDATE;
}
step "s1-select-from-t1-rt-with-lc-for-update"
{
SELECT * FROM
test_table_1_rf1 as tt1 INNER JOIN ref_table as rt1 on tt1.id = rt1.id
WHERE tt1.id = 1
ORDER BY 1
FOR UPDATE
OF rt1;
}
step "s1-select-from-t1-within-cte"
{
WITH first_value AS ( SELECT val_1 FROM test_table_1_rf1 WHERE id = 1 FOR UPDATE)
SELECT * FROM first_value;
}
step "s1-select-from-t1-with-subquery"
{
SELECT * FROM (SELECT * FROM test_table_1_rf1 FOR UPDATE) foo WHERE id = 1;
}
step "s1-select-from-rt-with-subquery"
{
SELECT * FROM (SELECT * FROM ref_table FOR UPDATE) foo WHERE id = 1;
}
step "s1-select-from-t1-with-view"
{
SELECT * FROM test_1 WHERE id = 1 FOR UPDATE;
}
step "s1-finish"
{
COMMIT;
}
session "s2"
step "s2-begin"
{
BEGIN;
}
step "s2-update-t1"
{
UPDATE test_table_1_rf1 SET val_1 = 5 WHERE id = 1;
}
step "s2-update-rt"
{
UPDATE ref_table SET val_1 = 5 WHERE id = 1;
}
step "s2-delete-t1"
{
DELETE FROM test_table_1_rf1 WHERE id = 1;
}
step "s2-select-from-t1-t2-for-share"
{
SELECT * FROM
test_table_1_rf1 as tt1 INNER JOIN test_table_1_rf1 as tt2 on tt1.id = tt2.id
WHERE tt1.id = 1
ORDER BY 1
FOR SHARE;
}
step "s2-select-from-t1-t2-for-update"
{
SELECT * FROM
test_table_1_rf1 as tt1 INNER JOIN test_table_1_rf1 as tt2 on tt1.id = tt2.id
WHERE tt1.id = 1
ORDER BY 1
FOR UPDATE;
}
step "s2-finish"
{
COMMIT;
}
permutation "s1-begin" "s1-select-from-t1-t2-for-update" "s2-begin" "s2-update-t1" "s1-finish" "s2-finish"
permutation "s1-begin" "s1-select-from-t1-t2-for-share" "s2-begin" "s2-delete-t1" "s1-finish" "s2-finish"
permutation "s1-begin" "s1-select-from-t1-rt-for-update" "s2-begin" "s2-update-t1" "s1-finish" "s2-finish"
permutation "s1-begin" "s1-select-from-t1-rt-with-lc-for-update" "s2-begin" "s2-update-rt" "s1-finish" "s2-finish"
permutation "s1-begin" "s1-select-from-t1-rt-with-lc-for-update" "s2-begin" "s2-update-t1" "s1-finish" "s2-finish"
permutation "s1-begin" "s1-select-from-t1-t2-for-share" "s2-begin" "s2-select-from-t1-t2-for-share" "s1-finish" "s2-finish"
permutation "s1-begin" "s1-select-from-t1-rt-for-update" "s2-begin" "s2-select-from-t1-t2-for-update" "s1-finish" "s2-finish"
permutation "s1-begin" "s1-select-from-t1-within-cte" "s2-begin" "s2-select-from-t1-t2-for-update" "s1-finish" "s2-finish"
permutation "s1-begin" "s1-select-from-t1-within-cte" "s2-begin" "s2-update-t1" "s1-finish" "s2-finish"
permutation "s1-begin" "s1-select-from-t1-with-subquery" "s2-begin" "s2-update-t1" "s1-finish" "s2-finish"
permutation "s1-begin" "s1-select-from-rt-with-subquery" "s2-begin" "s2-update-rt" "s1-finish" "s2-finish"
permutation "s1-begin" "s1-select-from-t1-with-view" "s2-begin" "s2-update-t1" "s1-finish" "s2-finish"