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)
pFad - Phonifier reborn

Pfad - The Proxy pFad of © 2024 Garber Painting. All rights reserved.

Note: This service is not intended for secure transactions such as banking, social media, email, or purchasing. Use at your own risk. We assume no liability whatsoever for broken pages.


Alternative Proxies:

Alternative Proxy

pFad Proxy

pFad v3 Proxy

pFad v4 Proxy