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

Commit21df5c3

Browse files
CherkashinSergeyza-arthur
authored andcommitted
Optimize objects removal in subtransaction rollback
1 parentb53645f commit21df5c3

File tree

3 files changed

+42
-13
lines changed

3 files changed

+42
-13
lines changed

‎expected/pg_variables_trans.out

Lines changed: 27 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1881,7 +1881,7 @@ RELEASE comm;
18811881
SELECT pgv_get('vars', 'any1',NULL::text);
18821882
ERROR: unrecognized variable "any1"
18831883
COMMIT;
1884-
--Test for PGPRO-2440
1884+
--Tests for PGPRO-2440
18851885
SELECT pgv_insert('vars3', 'r3', row(1 :: integer, NULL::varchar), true);
18861886
pgv_insert
18871887
------------
@@ -1909,6 +1909,32 @@ SELECT pgv_delete('vars3', 'r3', 3);
19091909
t
19101910
(1 row)
19111911

1912+
BEGIN;
1913+
SELECT pgv_set('vars1', 't1', ''::text);
1914+
pgv_set
1915+
---------
1916+
1917+
(1 row)
1918+
1919+
SELECT pgv_set('vars2', 't2', ''::text, true);
1920+
pgv_set
1921+
---------
1922+
1923+
(1 row)
1924+
1925+
SAVEPOINT sp1;
1926+
SAVEPOINT sp2;
1927+
SELECT pgv_free();
1928+
pgv_free
1929+
----------
1930+
1931+
(1 row)
1932+
1933+
ERROR;
1934+
ERROR: syntax error at or near "ERROR"
1935+
LINE 1: ERROR;
1936+
^
1937+
COMMIT;
19121938
SELECT pgv_free();
19131939
pgv_free
19141940
----------

‎pg_variables.c

Lines changed: 5 additions & 11 deletions
Original file line numberDiff line numberDiff line change
@@ -1672,7 +1672,6 @@ removeObject(TransObject *object, TransObjectType type)
16721672
package= (Package*)object;
16731673

16741674
/* Regular variables had already removed */
1675-
//Here we should think, when regular HTAB should be removed
16761675
if (package->hctxRegular)
16771676
MemoryContextDelete(package->hctxRegular);
16781677
if (package->hctxTransact)
@@ -1696,10 +1695,11 @@ removeObject(TransObject *object, TransObjectType type)
16961695
hash_search(hash,object->name,HASH_REMOVE,&found);
16971696

16981697
/* Remove package if it became empty */
1699-
if (type==TRANS_VARIABLE&&
1700-
isObjectChangedInCurrentTrans(&package->transObject)&&
1701-
isPackageEmpty(package))
1698+
if (type==TRANS_VARIABLE&&isPackageEmpty(package))
1699+
{
1700+
Assert(isObjectChangedInCurrentTrans(&package->transObject));
17021701
GetActualState(&package->transObject)->is_valid= false;
1702+
}
17031703

17041704
resetVariablesCache(true);
17051705
}
@@ -1740,14 +1740,8 @@ rollbackSavepoint(TransObject *object, TransObjectType type)
17401740
state=GetActualState(object);
17411741
if (type==TRANS_PACKAGE)
17421742
{
1743-
if (!state->is_valid)
1743+
if (!state->is_valid&& !isPackageEmpty((Package*)object))
17441744
{
1745-
if (isPackageEmpty((Package*)object))
1746-
{
1747-
removeObject(object,TRANS_PACKAGE);
1748-
return;
1749-
}
1750-
17511745
if (dlist_has_next(&object->states,&state->node))
17521746
{
17531747
dlist_pop_head_node(&object->states);

‎sql/pg_variables_trans.sql

Lines changed: 10 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -482,7 +482,7 @@ RELEASE comm;
482482
SELECT pgv_get('vars','any1',NULL::text);
483483
COMMIT;
484484

485-
--Test for PGPRO-2440
485+
--Tests for PGPRO-2440
486486
SELECT pgv_insert('vars3','r3', row(1 ::integer,NULL::varchar), true);
487487
BEGIN;
488488
SELECT pgv_insert('vars3','r3', row(2 ::integer,NULL::varchar), true);
@@ -491,4 +491,13 @@ SELECT pgv_insert('vars3', 'r3', row(3 :: integer, NULL::varchar), true);
491491
COMMIT;
492492
SELECT pgv_delete('vars3','r3',3);
493493

494+
BEGIN;
495+
SELECT pgv_set('vars1','t1',''::text);
496+
SELECT pgv_set('vars2','t2',''::text, true);
497+
SAVEPOINT sp1;
498+
SAVEPOINT sp2;
499+
SELECT pgv_free();
500+
ERROR;
501+
COMMIT;
502+
494503
SELECT pgv_free();

0 commit comments

Comments
 (0)

[8]ページ先頭

©2009-2025 Movatter.jp