Re: Cleaning up array_in() - Mailing list pgsql-hackers
From | Tom Lane |
---|---|
Subject | Re: Cleaning up array_in() |
Date | |
Msg-id | 2162169.1699899810@sss.pgh.pa.us Whole thread Raw |
In response to | Re: Cleaning up array_in() (Tom Lane <tgl@sss.pgh.pa.us>) |
List | pgsql-hackers |
I wrote: > Heikki Linnakangas <hlinnaka@iki.fi> writes: >> 2. This was the same before this patch, but: >> postgres=# select '{{{{{{{{{{1}}}}}}}}}}'::int[]; >> ERROR: number of array dimensions (7) exceeds the maximum allowed (6) >> LINE 1: select '{{{{{{{{{{1}}}}}}}}}}'::int[]; >> ^ >> The error message isn't great, as the literal contains 10 dimensions, >> not 7 as the error message claims. > Yeah. To make that report accurate, we'd have to somehow postpone > issuing the error until we've seen all the left braces (or at least > all the initial ones). There's a related problem in reading an > explicitly-dimensioned array: > postgres=# select '[1][2][3][4][5][6][7][8][9]={}'::text[]; > ERROR: number of array dimensions (7) exceeds the maximum allowed (6) > I kind of think it's not worth the trouble. What was discussed > upthread was revising the message to not claim it knows how many > dimensions there are. I pushed the main patch. Here's a proposed delta to deal with the bogus-dimensionality-count issue. There are a few more places where I left things alone because the code does know what the intended dimensionality will be; so there are still two versions of the translatable error message. regards, tom lane 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)++;
pgsql-hackers by date: