From 8d5573b92e66075c20f327d93d46a24095739a58 Mon Sep 17 00:00:00 2001 From: Tom Lane Date: Fri, 17 Nov 2023 11:29:42 -0500 Subject: [PATCH] Don't specify number of dimensions in cases where we don't know it. A few places in array_in() and plperl would report a misleading value (always MAXDIM+1) for the number of dimensions in the input, because we'd error out as soon as that was clearly too large rather than scanning the entire input. There doesn't seem to be much value in offering the true number, at least not enough to justify the extra complication involved in trying to get it. So just remove that parenthetical remark. We already have other places that do it like that, anyway. Per suggestions from Alexander Lakhin and Heikki Linnakangas. Discussion: https://postgr.es/m/2794005.1683042087@sss.pgh.pa.us --- src/backend/utils/adt/arrayfuncs.c | 8 ++++---- src/pl/plperl/expected/plperl_array.out | 2 +- src/pl/plperl/plperl.c | 4 ++-- 3 files changed, 7 insertions(+), 7 deletions(-) diff --git a/src/backend/utils/adt/arrayfuncs.c b/src/backend/utils/adt/arrayfuncs.c index d71967de01..631012a0f2 100644 --- a/src/backend/utils/adt/arrayfuncs.c +++ b/src/backend/utils/adt/arrayfuncs.c @@ -429,8 +429,8 @@ ReadArrayDimensions(char **srcptr, int *ndim_p, int *dim, int *lBound, if (ndim >= MAXDIM) ereturn(escontext, false, (errcode(ERRCODE_PROGRAM_LIMIT_EXCEEDED), - errmsg("number of array dimensions (%d) exceeds the maximum allowed (%d)", - ndim + 1, MAXDIM))); + errmsg("number of array dimensions exceeds the maximum allowed (%d)", + MAXDIM))); q = p; if (!ReadDimensionInt(&p, &i, origStr, escontext)) @@ -641,8 +641,8 @@ ReadArrayStr(char **srcptr, if (nest_level >= MAXDIM) ereturn(escontext, false, (errcode(ERRCODE_PROGRAM_LIMIT_EXCEEDED), - errmsg("number of array dimensions (%d) exceeds the maximum allowed (%d)", - nest_level + 1, MAXDIM))); + errmsg("number of array dimensions exceeds the maximum allowed (%d)", + MAXDIM))); nelems[nest_level] = 0; nest_level++; diff --git a/src/pl/plperl/expected/plperl_array.out b/src/pl/plperl/expected/plperl_array.out index bd04a062fb..260a55ea7e 100644 --- a/src/pl/plperl/expected/plperl_array.out +++ b/src/pl/plperl/expected/plperl_array.out @@ -61,7 +61,7 @@ select plperl_sum_array('{{{{{{{1,2},{3,4}},{{5,6},{7,8}}},{{{9,10},{11,12}}, {{{{{1,2},{3,4}},{{5,6},{7,8}}},{{{9,10},{11,12}},{{13,14},{15,16}}}}, {{{{17,18},{19,20}},{{21,22},{23,24}}},{{{25,26},{27,28}},{{29,30},{31,32}}}}}}}' ); -ERROR: number of array dimensions (7) exceeds the maximum allowed (6) +ERROR: number of array dimensions exceeds the maximum allowed (6) LINE 1: select plperl_sum_array('{{{{{{{1,2},{3,4}},{{5,6},{7,8}}},{... ^ select plperl_sum_array('{{{1,2,3}, {4,5,6,7}}, {{7,8,9}, {10, 11, 12}}}'); diff --git a/src/pl/plperl/plperl.c b/src/pl/plperl/plperl.c index 863864253f..d68ad7be34 100644 --- a/src/pl/plperl/plperl.c +++ b/src/pl/plperl/plperl.c @@ -1201,8 +1201,8 @@ array_to_datum_internal(AV *av, ArrayBuildState **astatep, if (cur_depth + 1 > MAXDIM) ereport(ERROR, (errcode(ERRCODE_PROGRAM_LIMIT_EXCEEDED), - errmsg("number of array dimensions (%d) exceeds the maximum allowed (%d)", - cur_depth + 1, MAXDIM))); + errmsg("number of array dimensions exceeds the maximum allowed (%d)", + MAXDIM))); /* OK, add a dimension */ dims[*ndims] = av_len(nav) + 1; (*ndims)++;