2626
2727PG_MODULE_MAGIC ;
2828
29- /* Scalar variables functions */
30- PG_FUNCTION_INFO_V1 (variable_set_any );
31- PG_FUNCTION_INFO_V1 (variable_get_any );
32-
3329/* Functions to work with records */
3430PG_FUNCTION_INFO_V1 (variable_insert );
3531PG_FUNCTION_INFO_V1 (variable_update );
@@ -185,7 +181,7 @@ variable_get(text *package_name, text *var_name,
185181}
186182
187183
188- #define VARIABLE_GET_TEMPLATE (type ,typid ) \
184+ #define VARIABLE_GET_TEMPLATE (pkg_arg , var_arg , strict_arg , type ,typid ) \
189185PG_FUNCTION_INFO_V1(variable_get_##type); \
190186Datum \
191187variable_get_##type(PG_FUNCTION_ARGS) \
@@ -198,30 +194,33 @@ variable_get(text *package_name, text *var_name,
198194\
199195CHECK_ARGS_FOR_NULL(); \
200196\
201- package_name = PG_GETARG_TEXT_PP(0 ); \
202- var_name = PG_GETARG_TEXT_PP(1 ); \
203- strict = PG_GETARG_BOOL(2 ); \
197+ package_name = PG_GETARG_TEXT_PP(pkg_arg ); \
198+ var_name = PG_GETARG_TEXT_PP(var_arg ); \
199+ strict = PG_GETARG_BOOL(strict_arg ); \
204200\
205201value = variable_get(package_name, var_name, \
206202 (typid), &isnull, strict); \
207203\
208- PG_FREE_IF_COPY(package_name,0 ); \
209- PG_FREE_IF_COPY(var_name,1 ); \
204+ PG_FREE_IF_COPY(package_name,pkg_arg ); \
205+ PG_FREE_IF_COPY(var_name,var_arg ); \
210206\
211207if (!isnull) \
212208PG_RETURN_DATUM(value); \
213209else \
214210PG_RETURN_NULL(); \
215211}
216212
213+ /* deprecated functions */
214+ VARIABLE_GET_TEMPLATE (0 ,1 ,2 ,int ,INT4OID )
215+ VARIABLE_GET_TEMPLATE (0 ,1 ,2 ,text ,TEXTOID )
216+ VARIABLE_GET_TEMPLATE (0 ,1 ,2 ,numeric ,NUMERICOID )
217+ VARIABLE_GET_TEMPLATE (0 ,1 ,2 ,timestamp ,TIMESTAMPOID )
218+ VARIABLE_GET_TEMPLATE (0 ,1 ,2 ,timestamptz ,TIMESTAMPTZOID )
219+ VARIABLE_GET_TEMPLATE (0 ,1 ,2 ,date ,DATEOID )
220+ VARIABLE_GET_TEMPLATE (0 ,1 ,2 ,jsonb ,JSONBOID )
217221
218- VARIABLE_GET_TEMPLATE (int ,INT4OID )
219- VARIABLE_GET_TEMPLATE (text ,TEXTOID )
220- VARIABLE_GET_TEMPLATE (numeric ,NUMERICOID )
221- VARIABLE_GET_TEMPLATE (timestamp ,TIMESTAMPOID )
222- VARIABLE_GET_TEMPLATE (timestamptz ,TIMESTAMPTZOID )
223- VARIABLE_GET_TEMPLATE (date ,DATEOID )
224- VARIABLE_GET_TEMPLATE (jsonb ,JSONBOID )
222+ /* current API */
223+ VARIABLE_GET_TEMPLATE (0 ,1 ,3 ,any ,get_fn_expr_argtype (fcinfo -> flinfo ,2 ))
225224
226225
227226#define VARIABLE_SET_TEMPLATE (type ,typid ) \
@@ -249,6 +248,7 @@ VARIABLE_GET_TEMPLATE(jsonb, JSONBOID)
249248}
250249
251250
251+ /* deprecated functions */
252252VARIABLE_SET_TEMPLATE (int ,INT4OID )
253253VARIABLE_SET_TEMPLATE (text ,TEXTOID )
254254VARIABLE_SET_TEMPLATE (numeric ,NUMERICOID )
@@ -257,55 +257,8 @@ VARIABLE_SET_TEMPLATE(timestamptz, TIMESTAMPTZOID)
257257VARIABLE_SET_TEMPLATE (date ,DATEOID )
258258VARIABLE_SET_TEMPLATE (jsonb ,JSONBOID )
259259
260-
261- Datum
262- variable_set_any (PG_FUNCTION_ARGS )
263- {
264- text * package_name ;
265- text * var_name ;
266- bool is_transactional ;
267-
268- CHECK_ARGS_FOR_NULL ();
269-
270- package_name = PG_GETARG_TEXT_PP (0 );
271- var_name = PG_GETARG_TEXT_PP (1 );
272- is_transactional = PG_GETARG_BOOL (3 );
273-
274- variable_set (package_name ,var_name ,get_fn_expr_argtype (fcinfo -> flinfo ,2 ),
275- PG_ARGISNULL (2 ) ?0 :PG_GETARG_DATUM (2 ),
276- PG_ARGISNULL (2 ),is_transactional );
277-
278- PG_FREE_IF_COPY (package_name ,0 );
279- PG_FREE_IF_COPY (var_name ,1 );
280- PG_RETURN_VOID ();
281- }
282-
283- Datum
284- variable_get_any (PG_FUNCTION_ARGS )
285- {
286- text * package_name ;
287- text * var_name ;
288- bool strict ;
289- bool is_null ;
290- Datum value ;
291-
292- CHECK_ARGS_FOR_NULL ();
293-
294- package_name = PG_GETARG_TEXT_PP (0 );
295- var_name = PG_GETARG_TEXT_PP (1 );
296- strict = PG_GETARG_BOOL (3 );
297-
298- value = variable_get (package_name ,var_name ,
299- get_fn_expr_argtype (fcinfo -> flinfo ,2 ),
300- & is_null ,strict );
301-
302- PG_FREE_IF_COPY (package_name ,0 );
303- PG_FREE_IF_COPY (var_name ,1 );
304- if (!is_null )
305- PG_RETURN_DATUM (value );
306- else
307- PG_RETURN_NULL ();
308- }
260+ /* current API */
261+ VARIABLE_SET_TEMPLATE (any ,get_fn_expr_argtype (fcinfo -> flinfo ,2 ))
309262
310263
311264Datum