v2-0008-Change-stats_fill_fcinfo_from_arg_pairs-to-Nullab.patch
application/octet-stream
Filename: v2-0008-Change-stats_fill_fcinfo_from_arg_pairs-to-Nullab.patch
Type: application/octet-stream
Part: 6
Patch
Format: format-patch
Series: patch v2-0008
Subject: Change stats_fill_fcinfo_from_arg_pairs to NullableDatum array.
| File | + | − |
|---|---|---|
| src/backend/statistics/attribute_stats.c | 4 | 7 |
| src/backend/statistics/extended_stats_funcs.c | 3 | 6 |
| src/backend/statistics/relation_stats.c | 4 | 8 |
| src/backend/statistics/stat_utils.c | 12 | 12 |
| src/include/statistics/stat_utils.h | 3 | 3 |
From 3e507a2ff2675732126a669e370328d5a0d1296e Mon Sep 17 00:00:00 2001
From: Corey Huinker <corey.huinker@gmail.com>
Date: Sun, 28 Jun 2026 17:21:51 -0500
Subject: [PATCH v2 08/13] Change stats_fill_fcinfo_from_arg_pairs to
NullableDatum array.
Change stats_fill_fcinfo_from_arg_pairs to NullableDatum array, and in
doing so rename to stats_fill_args_from_arg_pairs. Change all callers to
instead initialize an NullableDatum array of the proper size instead of
a full FunctionCallInfoData structure.
---
src/backend/statistics/attribute_stats.c | 11 ++++-----
src/backend/statistics/extended_stats_funcs.c | 9 +++----
src/backend/statistics/relation_stats.c | 12 ++++------
src/backend/statistics/stat_utils.c | 24 +++++++++----------
src/include/statistics/stat_utils.h | 6 ++---
5 files changed, 26 insertions(+), 36 deletions(-)
diff --git a/src/backend/statistics/attribute_stats.c b/src/backend/statistics/attribute_stats.c
index a847d053ee4..260e5bb1d48 100644
--- a/src/backend/statistics/attribute_stats.c
+++ b/src/backend/statistics/attribute_stats.c
@@ -673,17 +673,14 @@ pg_clear_attribute_stats(PG_FUNCTION_ARGS)
Datum
pg_restore_attribute_stats(PG_FUNCTION_ARGS)
{
- LOCAL_FCINFO(positional_fcinfo, ATTARG_NUM_ATTARGS);
+ NullableDatum positional_args[ATTARG_NUM_ATTARGS];
bool result = true;
- InitFunctionCallInfoData(*positional_fcinfo, NULL, ATTARG_NUM_ATTARGS,
- InvalidOid, NULL, NULL);
-
- if (!stats_fill_fcinfo_from_arg_pairs(fcinfo, positional_fcinfo,
- attarginfo))
+ if (!stats_fill_args_from_arg_pairs(fcinfo, positional_args,
+ attarginfo))
result = false;
- if (!attribute_statistics_update(positional_fcinfo->args))
+ if (!attribute_statistics_update(positional_args))
result = false;
PG_RETURN_BOOL(result);
diff --git a/src/backend/statistics/extended_stats_funcs.c b/src/backend/statistics/extended_stats_funcs.c
index 5e46a7e9678..c807c10dbfe 100644
--- a/src/backend/statistics/extended_stats_funcs.c
+++ b/src/backend/statistics/extended_stats_funcs.c
@@ -1735,16 +1735,13 @@ delete_pg_statistic_ext_data(Oid stxoid, bool inherited)
Datum
pg_restore_extended_stats(PG_FUNCTION_ARGS)
{
- LOCAL_FCINFO(positional_fcinfo, EXTARG_NUM_EXTARGS);
+ NullableDatum positional_args[EXTARG_NUM_EXTARGS];
bool result = true;
- InitFunctionCallInfoData(*positional_fcinfo, NULL, EXTARG_NUM_EXTARGS,
- InvalidOid, NULL, NULL);
-
- if (!stats_fill_fcinfo_from_arg_pairs(fcinfo, positional_fcinfo, extarginfo))
+ if (!stats_fill_args_from_arg_pairs(fcinfo, positional_args, extarginfo))
result = false;
- if (!extended_statistics_update(positional_fcinfo->args))
+ if (!extended_statistics_update(positional_args))
result = false;
PG_RETURN_BOOL(result);
diff --git a/src/backend/statistics/relation_stats.c b/src/backend/statistics/relation_stats.c
index 1ee23612ae1..213f924a44e 100644
--- a/src/backend/statistics/relation_stats.c
+++ b/src/backend/statistics/relation_stats.c
@@ -225,18 +225,14 @@ pg_clear_relation_stats(PG_FUNCTION_ARGS)
Datum
pg_restore_relation_stats(PG_FUNCTION_ARGS)
{
- LOCAL_FCINFO(positional_fcinfo, RELARG_NUM_RELARGS);
+ NullableDatum positional_args[RELARG_NUM_RELARGS];
bool result = true;
- InitFunctionCallInfoData(*positional_fcinfo, NULL,
- RELARG_NUM_RELARGS,
- InvalidOid, NULL, NULL);
-
- if (!stats_fill_fcinfo_from_arg_pairs(fcinfo, positional_fcinfo,
- relarginfo))
+ if (!stats_fill_args_from_arg_pairs(fcinfo, positional_args,
+ relarginfo))
result = false;
- if (!relation_statistics_update(positional_fcinfo->args))
+ if (!relation_statistics_update(positional_args))
result = false;
PG_RETURN_BOOL(result);
diff --git a/src/backend/statistics/stat_utils.c b/src/backend/statistics/stat_utils.c
index 24b3849fb8b..22f88d2830f 100644
--- a/src/backend/statistics/stat_utils.c
+++ b/src/backend/statistics/stat_utils.c
@@ -339,17 +339,17 @@ statatt_get_index_expr(Relation rel, int attnum)
/*
* Translate variadic argument pairs from 'pairs_fcinfo' into a
- * 'positional_fcinfo' appropriate for calling relation_statistics_update() or
- * attribute_statistics_update() with positional arguments.
+ * NullableDatum[] appropriate for calling the internal statistics update
+ * functions for relation stats, attribute stats, or extended stats.
*
- * Caller should have already initialized positional_fcinfo with a size
- * appropriate for calling the intended positional function, and arginfo
- * should also match the intended positional function.
+ * Caller should have already initialized args with a size appropriate for
+ * calling the intended function, and arginfo should also match the intended
+ * function.
*/
bool
-stats_fill_fcinfo_from_arg_pairs(FunctionCallInfo pairs_fcinfo,
- FunctionCallInfo positional_fcinfo,
- struct StatsArgInfo *arginfo)
+stats_fill_args_from_arg_pairs(FunctionCallInfo pairs_fcinfo,
+ NullableDatum *positional_args,
+ struct StatsArgInfo *arginfo)
{
Datum *args;
bool *argnulls;
@@ -360,8 +360,8 @@ stats_fill_fcinfo_from_arg_pairs(FunctionCallInfo pairs_fcinfo,
/* clear positional args */
for (int i = 0; arginfo[i].argname != NULL; i++)
{
- positional_fcinfo->args[i].value = (Datum) 0;
- positional_fcinfo->args[i].isnull = true;
+ positional_args[i].value = (Datum) 0;
+ positional_args[i].isnull = true;
}
nargs = extract_variadic_args(pairs_fcinfo, 0, true,
@@ -416,8 +416,8 @@ stats_fill_fcinfo_from_arg_pairs(FunctionCallInfo pairs_fcinfo,
continue;
}
- positional_fcinfo->args[argnum].value = args[i + 1];
- positional_fcinfo->args[argnum].isnull = false;
+ positional_args[argnum].value = args[i + 1];
+ positional_args[argnum].isnull = false;
}
return result;
diff --git a/src/include/statistics/stat_utils.h b/src/include/statistics/stat_utils.h
index 414636c1cd2..811db3a79ed 100644
--- a/src/include/statistics/stat_utils.h
+++ b/src/include/statistics/stat_utils.h
@@ -38,9 +38,9 @@ extern bool stats_check_arg_pair(const NullableDatum *args,
extern void RangeVarCallbackForStats(const RangeVar *relation,
Oid relId, Oid oldRelId, void *arg);
-extern bool stats_fill_fcinfo_from_arg_pairs(FunctionCallInfo pairs_fcinfo,
- FunctionCallInfo positional_fcinfo,
- struct StatsArgInfo *arginfo);
+extern bool stats_fill_args_from_arg_pairs(FunctionCallInfo pairs_fcinfo,
+ NullableDatum *positional_args,
+ struct StatsArgInfo *arginfo);
extern void statatt_get_type(Oid reloid, AttrNumber attnum,
Oid *atttypid, int32 *atttypmod,
--
2.50.1 (Apple Git-155)