Re: Verbosity of Function Return Type Checks - Mailing list pgsql-hackers

From Volkan YAZICI
Subject Re: Verbosity of Function Return Type Checks
Date
Msg-id 87wsiq3457.fsf@alamut.mobiliz.com.tr
Whole thread Raw
In response to Re: Verbosity of Function Return Type Checks  (Alvaro Herrera <alvherre@commandprompt.com>)
List pgsql-hackers
On Fri, 8 Aug 2008, Alvaro Herrera <alvherre@commandprompt.com> writes:
> I think this is a good idea, but the new error messages need more work.
> Have a look at the message style guidelines please,
> http://www.postgresql.org/docs/8.3/static/error-style-guide.html

Right. Done -- I hope.

> Particularly I think you need to keep the original errmsg() and add the
> new messages as errdetail().  (I notice that there's the slight problem
> that the error messages are different for the different callers.)

Done.

> Also, please use context diffs.

Done.


Regards.

Index: src/pl/plpgsql/src/pl_exec.c
===================================================================
RCS file: /projects/cvsroot/pgsql/src/pl/plpgsql/src/pl_exec.c,v
retrieving revision 1.216
diff -r1.216 pl_exec.c
193c193
< static bool compatible_tupdesc(TupleDesc td1, TupleDesc td2);
---
> static void validate_tupdesc_compat(TupleDesc td1, TupleDesc td2);
389,393c389
<                     if (estate.rettupdesc == NULL ||
<                         !compatible_tupdesc(estate.rettupdesc, tupdesc))
<                         ereport(ERROR,
<                                 (errcode(ERRCODE_DATATYPE_MISMATCH),
<                                  errmsg("returned record type does not match expected record type")));
---
>                     validate_tupdesc_compat(tupdesc, estate.rettupdesc);
710,714c706,707
<         if (!compatible_tupdesc(estate.rettupdesc,
<                                 trigdata->tg_relation->rd_att))
<             ereport(ERROR,
<                     (errcode(ERRCODE_DATATYPE_MISMATCH),
<                      errmsg("returned tuple structure does not match table of trigger event")));
---
>         validate_tupdesc_compat(trigdata->tg_relation->rd_att,
>                                 estate.rettupdesc);
2204,2208c2197,2199
<                            errdetail("The tuple structure of a not-yet-assigned record is indeterminate.")));
<                     if (!compatible_tupdesc(tupdesc, rec->tupdesc))
<                         ereport(ERROR,
<                                 (errcode(ERRCODE_DATATYPE_MISMATCH),
<                         errmsg("wrong record type supplied in RETURN NEXT")));
---
>                            errdetail("The tuple structure of a not-yet-assigned"
>                                      " record is indeterminate.")));
>                     validate_tupdesc_compat(rec->tupdesc, tupdesc);
2314,2317c2305
<     if (!compatible_tupdesc(estate->rettupdesc, portal->tupDesc))
<         ereport(ERROR,
<                 (errcode(ERRCODE_DATATYPE_MISMATCH),
<           errmsg("structure of query does not match function result type")));
---
>     validate_tupdesc_compat(portal->tupDesc, estate->rettupdesc);
5141c5129,5130
<  * Check two tupledescs have matching number and types of attributes
---
>  * Validates compatibility of supplied TupleDesc couple by checking # and type
>  * of available arguments.
5143,5144c5132,5133
< static bool
< compatible_tupdesc(TupleDesc td1, TupleDesc td2)
---
> static void
> validate_tupdesc_compat(TupleDesc td1, TupleDesc td2)
5146c5135,5141
<     int            i;
---
>     int i;
>
>     if (!td1 || !td2)
>         ereport(ERROR,
>                 (errcode(ERRCODE_DATATYPE_MISMATCH),
>                  errmsg("returned record type does not match expected "
>                         "record type")));
5149c5144,5150
<         return false;
---
>         ereport(ERROR,
>                 (errcode(ERRCODE_DATATYPE_MISMATCH),
>                  errmsg("returned record type does not match expected "
>                         "record type"),
>                  errdetail("Number of returned columns (%d) does not match "
>                            "expected column count (%d).",
>                            td1->natts, td2->natts)));
5152d5152
<     {
5154,5157c5154,5164
<             return false;
<     }
<
<     return true;
---
>             ereport(ERROR,
>                     (errcode(ERRCODE_DATATYPE_MISMATCH),
>                      errmsg("returned record type does not match expected "
>                             "record type"),
>                      errdetail("Returned record type (%s) does not match "
>                                "expected record type (%s) in column %d (%s).",
>                                format_type_with_typemod(td1->attrs[i]->atttypid,
>                                                         td1->attrs[i]->atttypmod),
>                                format_type_with_typemod(td2->attrs[i]->atttypid,
>                                                         td2->attrs[i]->atttypmod),
>                                (1+i), NameStr(td2->attrs[i]->attname))));

pgsql-hackers by date:

Previous
From: daveg
Date:
Subject: Re: Visibility Groups
Next
From: Volkan YAZICI
Date:
Subject: Re: Verbosity of Function Return Type Checks