@@ -237,6 +237,7 @@ VARIABLE_GET_TEMPLATE(0, 1, 2, jsonb, JSONBOID)
237
237
238
238
/* current API */
239
239
VARIABLE_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 ))
240
241
241
242
242
243
#define VARIABLE_SET_TEMPLATE (type , typid ) \
@@ -275,6 +276,7 @@ VARIABLE_SET_TEMPLATE(jsonb, JSONBOID)
275
276
276
277
/* current API */
277
278
VARIABLE_SET_TEMPLATE (any , get_fn_expr_argtype (fcinfo -> flinfo , 2 ))
279
+ VARIABLE_SET_TEMPLATE (array , get_fn_expr_argtype (fcinfo -> flinfo , 2 ))
278
280
279
281
280
282
Datum
@@ -916,7 +918,11 @@ removePackageInternal(Package *package)
916
918
TransObject * transObject ;
917
919
918
920
/* All regular variables will be freed */
919
- MemoryContextDelete (package -> hctxRegular );
921
+ if (package -> hctxRegular )
922
+ {
923
+ MemoryContextDelete (package -> hctxRegular );
924
+ package -> hctxRegular = NULL ;
925
+ }
920
926
921
927
/* Add to changes list */
922
928
transObject = & package -> transObject ;
@@ -1247,32 +1253,25 @@ ensurePackagesHashExists(void)
1247
1253
static void
1248
1254
makePackHTAB (Package * package , bool is_trans )
1249
1255
{
1250
- HASHCTL ctl ;
1251
- char hash_name [BUFSIZ ];
1256
+ HASHCTL ctl ;
1257
+ char hash_name [BUFSIZ ];
1258
+ HTAB * * htab ;
1259
+ MemoryContext * context ;
1252
1260
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 );
1261
1266
1262
1267
snprintf (hash_name , BUFSIZ , "%s variables hash for package \"%s\"" ,
1263
1268
is_trans ? "Transactional" : "Regular" , GetName (package ));
1264
1269
ctl .keysize = NAMEDATALEN ;
1265
1270
ctl .entrysize = sizeof (Variable );
1266
- ctl .hcxt = ( is_trans ? package -> hctxTransact : package -> hctxRegular ) ;
1271
+ ctl .hcxt = * context ;
1267
1272
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 );
1276
1275
}
1277
1276
1278
1277
static Package *
@@ -1632,6 +1631,9 @@ removeObject(TransObject *object, TransObjectType type)
1632
1631
1633
1632
/* Remove object from hash table */
1634
1633
hash_search (hash , object -> name , HASH_REMOVE , & found );
1634
+
1635
+ LastPackage = NULL ;
1636
+ LastVariable = NULL ;
1635
1637
}
1636
1638
1637
1639
/*
0 commit comments