Movatterモバイル変換


[0]ホーム

URL:


Skip to content

Navigation Menu

Sign in
Appearance settings

Search code, repositories, users, issues, pull requests...

Provide feedback

We read every piece of feedback, and take your input very seriously.

Saved searches

Use saved searches to filter your results more quickly

Sign up
Appearance settings

Commit26c5328

Browse files
authored
Merge pull request#11 from CherkashinSergey/add_xact_support
Add support of package removal rollback
2 parents9d3e182 +4194f40 commit26c5328

File tree

6 files changed

+1175
-592
lines changed

6 files changed

+1175
-592
lines changed

‎README.md‎

Lines changed: 24 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -304,8 +304,8 @@ SELECT pgv_get('pack', 'var_text', NULL::text);
304304
before transaction block
305305
```
306306

307-
If you create variable after`BEGIN` or`SAVEPOINT` statementsand than rollback
308-
to previous state - variable will not be exist:
307+
If you createa transactionalvariable after`BEGIN` or`SAVEPOINT` statements
308+
and then rollbackto previous state - variable will not be exist:
309309

310310
```sql
311311
BEGIN;
@@ -324,15 +324,33 @@ ERROR: unrecognized variable "var_int"
324324
COMMIT;
325325
```
326326

327-
Also you cannot undo removing variable by`ROLLBACK`:
327+
You can undo removal of a transactional variable by`ROLLBACK`, but if you remove
328+
a whole package, all regular variables will be removed permanently:
328329

329330
```sql
330-
SELECT pgv_set('pack','var_int',122, true);
331+
SELECT pgv_set('pack','var_reg',123);
332+
SELECT pgv_set('pack','var_trans',456, true);
331333
BEGIN;
332334
SELECT pgv_free();
335+
SELECT*FROM pgv_list();
336+
package | name | is_transactional
337+
---------+------+------------------
338+
(0 rows)
339+
340+
-- Memory is allocated yet
341+
SELECT*FROM pgv_stats();
342+
package | allocated_memory
343+
---------+------------------
344+
pack |24576
345+
(1 row)
346+
333347
ROLLBACK;
334-
SELECT pgv_get('pack','var_int',NULL::int);
335-
ERROR: unrecognized package"pack"
348+
SELECT*FROM pgv_list();
349+
package | name | is_transactional
350+
---------+-----------+------------------
351+
pack | var_trans | t
352+
(1 row)
353+
336354
```
337355

338356
If you created transactional variable once, you should use flag`is_transactional`

‎expected/pg_variables_trans.out‎

Lines changed: 241 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1392,7 +1392,7 @@ SELECT pgv_free();
13921392

13931393
(1 row)
13941394

1395-
--Additional tests
1395+
--Additional tests
13961396
SELECT pgv_insert('vars3', 'r1', tab, true) FROM tab;
13971397
pgv_insert
13981398
------------
@@ -1598,3 +1598,243 @@ BEGIN;
15981598
SELECT pgv_set('vars', 'any1', 'wrong type'::varchar, true);
15991599
ERROR: variable "any1" requires "text" value
16001600
COMMIT;
1601+
-- THE REMOVAL OF THE VARIABLE MUST BE CANCELED ON ROLLBACK
1602+
SELECT pgv_set('vars', 'any1', 'variable exists'::text, true);
1603+
pgv_set
1604+
---------
1605+
1606+
(1 row)
1607+
1608+
BEGIN;
1609+
SELECT pgv_remove('vars', 'any1');
1610+
pgv_remove
1611+
------------
1612+
1613+
(1 row)
1614+
1615+
SELECT pgv_exists('vars', 'any1');
1616+
pgv_exists
1617+
------------
1618+
f
1619+
(1 row)
1620+
1621+
ROLLBACK;
1622+
SELECT pgv_exists('vars', 'any1');
1623+
pgv_exists
1624+
------------
1625+
t
1626+
(1 row)
1627+
1628+
SELECT pgv_get('vars', 'any1',NULL::text);
1629+
pgv_get
1630+
-----------------
1631+
variable exists
1632+
(1 row)
1633+
1634+
BEGIN;
1635+
SELECT pgv_remove('vars', 'any1');
1636+
pgv_remove
1637+
------------
1638+
1639+
(1 row)
1640+
1641+
SELECT pgv_exists('vars', 'any1');
1642+
pgv_exists
1643+
------------
1644+
f
1645+
(1 row)
1646+
1647+
COMMIT;
1648+
SELECT pgv_exists('vars', 'any1');
1649+
pgv_exists
1650+
------------
1651+
f
1652+
(1 row)
1653+
1654+
SELECT pgv_get('vars', 'any1',NULL::text);
1655+
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', 'trans2', 'trans2 variable exists'::text, true);
1748+
pgv_set
1749+
---------
1750+
1751+
(1 row)
1752+
1753+
SAVEPOINT sp4;
1754+
SAVEPOINT sp5;
1755+
SELECT pgv_free();
1756+
pgv_free
1757+
----------
1758+
1759+
(1 row)
1760+
1761+
SELECT package FROM pgv_stats();
1762+
package
1763+
---------
1764+
vars2
1765+
vars
1766+
(2 rows)
1767+
1768+
SELECT * FROM pgv_list() ORDER BY package, name;
1769+
package | name | is_transactional
1770+
---------+------+------------------
1771+
(0 rows)
1772+
1773+
RELEASE sp5;
1774+
SELECT package FROM pgv_stats();
1775+
package
1776+
---------
1777+
vars2
1778+
vars
1779+
(2 rows)
1780+
1781+
SELECT * FROM pgv_list() ORDER BY package, name;
1782+
package | name | is_transactional
1783+
---------+------+------------------
1784+
(0 rows)
1785+
1786+
RELEASE sp4;
1787+
SELECT package FROM pgv_stats();
1788+
package
1789+
---------
1790+
vars
1791+
(1 row)
1792+
1793+
SELECT * FROM pgv_list() ORDER BY package, name;
1794+
package | name | is_transactional
1795+
---------+------+------------------
1796+
(0 rows)
1797+
1798+
COMMIT;
1799+
SELECT package FROM pgv_stats();
1800+
package
1801+
---------
1802+
(0 rows)
1803+
1804+
BEGIN;
1805+
SELECT pgv_set('vars', 'trans1', 'package created'::text, true);
1806+
pgv_set
1807+
---------
1808+
1809+
(1 row)
1810+
1811+
SELECT pgv_remove('vars');
1812+
pgv_remove
1813+
------------
1814+
1815+
(1 row)
1816+
1817+
SELECT * FROM pgv_list() ORDER BY package, name;
1818+
package | name | is_transactional
1819+
---------+------+------------------
1820+
(0 rows)
1821+
1822+
SELECT pgv_set('vars', 'trans1', 'package restored'::text, true);
1823+
pgv_set
1824+
---------
1825+
1826+
(1 row)
1827+
1828+
SELECT * FROM pgv_list() ORDER BY package, name;
1829+
package | name | is_transactional
1830+
---------+--------+------------------
1831+
vars | trans1 | t
1832+
(1 row)
1833+
1834+
COMMIT;
1835+
SELECT pgv_remove('vars');
1836+
pgv_remove
1837+
------------
1838+
1839+
(1 row)
1840+

0 commit comments

Comments
 (0)

[8]ページ先頭

©2009-2025 Movatter.jp