diff options
author | Tom Lane <tgl@sss.pgh.pa.us> | 2018-04-14 19:02:30 -0400 |
---|---|---|
committer | Tom Lane <tgl@sss.pgh.pa.us> | 2018-04-14 19:02:30 -0400 |
commit | b39fd897e0398a6bdc6552daa7cacdf9c0e46d7e (patch) | |
tree | 7b346a2bac678631de3d1a6b63b9be9690d4ef72 /src | |
parent | 50c6bb022475bd9ad9c73e3b68b5152db5163b22 (diff) | |
download | postgresql-b39fd897e0398a6bdc6552daa7cacdf9c0e46d7e.tar.gz postgresql-b39fd897e0398a6bdc6552daa7cacdf9c0e46d7e.zip |
Improve regression test coverage of expand_tuple().
I was dissatisfied with the code coverage report for expand_tuple() in the
wake of commit 7c44c46de: while better than no coverage at all, it was
still not exercising the core function of inserting out-of-line default
values, nor was the HeapTuple-output path covered. So far as I can find,
the only code path that reaches the latter at present is EvalPlanQual
fetches for non-locked tables. Hence, extend eval-plan-qual.spec to
test cases where out-of-line defaults must be inserted into a tuple
fetched from a non-locked table.
Discussion: https://postgr.es/m/87woxi24uw.fsf@ansel.ydns.eu
Diffstat (limited to 'src')
-rw-r--r-- | src/test/isolation/expected/eval-plan-qual.out | 20 | ||||
-rw-r--r-- | src/test/isolation/specs/eval-plan-qual.spec | 14 |
2 files changed, 34 insertions, 0 deletions
diff --git a/src/test/isolation/expected/eval-plan-qual.out b/src/test/isolation/expected/eval-plan-qual.out index fed01459cf0..9bbfdc1b5d6 100644 --- a/src/test/isolation/expected/eval-plan-qual.out +++ b/src/test/isolation/expected/eval-plan-qual.out @@ -145,6 +145,26 @@ accountid balance checking 1050 savings 600 +starting permutation: wx2_ext partiallock_ext c2 c1 read_ext +step wx2_ext: UPDATE accounts_ext SET balance = balance + 450; +step partiallock_ext: + SELECT * FROM accounts_ext a1, accounts_ext a2 + WHERE a1.accountid = a2.accountid + FOR UPDATE OF a1; + <waiting ...> +step c2: COMMIT; +step partiallock_ext: <... completed> +accountid balance other newcol newcol2 accountid balance other newcol newcol2 + +checking 1050 other 42 checking 600 other 42 +savings 1150 42 savings 700 42 +step c1: COMMIT; +step read_ext: SELECT * FROM accounts_ext ORDER BY accountid; +accountid balance other newcol newcol2 + +checking 1050 other 42 +savings 1150 42 + starting permutation: updateforss readforss c1 c2 step updateforss: UPDATE table_a SET value = 'newTableAValue' WHERE id = 1; diff --git a/src/test/isolation/specs/eval-plan-qual.spec b/src/test/isolation/specs/eval-plan-qual.spec index 51ab61dc862..0b70ad55ba1 100644 --- a/src/test/isolation/specs/eval-plan-qual.spec +++ b/src/test/isolation/specs/eval-plan-qual.spec @@ -9,6 +9,11 @@ setup CREATE TABLE accounts (accountid text PRIMARY KEY, balance numeric not null); INSERT INTO accounts VALUES ('checking', 600), ('savings', 600); + CREATE TABLE accounts_ext (accountid text PRIMARY KEY, balance numeric not null, other text); + INSERT INTO accounts_ext VALUES ('checking', 600, 'other'), ('savings', 700, null); + ALTER TABLE accounts_ext ADD COLUMN newcol int DEFAULT 42; + ALTER TABLE accounts_ext ADD COLUMN newcol2 text DEFAULT NULL; + CREATE TABLE p (a int, b int, c int); CREATE TABLE c1 () INHERITS (p); CREATE TABLE c2 () INHERITS (p); @@ -29,6 +34,7 @@ setup teardown { DROP TABLE accounts; + DROP TABLE accounts_ext; DROP TABLE p CASCADE; DROP TABLE table_a, table_b, jointest; } @@ -72,6 +78,11 @@ step "lockwithvalues" { WHERE a1.accountid = v.id FOR UPDATE OF a1; } +step "partiallock_ext" { + SELECT * FROM accounts_ext a1, accounts_ext a2 + WHERE a1.accountid = a2.accountid + FOR UPDATE OF a1; +} # these tests exercise EvalPlanQual with a SubLink sub-select (which should be # unaffected by any EPQ recheck behavior in the outer query); cf bug #14034 @@ -105,6 +116,7 @@ step "upsert2" { INSERT INTO accounts SELECT 'savings', 1234 WHERE NOT EXISTS (SELECT 1 FROM upsert); } +step "wx2_ext" { UPDATE accounts_ext SET balance = balance + 450; } step "readp2" { SELECT tableoid::regclass, ctid, * FROM p WHERE b IN (0, 1) AND c = 0 FOR UPDATE; } step "returningp1" { WITH u AS ( UPDATE p SET b = b WHERE a > 0 RETURNING * ) @@ -124,6 +136,7 @@ step "c2" { COMMIT; } session "s3" setup { BEGIN ISOLATION LEVEL READ COMMITTED; } step "read" { SELECT * FROM accounts ORDER BY accountid; } +step "read_ext" { SELECT * FROM accounts_ext ORDER BY accountid; } # this test exercises EvalPlanQual with a CTE, cf bug #14328 step "readwcte" { @@ -156,6 +169,7 @@ permutation "readp1" "writep1" "readp2" "c1" "c2" permutation "writep2" "returningp1" "c1" "c2" permutation "wx2" "partiallock" "c2" "c1" "read" permutation "wx2" "lockwithvalues" "c2" "c1" "read" +permutation "wx2_ext" "partiallock_ext" "c2" "c1" "read_ext" permutation "updateforss" "readforss" "c1" "c2" permutation "wrtwcte" "readwcte" "c1" "c2" permutation "wrjt" "selectjoinforupdate" "c2" "c1" |