Skip to content

Commit 5b8b4bc

Browse files
Add support of package removal rollback
1 parent 65d74a6 commit 5b8b4bc

File tree

5 files changed

+837
-275
lines changed

5 files changed

+837
-275
lines changed

README.md

Lines changed: 22 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -335,14 +335,32 @@ SELECT pgv_get('pack','var_int', NULL::int);
335335
ERROR: unrecognized variable "var_int"
336336
COMMIT;
337337
```
338-
Also you cannot undo removing variable by `ROLLBACK`:
338+
You can undo removal of a transactional variable by `ROLLBACK`, but if you remove
339+
a whole package, all regular variables will be removed permanently:
339340
```sql
340-
SELECT pgv_set('pack', 'var_int', 122, true);
341+
SELECT pgv_set('pack', 'var_reg', 123);
342+
SELECT pgv_set('pack', 'var_trans', 456, true);
341343
BEGIN;
342344
SELECT pgv_free();
345+
SELECT * FROM pgv_list();
346+
package | name | is_transactional
347+
---------+------+------------------
348+
(0 rows)
349+
350+
-- Memory is allocated yet
351+
SELECT * FROM pgv_stats();
352+
package | allocated_memory
353+
---------+------------------
354+
pack | 24576
355+
(1 row)
356+
343357
ROLLBACK;
344-
SELECT pgv_get('pack', 'var_int', NULL::int);
345-
ERROR: unrecognized package "pack"
358+
SELECT * FROM pgv_list();
359+
package | name | is_transactional
360+
---------+-----------+------------------
361+
pack | var_trans | t
362+
(1 row)
363+
346364
```
347365
If you created transactional variable once, you should use flag `is_transactional`
348366
every time when you want to change variable value by functions `pgv_set()`,

expected/pg_variables_trans.out

Lines changed: 149 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1653,3 +1653,152 @@ SELECT pgv_exists('vars', 'any1');
16531653

16541654
SELECT pgv_get('vars', 'any1',NULL::text);
16551655
ERROR: unrecognized variable "any1"
1656+
SELECT * FROM pgv_list() ORDER BY package, name;
1657+
package | name | is_transactional
1658+
---------+------+------------------
1659+
vars3 | r1 | t
1660+
(1 row)
1661+
1662+
BEGIN;
1663+
SELECT pgv_free();
1664+
pgv_free
1665+
----------
1666+
1667+
(1 row)
1668+
1669+
ROLLBACK;
1670+
SELECT * FROM pgv_list() ORDER BY package, name;
1671+
package | name | is_transactional
1672+
---------+------+------------------
1673+
vars3 | r1 | t
1674+
(1 row)
1675+
1676+
BEGIN;
1677+
SELECT pgv_free();
1678+
pgv_free
1679+
----------
1680+
1681+
(1 row)
1682+
1683+
COMMIT;
1684+
SELECT * FROM pgv_list() ORDER BY package, name;
1685+
package | name | is_transactional
1686+
---------+------+------------------
1687+
(0 rows)
1688+
1689+
SELECT pgv_set('vars', 'regular', 'regular variable exists'::text);
1690+
pgv_set
1691+
---------
1692+
1693+
(1 row)
1694+
1695+
SELECT pgv_set('vars', 'trans1', 'trans1 variable exists'::text, true);
1696+
pgv_set
1697+
---------
1698+
1699+
(1 row)
1700+
1701+
BEGIN;
1702+
SELECT pgv_free();
1703+
pgv_free
1704+
----------
1705+
1706+
(1 row)
1707+
1708+
SELECT * FROM pgv_list() ORDER BY package, name;
1709+
package | name | is_transactional
1710+
---------+------+------------------
1711+
(0 rows)
1712+
1713+
SELECT pgv_set('vars', 'trans2', 'trans2 variable exists'::text, true);
1714+
pgv_set
1715+
---------
1716+
1717+
(1 row)
1718+
1719+
SELECT * FROM pgv_list() ORDER BY package, name;
1720+
package | name | is_transactional
1721+
---------+--------+------------------
1722+
vars | trans2 | t
1723+
(1 row)
1724+
1725+
SELECT pgv_remove('vars');
1726+
pgv_remove
1727+
------------
1728+
1729+
(1 row)
1730+
1731+
SELECT * FROM pgv_list() ORDER BY package, name;
1732+
package | name | is_transactional
1733+
---------+------+------------------
1734+
(0 rows)
1735+
1736+
ROLLBACK;
1737+
SELECT * FROM pgv_list() ORDER BY package, name;
1738+
package | name | is_transactional
1739+
---------+--------+------------------
1740+
vars | trans1 | t
1741+
(1 row)
1742+
1743+
BEGIN;
1744+
SAVEPOINT sp1;
1745+
SAVEPOINT sp2;
1746+
SAVEPOINT sp3;
1747+
SELECT pgv_set('vars2', 'trans', 'variable exists'::text, true);
1748+
pgv_set
1749+
---------
1750+
1751+
(1 row)
1752+
1753+
SAVEPOINT sp4;
1754+
SAVEPOINT sp5;
1755+
--SELECT pgv_remove('vars2');
1756+
SELECT pgv_free();
1757+
pgv_free
1758+
----------
1759+
1760+
(1 row)
1761+
1762+
SELECT pgv_stats();
1763+
pgv_stats
1764+
---------------
1765+
(vars2,24576)
1766+
(vars,24576)
1767+
(2 rows)
1768+
1769+
SELECT pgv_list();
1770+
pgv_list
1771+
----------
1772+
(0 rows)
1773+
1774+
RELEASE sp5;
1775+
SELECT pgv_stats();
1776+
pgv_stats
1777+
---------------
1778+
(vars2,24576)
1779+
(vars,24576)
1780+
(2 rows)
1781+
1782+
SELECT pgv_list();
1783+
pgv_list
1784+
----------
1785+
(0 rows)
1786+
1787+
RELEASE sp4;
1788+
SELECT pgv_stats();
1789+
pgv_stats
1790+
--------------
1791+
(vars,24576)
1792+
(1 row)
1793+
1794+
SELECT pgv_list();
1795+
pgv_list
1796+
----------
1797+
(0 rows)
1798+
1799+
COMMIT;
1800+
SELECT pgv_stats();
1801+
pgv_stats
1802+
-----------
1803+
(0 rows)
1804+

0 commit comments

Comments
 (0)