Skip to content

Commit e1d6ad7

Browse files
committed
remove special cases for variable_{get,set}_any
1 parent 6e33742 commit e1d6ad7

File tree

2 files changed

+20
-66
lines changed

2 files changed

+20
-66
lines changed

.gitignore

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -21,6 +21,7 @@ objfiles.txt
2121
*.gcov.out
2222
lcov.info
2323
coverage/
24+
results/
2425
*.vcproj
2526
*.vcxproj
2627
win32ver.rc

pg_variables.c

Lines changed: 19 additions & 66 deletions
Original file line numberDiff line numberDiff line change
@@ -26,10 +26,6 @@
2626

2727
PG_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 */
3430
PG_FUNCTION_INFO_V1(variable_insert);
3531
PG_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) \
189185
PG_FUNCTION_INFO_V1(variable_get_##type); \
190186
Datum \
191187
variable_get_##type(PG_FUNCTION_ARGS) \
@@ -198,30 +194,33 @@ variable_get(text *package_name, text *var_name,
198194
\
199195
CHECK_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
\
205201
value = 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
\
211207
if (!isnull) \
212208
PG_RETURN_DATUM(value); \
213209
else \
214210
PG_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 */
252252
VARIABLE_SET_TEMPLATE(int, INT4OID)
253253
VARIABLE_SET_TEMPLATE(text, TEXTOID)
254254
VARIABLE_SET_TEMPLATE(numeric, NUMERICOID)
@@ -257,55 +257,8 @@ VARIABLE_SET_TEMPLATE(timestamptz, TIMESTAMPTZOID)
257257
VARIABLE_SET_TEMPLATE(date, DATEOID)
258258
VARIABLE_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

311264
Datum

0 commit comments

Comments
 (0)