plpgsql: pure parser and reentrant scanner
[pgsql.git] / src / test / regress / sql / txid.sql
blob8d5ac98a892060212e59c9c98af75eddb76baff0
1 -- txid_snapshot data type and related functions
2 -- Note: these are backward-compatibility functions and types, and have been
3 -- replaced by new xid8-based variants.  See xid.sql.  The txid variants will
4 -- be removed in a future release.
6 -- i/o
7 select '12:13:'::txid_snapshot;
8 select '12:18:14,16'::txid_snapshot;
9 select '12:16:14,14'::txid_snapshot;
11 -- errors
12 select '31:12:'::txid_snapshot;
13 select '0:1:'::txid_snapshot;
14 select '12:13:0'::txid_snapshot;
15 select '12:16:14,13'::txid_snapshot;
17 create temp table snapshot_test (
18         nr      integer,
19         snap    txid_snapshot
22 insert into snapshot_test values (1, '12:13:');
23 insert into snapshot_test values (2, '12:20:13,15,18');
24 insert into snapshot_test values (3, '100001:100009:100005,100007,100008');
25 insert into snapshot_test values (4, '100:150:101,102,103,104,105,106,107,108,109,110,111,112,113,114,115,116,117,118,119,120,121,122,123,124,125,126,127,128,129,130,131');
26 select snap from snapshot_test order by nr;
28 select  txid_snapshot_xmin(snap),
29         txid_snapshot_xmax(snap),
30         txid_snapshot_xip(snap)
31 from snapshot_test order by nr;
33 select id, txid_visible_in_snapshot(id, snap)
34 from snapshot_test, generate_series(11, 21) id
35 where nr = 2;
37 -- test bsearch
38 select id, txid_visible_in_snapshot(id, snap)
39 from snapshot_test, generate_series(90, 160) id
40 where nr = 4;
42 -- test current values also
43 select txid_current() >= txid_snapshot_xmin(txid_current_snapshot());
45 -- we can't assume current is always less than xmax, however
47 select txid_visible_in_snapshot(txid_current(), txid_current_snapshot());
49 -- test 64bitness
51 select txid_snapshot '1000100010001000:1000100010001100:1000100010001012,1000100010001013';
52 select txid_visible_in_snapshot('1000100010001012', '1000100010001000:1000100010001100:1000100010001012,1000100010001013');
53 select txid_visible_in_snapshot('1000100010001015', '1000100010001000:1000100010001100:1000100010001012,1000100010001013');
55 -- test 64bit overflow
56 SELECT txid_snapshot '1:9223372036854775807:3';
57 SELECT txid_snapshot '1:9223372036854775808:3';
59 -- test txid_current_if_assigned
60 BEGIN;
61 SELECT txid_current_if_assigned() IS NULL;
62 SELECT txid_current() \gset
63 SELECT txid_current_if_assigned() IS NOT DISTINCT FROM BIGINT :'txid_current';
64 COMMIT;
66 -- test xid status functions
67 BEGIN;
68 SELECT txid_current() AS committed \gset
69 COMMIT;
71 BEGIN;
72 SELECT txid_current() AS rolledback \gset
73 ROLLBACK;
75 BEGIN;
76 SELECT txid_current() AS inprogress \gset
78 SELECT txid_status(:committed) AS committed;
79 SELECT txid_status(:rolledback) AS rolledback;
80 SELECT txid_status(:inprogress) AS inprogress;
81 SELECT txid_status(1); -- BootstrapTransactionId is always committed
82 SELECT txid_status(2); -- FrozenTransactionId is always committed
83 SELECT txid_status(3); -- in regress testing FirstNormalTransactionId will always be behind oldestXmin
85 COMMIT;
87 BEGIN;
88 CREATE FUNCTION test_future_xid_status(bigint)
89 RETURNS void
90 LANGUAGE plpgsql
93 BEGIN
94   PERFORM txid_status($1);
95   RAISE EXCEPTION 'didn''t ERROR at xid in the future as expected';
96 EXCEPTION
97   WHEN invalid_parameter_value THEN
98     RAISE NOTICE 'Got expected error for xid in the future';
99 END;
101 SELECT test_future_xid_status(:inprogress + 10000);
102 ROLLBACK;