Re: array_in sub function ReadArrayDimensions error message
От | jian he |
---|---|
Тема | Re: array_in sub function ReadArrayDimensions error message |
Дата | |
Msg-id | CACJufxGBWyjNRhJNzprPK19GnjSzT8LHtTBZ43+7Q7Nz8q0-DA@mail.gmail.com обсуждение исходный текст |
Ответ на | Re: array_in sub function ReadArrayDimensions error message (Tom Lane <tgl@sss.pgh.pa.us>) |
Ответы |
Re: array_in sub function ReadArrayDimensions error message
|
Список | pgsql-hackers |
On Mon, Jul 8, 2024 at 10:42 PM Tom Lane <tgl@sss.pgh.pa.us> wrote: > > jian he <jian.universality@gmail.com> writes: > > while reviewing the json query doc, > > I found out the following error message was not quite right. > > > select '[1,2]'::int[]; > > ERROR: malformed array literal: "[1,2]" > > LINE 1: select '[1,2]'::int[]; > > ^ > > DETAIL: Missing "]" after array dimensions. > > > should it be: > > "Missing delimiter ":" while specifying array dimensions." > > That's presuming quite a lot about the nature of the error. > All the code knows is that what follows the "1" should be > either ":" or "]", and when it sees "," instead it throws > this error. I agree the existing message isn't great, but > trying to be more specific could confuse people even more > if the more-specific message doesn't apply either. > > One possibility could be > > if (*p != ']') > ereturn(escontext, false, > (errcode(ERRCODE_INVALID_TEXT_REPRESENTATION), > errmsg("malformed array literal: \"%s\"", origStr), > + (strchr(p, ']') != NULL) ? > + errdetail("Array dimensions have invalid syntax.") : > errdetail("Missing \"%s\" after array dimensions.", > "]"))); > > that is, only say "Missing "]"" if there's no ']' anywhere, and > otherwise just say the dimensions are wrong. This could be fooled > by a ']' that's part of some string in the data, but even then the > errdetail isn't wrong. > > Or we could just say "Array dimensions have invalid syntax." > unconditionally. > > regards, tom lane we can if (*p == ':') { .... if (*p != ']') ereturn(escontext, false, (errcode(ERRCODE_INVALID_TEXT_REPRESENTATION), errmsg("malformed array literal: \"%s\"", origStr), errdetail("Missing \"%s\" after array dimensions.", "]"))); } else { if (*p != ']') ereturn(escontext, false, (errcode(ERRCODE_INVALID_TEXT_REPRESENTATION), errmsg("malformed array literal: \"%s\"", origStr), errdetail("Missing delimiter \"%s\" while specifying array dimensions.", ":"))); } different error message in IF ELSE blocks. please check attached.
Вложения
В списке pgsql-hackers по дате отправления: