aboutsummaryrefslogtreecommitdiff
path: root/src/test/isolation/specs/detach-partition-concurrently-2.spec
blob: 9281c80a69fabdda742e5d0789ac2c7f90ec6456 (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
# Test that detach partition concurrently makes the partition safe
# for foreign keys that reference it.

setup
{
  DROP TABLE IF EXISTS d_lp_fk, d_lp_fk_1, d_lp_fk_2, d_lp_fk_r;

  CREATE TABLE d_lp_fk (a int PRIMARY KEY) PARTITION BY LIST(a);
  CREATE TABLE d_lp_fk_1 PARTITION OF d_lp_fk FOR VALUES IN (1);
  CREATE TABLE d_lp_fk_2 PARTITION OF d_lp_fk FOR VALUES IN (2);
  INSERT INTO d_lp_fk VALUES (1), (2);

  CREATE TABLE d_lp_fk_r (a int references d_lp_fk);
}

teardown { DROP TABLE IF EXISTS d_lp_fk, d_lp_fk_1, d_lp_fk_2, d_lp_fk_r; }

session "s1"
step "s1b"		{ BEGIN; }
step "s1s"		{ SELECT * FROM d_lp_fk; }
step "s1c"		{ COMMIT; }

session "s2"
step "s2d"		{ ALTER TABLE d_lp_fk DETACH PARTITION d_lp_fk_1 CONCURRENTLY; }

session "s3"
step "s3b"		{ BEGIN; }
step "s3i1"		{ INSERT INTO d_lp_fk_r VALUES (1); }
step "s3i2"		{ INSERT INTO d_lp_fk_r VALUES (2); }
step "s3c"		{ COMMIT; }

# The transaction that detaches hangs until it sees any older transaction
# terminate.
permutation "s1b" "s1s" "s2d" "s3i1" "s1c"
permutation "s1b" "s1s" "s2d" "s3i2" "s3i2" "s1c"

permutation "s1b" "s1s" "s3i1" "s2d" "s1c"
permutation "s1b" "s1s" "s3i2" "s2d" "s1c"

# what if s3 has an uncommitted insertion?
permutation "s1b" "s1s" "s3b" "s2d" "s3i1" "s1c" "s3c"