aboutsummaryrefslogtreecommitdiff
path: root/src/backend
diff options
context:
space:
mode:
authorTom Lane <tgl@sss.pgh.pa.us>2021-01-25 13:03:11 -0500
committerTom Lane <tgl@sss.pgh.pa.us>2021-01-25 13:03:11 -0500
commita26194f22bf06733f8065d637f790ee4d4778321 (patch)
treef66c93a080679d6e7010c1e5a58e95a9c747bfd1 /src/backend
parent652f7818bf978b7230e4462535aef0c9d216b99f (diff)
downloadpostgresql-a26194f22bf06733f8065d637f790ee4d4778321.tar.gz
postgresql-a26194f22bf06733f8065d637f790ee4d4778321.zip
Fix broken ruleutils support for function TRANSFORM clauses.
I chanced to notice that this dumped core due to a faulty Assert. To add insult to injury, the output has been misformatted since v11. Obviously we need some regression testing here. Discussion: https://postgr.es/m/d1cc628c-3953-4209-957b-29427acc38c8@www.fastmail.com
Diffstat (limited to 'src/backend')
-rw-r--r--src/backend/utils/adt/ruleutils.c3
-rw-r--r--src/backend/utils/fmgr/funcapi.c5
2 files changed, 5 insertions, 3 deletions
diff --git a/src/backend/utils/adt/ruleutils.c b/src/backend/utils/adt/ruleutils.c
index 9db584169fc..55647251969 100644
--- a/src/backend/utils/adt/ruleutils.c
+++ b/src/backend/utils/adt/ruleutils.c
@@ -3127,13 +3127,14 @@ print_function_trftypes(StringInfo buf, HeapTuple proctup)
{
int i;
- appendStringInfoString(buf, "\n TRANSFORM ");
+ appendStringInfoString(buf, " TRANSFORM ");
for (i = 0; i < ntypes; i++)
{
if (i != 0)
appendStringInfoString(buf, ", ");
appendStringInfo(buf, "FOR TYPE %s", format_type_be(trftypes[i]));
}
+ appendStringInfoChar(buf, '\n');
}
}
diff --git a/src/backend/utils/fmgr/funcapi.c b/src/backend/utils/fmgr/funcapi.c
index 78ed8572038..f22eef88188 100644
--- a/src/backend/utils/fmgr/funcapi.c
+++ b/src/backend/utils/fmgr/funcapi.c
@@ -1182,7 +1182,9 @@ get_func_arg_info(HeapTuple procTup,
/*
* get_func_trftypes
*
- * Returns the number of transformed types used by function.
+ * Returns the number of transformed types used by the function.
+ * If there are any, a palloc'd array of the type OIDs is returned
+ * into *p_trftypes.
*/
int
get_func_trftypes(HeapTuple procTup,
@@ -1211,7 +1213,6 @@ get_func_trftypes(HeapTuple procTup,
ARR_HASNULL(arr) ||
ARR_ELEMTYPE(arr) != OIDOID)
elog(ERROR, "protrftypes is not a 1-D Oid array");
- Assert(nelems >= ((Form_pg_proc) GETSTRUCT(procTup))->pronargs);
*p_trftypes = (Oid *) palloc(nelems * sizeof(Oid));
memcpy(*p_trftypes, ARR_DATA_PTR(arr),
nelems * sizeof(Oid));