chore: import upstream snapshot with attribution
This commit is contained in:
@@ -0,0 +1,111 @@
|
||||
--
|
||||
-- Tests for some likely failure cases with combo cmin/cmax mechanism
|
||||
--
|
||||
CREATE TEMP TABLE combocidtest (foobar int);
|
||||
|
||||
BEGIN;
|
||||
|
||||
-- a few dummy ops to push up the CommandId counter
|
||||
INSERT INTO combocidtest SELECT 1 LIMIT 0;
|
||||
INSERT INTO combocidtest SELECT 1 LIMIT 0;
|
||||
INSERT INTO combocidtest SELECT 1 LIMIT 0;
|
||||
INSERT INTO combocidtest SELECT 1 LIMIT 0;
|
||||
INSERT INTO combocidtest SELECT 1 LIMIT 0;
|
||||
INSERT INTO combocidtest SELECT 1 LIMIT 0;
|
||||
INSERT INTO combocidtest SELECT 1 LIMIT 0;
|
||||
INSERT INTO combocidtest SELECT 1 LIMIT 0;
|
||||
INSERT INTO combocidtest SELECT 1 LIMIT 0;
|
||||
INSERT INTO combocidtest SELECT 1 LIMIT 0;
|
||||
|
||||
INSERT INTO combocidtest VALUES (1);
|
||||
INSERT INTO combocidtest VALUES (2);
|
||||
|
||||
SELECT ctid,cmin,* FROM combocidtest;
|
||||
|
||||
SAVEPOINT s1;
|
||||
|
||||
UPDATE combocidtest SET foobar = foobar + 10;
|
||||
|
||||
-- here we should see only updated tuples
|
||||
SELECT ctid,cmin,* FROM combocidtest;
|
||||
|
||||
ROLLBACK TO s1;
|
||||
|
||||
-- now we should see old tuples, but with combo CIDs starting at 0
|
||||
SELECT ctid,cmin,* FROM combocidtest;
|
||||
|
||||
COMMIT;
|
||||
|
||||
-- combo data is not there anymore, but should still see tuples
|
||||
SELECT ctid,cmin,* FROM combocidtest;
|
||||
|
||||
-- Test combo CIDs with portals
|
||||
BEGIN;
|
||||
|
||||
INSERT INTO combocidtest VALUES (333);
|
||||
|
||||
DECLARE c CURSOR FOR SELECT ctid,cmin,* FROM combocidtest;
|
||||
|
||||
DELETE FROM combocidtest;
|
||||
|
||||
FETCH ALL FROM c;
|
||||
|
||||
ROLLBACK;
|
||||
|
||||
SELECT ctid,cmin,* FROM combocidtest;
|
||||
|
||||
-- check behavior with locked tuples
|
||||
BEGIN;
|
||||
|
||||
-- a few dummy ops to push up the CommandId counter
|
||||
INSERT INTO combocidtest SELECT 1 LIMIT 0;
|
||||
INSERT INTO combocidtest SELECT 1 LIMIT 0;
|
||||
INSERT INTO combocidtest SELECT 1 LIMIT 0;
|
||||
INSERT INTO combocidtest SELECT 1 LIMIT 0;
|
||||
INSERT INTO combocidtest SELECT 1 LIMIT 0;
|
||||
INSERT INTO combocidtest SELECT 1 LIMIT 0;
|
||||
INSERT INTO combocidtest SELECT 1 LIMIT 0;
|
||||
INSERT INTO combocidtest SELECT 1 LIMIT 0;
|
||||
INSERT INTO combocidtest SELECT 1 LIMIT 0;
|
||||
INSERT INTO combocidtest SELECT 1 LIMIT 0;
|
||||
|
||||
INSERT INTO combocidtest VALUES (444);
|
||||
|
||||
SELECT ctid,cmin,* FROM combocidtest;
|
||||
|
||||
SAVEPOINT s1;
|
||||
|
||||
-- this doesn't affect cmin
|
||||
SELECT ctid,cmin,* FROM combocidtest FOR UPDATE;
|
||||
SELECT ctid,cmin,* FROM combocidtest;
|
||||
|
||||
-- but this does
|
||||
UPDATE combocidtest SET foobar = foobar + 10;
|
||||
|
||||
SELECT ctid,cmin,* FROM combocidtest;
|
||||
|
||||
ROLLBACK TO s1;
|
||||
|
||||
SELECT ctid,cmin,* FROM combocidtest;
|
||||
|
||||
COMMIT;
|
||||
|
||||
SELECT ctid,cmin,* FROM combocidtest;
|
||||
|
||||
-- test for bug reported in
|
||||
-- CABRT9RC81YUf1=jsmWopcKJEro=VoeG2ou6sPwyOUTx_qteRsg@mail.gmail.com
|
||||
CREATE TABLE IF NOT EXISTS testcase(
|
||||
id int PRIMARY KEY,
|
||||
balance numeric
|
||||
);
|
||||
INSERT INTO testcase VALUES (1, 0);
|
||||
BEGIN;
|
||||
SELECT * FROM testcase WHERE testcase.id = 1 FOR UPDATE;
|
||||
UPDATE testcase SET balance = balance + 400 WHERE id=1;
|
||||
SAVEPOINT subxact;
|
||||
UPDATE testcase SET balance = balance - 100 WHERE id=1;
|
||||
ROLLBACK TO SAVEPOINT subxact;
|
||||
-- should return one tuple
|
||||
SELECT * FROM testcase WHERE id = 1 FOR UPDATE;
|
||||
ROLLBACK;
|
||||
DROP TABLE testcase;
|
||||
Reference in New Issue
Block a user