@@ -237,6 +237,7 @@ VARIABLE_GET_TEMPLATE(0, 1, 2, jsonb, JSONBOID)
237237
238238/* current API */
239239VARIABLE_GET_TEMPLATE (0 , 1 , 3 , any , get_fn_expr_argtype (fcinfo -> flinfo , 2 ))
240+ VARIABLE_GET_TEMPLATE (0 , 1 , 3 , array , get_fn_expr_argtype (fcinfo -> flinfo , 2 ))
240241
241242
242243#define VARIABLE_SET_TEMPLATE (type , typid ) \
@@ -275,6 +276,7 @@ VARIABLE_SET_TEMPLATE(jsonb, JSONBOID)
275276
276277/* current API */
277278VARIABLE_SET_TEMPLATE (any , get_fn_expr_argtype (fcinfo -> flinfo , 2 ))
279+ VARIABLE_SET_TEMPLATE (array , get_fn_expr_argtype (fcinfo -> flinfo , 2 ))
278280
279281
280282Datum
@@ -916,7 +918,11 @@ removePackageInternal(Package *package)
916918 TransObject * transObject ;
917919
918920 /* All regular variables will be freed */
919- MemoryContextDelete (package -> hctxRegular );
921+ if (package -> hctxRegular )
922+ {
923+ MemoryContextDelete (package -> hctxRegular );
924+ package -> hctxRegular = NULL ;
925+ }
920926
921927 /* Add to changes list */
922928 transObject = & package -> transObject ;
@@ -1247,32 +1253,25 @@ ensurePackagesHashExists(void)
12471253static void
12481254makePackHTAB (Package * package , bool is_trans )
12491255{
1250- HASHCTL ctl ;
1251- char hash_name [BUFSIZ ];
1256+ HASHCTL ctl ;
1257+ char hash_name [BUFSIZ ];
1258+ HTAB * * htab ;
1259+ MemoryContext * context ;
12521260
1253- if (is_trans )
1254- package -> hctxTransact = AllocSetContextCreate (ModuleContext ,
1255- PGV_MCXT_VARS ,
1256- ALLOCSET_DEFAULT_SIZES );
1257- else
1258- package -> hctxRegular = AllocSetContextCreate (ModuleContext ,
1259- PGV_MCXT_VARS ,
1260- ALLOCSET_DEFAULT_SIZES );
1261+ htab = is_trans ? & package -> varHashTransact : & package -> varHashRegular ;
1262+ context = is_trans ? & package -> hctxTransact : & package -> hctxRegular ;
1263+
1264+ * context = AllocSetContextCreate (ModuleContext , PGV_MCXT_VARS ,
1265+ ALLOCSET_DEFAULT_SIZES );
12611266
12621267 snprintf (hash_name , BUFSIZ , "%s variables hash for package \"%s\"" ,
12631268 is_trans ? "Transactional" : "Regular" , GetName (package ));
12641269 ctl .keysize = NAMEDATALEN ;
12651270 ctl .entrysize = sizeof (Variable );
1266- ctl .hcxt = ( is_trans ? package -> hctxTransact : package -> hctxRegular ) ;
1271+ ctl .hcxt = * context ;
12671272
1268- if (is_trans )
1269- package -> varHashTransact = hash_create (hash_name ,
1270- NUMVARIABLES , & ctl ,
1271- HASH_ELEM | HASH_CONTEXT );
1272- else
1273- package -> varHashRegular = hash_create (hash_name ,
1274- NUMVARIABLES , & ctl ,
1275- HASH_ELEM | HASH_CONTEXT );
1273+ * htab = hash_create (hash_name , NUMVARIABLES , & ctl ,
1274+ HASH_ELEM | HASH_CONTEXT );
12761275}
12771276
12781277static Package *
@@ -1632,6 +1631,9 @@ removeObject(TransObject *object, TransObjectType type)
16321631
16331632 /* Remove object from hash table */
16341633 hash_search (hash , object -> name , HASH_REMOVE , & found );
1634+
1635+ LastPackage = NULL ;
1636+ LastVariable = NULL ;
16351637}
16361638
16371639/*
0 commit comments