Skip to content

Commit caf9314

Browse files
author
Maxim Orlov
committed
Issue #27: Error with transactional pgv_insert/pgv_remove - review
1 parent a927929 commit caf9314

File tree

3 files changed

+25
-26
lines changed

3 files changed

+25
-26
lines changed

expected/pg_variables_trans.out

+8-8
Original file line numberDiff line numberDiff line change
@@ -2034,7 +2034,7 @@ SELECT pgv_free();
20342034

20352035
-- Variables should be insertable after pgv_remove
20362036
BEGIN;
2037-
SELECT pgv_insert('test', 'x', ROW (1::int), TRUE);
2037+
SELECT pgv_insert('test', 'x', ROW (1::int, 2::int), TRUE);
20382038
pgv_insert
20392039
------------
20402040

@@ -2046,7 +2046,7 @@ SELECT pgv_remove('test', 'x');
20462046

20472047
(1 row)
20482048

2049-
SELECT pgv_insert('test', 'x', ROW (1::int), TRUE);
2049+
SELECT pgv_insert('test', 'x', ROW (3::int, 4::int), TRUE);
20502050
pgv_insert
20512051
------------
20522052

@@ -2059,7 +2059,7 @@ SELECT * FROM pgv_list() order by package, name;
20592059
(0 rows)
20602060

20612061
BEGIN;
2062-
SELECT pgv_insert('test', 'x', ROW (1::int), TRUE);
2062+
SELECT pgv_insert('test', 'x', ROW (1::int, 2::int), TRUE);
20632063
pgv_insert
20642064
------------
20652065

@@ -2071,7 +2071,7 @@ SELECT pgv_remove('test', 'x');
20712071

20722072
(1 row)
20732073

2074-
SELECT pgv_insert('test', 'x', ROW (1::int), TRUE);
2074+
SELECT pgv_insert('test', 'x', ROW (3::int, 4::int), TRUE);
20752075
pgv_insert
20762076
------------
20772077

@@ -2086,7 +2086,7 @@ SELECT * FROM pgv_list() order by package, name;
20862086

20872087
-- Variables should be insertable after pgv_free
20882088
BEGIN;
2089-
SELECT pgv_insert('test', 'y', ROW (1::int), TRUE);
2089+
SELECT pgv_insert('test', 'y', ROW (1::int, 2::int), TRUE);
20902090
pgv_insert
20912091
------------
20922092

@@ -2098,7 +2098,7 @@ SELECT pgv_free();
20982098

20992099
(1 row)
21002100

2101-
SELECT pgv_insert('test', 'y', ROW (1::int), TRUE);
2101+
SELECT pgv_insert('test', 'y', ROW (3::int, 4::int), TRUE);
21022102
pgv_insert
21032103
------------
21042104

@@ -2112,7 +2112,7 @@ SELECT * FROM pgv_list() order by package, name;
21122112
(1 row)
21132113

21142114
BEGIN;
2115-
SELECT pgv_insert('test', 'y', ROW (1::int), TRUE);
2115+
SELECT pgv_insert('test', 'y', ROW (1::int, 2::int), TRUE);
21162116
pgv_insert
21172117
------------
21182118

@@ -2124,7 +2124,7 @@ SELECT pgv_free();
21242124

21252125
(1 row)
21262126

2127-
SELECT pgv_insert('test', 'y', ROW (1::int), TRUE);
2127+
SELECT pgv_insert('test', 'y', ROW (3::int, 4::int), TRUE);
21282128
pgv_insert
21292129
------------
21302130

pg_variables.c

+9-10
Original file line numberDiff line numberDiff line change
@@ -56,7 +56,7 @@ static Variable *getVariableInternal(Package *package, text *name,
5656
static Variable *createVariableInternal(Package *package, text *name, Oid typid,
5757
bool is_record, bool is_transactional);
5858
static void removePackageInternal(Package *package);
59-
static void resetVariablesCache(bool with_package);
59+
static void resetVariablesCache(void);
6060

6161
/* Functions to work with transactional objects */
6262
static void createSavepoint(TransObject *object, TransObjectType type);
@@ -913,7 +913,7 @@ remove_variable(PG_FUNCTION_ARGS)
913913
else
914914
removeObject(&variable->transObject, TRANS_VARIABLE);
915915

916-
resetVariablesCache(true);
916+
resetVariablesCache();
917917

918918
PG_FREE_IF_COPY(package_name, 0);
919919
PG_FREE_IF_COPY(var_name, 1);
@@ -940,7 +940,7 @@ remove_package(PG_FUNCTION_ARGS)
940940
package = getPackage(package_name, true);
941941
removePackageInternal(package);
942942

943-
resetVariablesCache(true);
943+
resetVariablesCache();
944944

945945
PG_FREE_IF_COPY(package_name, 0);
946946
PG_RETURN_VOID();
@@ -955,7 +955,7 @@ removePackageInternal(Package *package)
955955
HASH_SEQ_STATUS vstat;
956956
int i;
957957

958-
/* Set all the variables from package is deleted */
958+
/* Mark all the valid variables from package as deleted */
959959
for (i = 0; i < 2; i++)
960960
{
961961
if ((htab = pack_htab(package, i)) != NULL)
@@ -1007,11 +1007,10 @@ isPackageEmpty(Package *package)
10071007
* of some changes: removing, rollbacking, etc.
10081008
*/
10091009
static void
1010-
resetVariablesCache(bool with_package)
1010+
resetVariablesCache(void)
10111011
{
10121012
/* Remove package and variable from cache */
1013-
if (with_package)
1014-
LastPackage = NULL;
1013+
LastPackage = NULL;
10151014
LastVariable = NULL;
10161015
LastTypeId = InvalidOid;
10171016
}
@@ -1037,7 +1036,7 @@ remove_packages(PG_FUNCTION_ARGS)
10371036
removePackageInternal(package);
10381037
}
10391038

1040-
resetVariablesCache(true);
1039+
resetVariablesCache();
10411040

10421041
PG_RETURN_VOID();
10431042
}
@@ -1753,7 +1752,7 @@ removeObject(TransObject *object, TransObjectType type)
17531752
GetActualState(&package->transObject)->is_valid = false;
17541753
}
17551754

1756-
resetVariablesCache(true);
1755+
resetVariablesCache();
17571756
}
17581757

17591758
/*
@@ -2121,7 +2120,7 @@ processChanges(Action action)
21212120
MemoryContextDelete(ModuleContext);
21222121
packagesHash = NULL;
21232122
ModuleContext = NULL;
2124-
resetVariablesCache(true);
2123+
resetVariablesCache();
21252124
changesStack = NULL;
21262125
changesStackContext = NULL;
21272126
}

sql/pg_variables_trans.sql

+8-8
Original file line numberDiff line numberDiff line change
@@ -537,34 +537,34 @@ SELECT pgv_free();
537537

538538
-- Variables should be insertable after pgv_remove
539539
BEGIN;
540-
SELECT pgv_insert('test', 'x', ROW (1::int), TRUE);
540+
SELECT pgv_insert('test', 'x', ROW (1::int, 2::int), TRUE);
541541
SELECT pgv_remove('test', 'x');
542-
SELECT pgv_insert('test', 'x', ROW (1::int), TRUE);
542+
SELECT pgv_insert('test', 'x', ROW (3::int, 4::int), TRUE);
543543
ROLLBACK;
544544

545545
SELECT * FROM pgv_list() order by package, name;
546546

547547
BEGIN;
548-
SELECT pgv_insert('test', 'x', ROW (1::int), TRUE);
548+
SELECT pgv_insert('test', 'x', ROW (1::int, 2::int), TRUE);
549549
SELECT pgv_remove('test', 'x');
550-
SELECT pgv_insert('test', 'x', ROW (1::int), TRUE);
550+
SELECT pgv_insert('test', 'x', ROW (3::int, 4::int), TRUE);
551551
COMMIT;
552552

553553
SELECT * FROM pgv_list() order by package, name;
554554

555555
-- Variables should be insertable after pgv_free
556556
BEGIN;
557-
SELECT pgv_insert('test', 'y', ROW (1::int), TRUE);
557+
SELECT pgv_insert('test', 'y', ROW (1::int, 2::int), TRUE);
558558
SELECT pgv_free();
559-
SELECT pgv_insert('test', 'y', ROW (1::int), TRUE);
559+
SELECT pgv_insert('test', 'y', ROW (3::int, 4::int), TRUE);
560560
ROLLBACK;
561561

562562
SELECT * FROM pgv_list() order by package, name;
563563

564564
BEGIN;
565-
SELECT pgv_insert('test', 'y', ROW (1::int), TRUE);
565+
SELECT pgv_insert('test', 'y', ROW (1::int, 2::int), TRUE);
566566
SELECT pgv_free();
567-
SELECT pgv_insert('test', 'y', ROW (1::int), TRUE);
567+
SELECT pgv_insert('test', 'y', ROW (3::int, 4::int), TRUE);
568568
COMMIT;
569569

570570
SELECT * FROM pgv_list() order by package, name;

0 commit comments

Comments
 (0)