From: | Tom Lane <tgl(at)sss(dot)pgh(dot)pa(dot)us> |
---|---|
To: | jian he <jian(dot)universality(at)gmail(dot)com> |
Cc: | PostgreSQL Hackers <pgsql-hackers(at)lists(dot)postgresql(dot)org> |
Subject: | Re: array_in sub function ReadArrayDimensions error message |
Date: | 2024-07-08 14:42:20 |
Message-ID: | 974615.1720449740@sss.pgh.pa.us |
Views: | Raw Message | Whole Thread | Download mbox | Resend email |
Thread: | |
Lists: | pgsql-hackers |
jian he <jian(dot)universality(at)gmail(dot)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
From | Date | Subject | |
---|---|---|---|
Next Message | Tomas Vondra | 2024-07-08 15:14:38 | Re: 回复: An implementation of multi-key sort |
Previous Message | Tomas Vondra | 2024-07-08 14:40:30 | Re: 回复: An implementation of multi-key sort |