Fix wrong error reports in 'number of array dimensions exceeds the
authorItagaki Takahiro <[email protected]>
Tue, 1 Feb 2011 06:21:32 +0000 (15:21 +0900)
committerItagaki Takahiro <[email protected]>
Tue, 1 Feb 2011 06:23:55 +0000 (15:23 +0900)
maximum allowed' messages, that have reported one-less dimensions.

Alexey Klyukin

src/backend/executor/execQual.c
src/backend/utils/adt/arrayfuncs.c
src/pl/plpgsql/src/pl_exec.c

index bfcce0fd71607aba980ae63472f8607638f1a633..e05d6bd79f003bfdfb79e781e1a7d59a417dbe14 100644 (file)
@@ -294,7 +294,7 @@ ExecEvalArrayRef(ArrayRefExprState *astate,
            ereport(ERROR,
                    (errcode(ERRCODE_PROGRAM_LIMIT_EXCEEDED),
                     errmsg("number of array dimensions (%d) exceeds the maximum allowed (%d)",
-                           i, MAXDIM)));
+                           i + 1, MAXDIM)));
 
        upper.indx[i++] = DatumGetInt32(ExecEvalExpr(eltstate,
                                                     econtext,
@@ -322,7 +322,7 @@ ExecEvalArrayRef(ArrayRefExprState *astate,
                ereport(ERROR,
                        (errcode(ERRCODE_PROGRAM_LIMIT_EXCEEDED),
                         errmsg("number of array dimensions (%d) exceeds the maximum allowed (%d)",
-                               i, MAXDIM)));
+                               j + 1, MAXDIM)));
 
            lower.indx[j++] = DatumGetInt32(ExecEvalExpr(eltstate,
                                                         econtext,
index d6ff2a15ec178fe1a2dafbd1f7521783710b8ec9..df7190dbfc88ba8bd5144d1f81f7423b71439a8b 100644 (file)
@@ -202,7 +202,7 @@ array_in(PG_FUNCTION_ARGS)
            ereport(ERROR,
                    (errcode(ERRCODE_PROGRAM_LIMIT_EXCEEDED),
                     errmsg("number of array dimensions (%d) exceeds the maximum allowed (%d)",
-                           ndim, MAXDIM)));
+                           ndim + 1, MAXDIM)));
 
        for (q = p; isdigit((unsigned char) *q) || (*q == '-') || (*q == '+'); q++);
        if (q == p)             /* no digits? */
@@ -481,7 +481,7 @@ ArrayCount(const char *str, int *dim, char typdelim)
                            ereport(ERROR,
                                    (errcode(ERRCODE_PROGRAM_LIMIT_EXCEEDED),
                                     errmsg("number of array dimensions (%d) exceeds the maximum allowed (%d)",
-                                           nest_level, MAXDIM)));
+                                           nest_level + 1, MAXDIM)));
                        temp[nest_level] = 0;
                        nest_level++;
                        if (ndim < nest_level)
index 16277ceaa0f94bab91b2df17b3448d84a98b7867..9d4f59ff6a24b43a372456d83059026d57153514 100644 (file)
@@ -3763,7 +3763,7 @@ exec_assign_value(PLpgSQL_execstate *estate,
                        ereport(ERROR,
                                (errcode(ERRCODE_PROGRAM_LIMIT_EXCEEDED),
                                 errmsg("number of array dimensions (%d) exceeds the maximum allowed (%d)",
-                                       nsubscripts, MAXDIM)));
+                                       nsubscripts + 1, MAXDIM)));
                    subscripts[nsubscripts++] = arrayelem->subscript;
                    target = estate->datums[arrayelem->arrayparentno];
                } while (target->dtype == PLPGSQL_DTYPE_ARRAYELEM);