diff options
Diffstat (limited to 'src/test/isolation/specs/merge-update.spec')
-rw-r--r-- | src/test/isolation/specs/merge-update.spec | 133 |
1 files changed, 0 insertions, 133 deletions
diff --git a/src/test/isolation/specs/merge-update.spec b/src/test/isolation/specs/merge-update.spec deleted file mode 100644 index 625b477eb9f..00000000000 --- a/src/test/isolation/specs/merge-update.spec +++ /dev/null @@ -1,133 +0,0 @@ -# MERGE UPDATE -# -# This test exercises atypical cases -# 1. UPDATEs of PKs that change the join in the ON clause -# 2. UPDATEs with WHEN AND conditions that would fail after concurrent update -# 3. UPDATEs with extra ON conditions that would fail after concurrent update - -setup -{ - CREATE TABLE target (key int primary key, val text); - INSERT INTO target VALUES (1, 'setup1'); - - CREATE TABLE pa_target (key integer, val text) - PARTITION BY LIST (key); - CREATE TABLE part1 (key integer, val text); - CREATE TABLE part2 (val text, key integer); - CREATE TABLE part3 (key integer, val text); - - ALTER TABLE pa_target ATTACH PARTITION part1 FOR VALUES IN (1,4); - ALTER TABLE pa_target ATTACH PARTITION part2 FOR VALUES IN (2,5,6); - ALTER TABLE pa_target ATTACH PARTITION part3 DEFAULT; - - INSERT INTO pa_target VALUES (1, 'initial'); - INSERT INTO pa_target VALUES (2, 'initial'); -} - -teardown -{ - DROP TABLE target; - DROP TABLE pa_target CASCADE; -} - -session "s1" -setup -{ - BEGIN ISOLATION LEVEL READ COMMITTED; -} -step "merge1" -{ - MERGE INTO target t - USING (SELECT 1 as key, 'merge1' as val) s - ON s.key = t.key - WHEN NOT MATCHED THEN - INSERT VALUES (s.key, s.val) - WHEN MATCHED THEN - UPDATE set key = t.key + 1, val = t.val || ' updated by ' || s.val; -} -step "pa_merge1" -{ - MERGE INTO pa_target t - USING (SELECT 1 as key, 'pa_merge1' as val) s - ON s.key = t.key - WHEN NOT MATCHED THEN - INSERT VALUES (s.key, s.val) - WHEN MATCHED THEN - UPDATE set val = t.val || ' updated by ' || s.val; -} -step "pa_merge2" -{ - MERGE INTO pa_target t - USING (SELECT 1 as key, 'pa_merge1' as val) s - ON s.key = t.key - WHEN NOT MATCHED THEN - INSERT VALUES (s.key, s.val) - WHEN MATCHED THEN - UPDATE set key = t.key + 1, val = t.val || ' updated by ' || s.val; -} -step "c1" { COMMIT; } -step "a1" { ABORT; } - -session "s2" -setup -{ - BEGIN ISOLATION LEVEL READ COMMITTED; -} -step "merge2a" -{ - MERGE INTO target t - USING (SELECT 1 as key, 'merge2a' as val) s - ON s.key = t.key - WHEN NOT MATCHED THEN - INSERT VALUES (s.key, s.val) - WHEN MATCHED THEN - UPDATE set key = t.key + 1, val = t.val || ' updated by ' || s.val; -} -step "merge2b" -{ - MERGE INTO target t - USING (SELECT 1 as key, 'merge2b' as val) s - ON s.key = t.key - WHEN NOT MATCHED THEN - INSERT VALUES (s.key, s.val) - WHEN MATCHED AND t.key < 2 THEN - UPDATE set key = t.key + 1, val = t.val || ' updated by ' || s.val; -} -step "merge2c" -{ - MERGE INTO target t - USING (SELECT 1 as key, 'merge2c' as val) s - ON s.key = t.key AND t.key < 2 - WHEN NOT MATCHED THEN - INSERT VALUES (s.key, s.val) - WHEN MATCHED THEN - UPDATE set key = t.key + 1, val = t.val || ' updated by ' || s.val; -} -step "pa_merge2a" -{ - MERGE INTO pa_target t - USING (SELECT 1 as key, 'pa_merge2a' as val) s - ON s.key = t.key - WHEN NOT MATCHED THEN - INSERT VALUES (s.key, s.val) - WHEN MATCHED THEN - UPDATE set key = t.key + 1, val = t.val || ' updated by ' || s.val; -} -step "select2" { SELECT * FROM target; } -step "pa_select2" { SELECT * FROM pa_target; } -step "c2" { COMMIT; } - -# Basic effects -permutation "merge1" "c1" "select2" "c2" - -# One after the other, no concurrency -permutation "merge1" "c1" "merge2a" "select2" "c2" - -# Now with concurrency -permutation "merge1" "merge2a" "c1" "select2" "c2" -permutation "merge1" "merge2a" "a1" "select2" "c2" -permutation "merge1" "merge2b" "c1" "select2" "c2" -permutation "merge1" "merge2c" "c1" "select2" "c2" -permutation "pa_merge1" "pa_merge2a" "c1" "pa_select2" "c2" -permutation "pa_merge2" "pa_merge2a" "c1" "pa_select2" "c2" # fails -permutation "pa_merge2" "c1" "pa_merge2a" "pa_select2" "c2" # succeeds |