Patch applied.  Thanks.

---------------------------------------------------------------------------


Mark Kirkwood wrote:
> Alvaro Herrera wrote:
> > On Thu, Jul 07, 2005 at 03:01:46PM +1200, Mark Kirkwood wrote:
> > 
> >>Neil Conway wrote:
> > 
> > 
> >>>elog(ERROR) is usually used for "can't happen" errors.
> >>
> >>I have attached a little change to varlena.c that uses it. I left the
> >>ereport as it was, but am not fussed about it either way.
> > 
> > 
> > I am, because it gives useless messages to the translators to work on.
> > elog parameters are not marked for translation, ereport are (errmsg and
> > friends, really).  So please don't do that.
> > 
> 
> Ok, didn't realize the difference! Revised patch attached that uses elog.
> 
> Neil, I will runs some tests to see if there is any performance saving 
> with the first-call-only business.
> 
> Cheers
> 
> Mark
> 

> Index: src/backend/utils/adt/varlena.c
> ===================================================================
> RCS file: /projects/cvsroot/pgsql/src/backend/utils/adt/varlena.c,v
> retrieving revision 1.125
> diff -c -r1.125 varlena.c
> *** src/backend/utils/adt/varlena.c   6 Jul 2005 19:02:52 -0000       1.125
> --- src/backend/utils/adt/varlena.c   7 Jul 2005 03:40:44 -0000
> ***************
> *** 28,34 ****
>   #include "utils/builtins.h"
>   #include "utils/lsyscache.h"
>   #include "utils/pg_locale.h"
> - #include "utils/syscache.h"
>   
>   
>   typedef struct varlena unknown;
> --- 28,33 ----
> ***************
> *** 2364,2385 ****
>       {
>               /* On the first call lookup the datatype of the supplied 
> argument */
>               Oid                             argtypeid = 
> get_fn_expr_argtype(fcinfo->flinfo, 0);
> !             HeapTuple               tp;
> !             int                             typlen;
>   
> !             tp = SearchSysCache(TYPEOID,
> !                                                     
> ObjectIdGetDatum(argtypeid),
> !                                                     0, 0, 0);
> !             if (!HeapTupleIsValid(tp))
>               {
>                       /* Oid not in pg_type, should never happen. */
> !                     ereport(ERROR,
> !                                     (errcode(ERRCODE_INTERNAL_ERROR),
> !                                      errmsg("invalid typid: %u", 
> argtypeid)));
>               }
> !             
> !             typlen = ((Form_pg_type)GETSTRUCT(tp))->typlen;
> !             ReleaseSysCache(tp);
>               fcinfo->flinfo->fn_extra = 
> MemoryContextAlloc(fcinfo->flinfo->fn_mcxt,
>                                                                               
>                           sizeof(int));
>               *(int *)fcinfo->flinfo->fn_extra = typlen;
> --- 2363,2377 ----
>       {
>               /* On the first call lookup the datatype of the supplied 
> argument */
>               Oid                             argtypeid = 
> get_fn_expr_argtype(fcinfo->flinfo, 0);
> !             int                             typlen    = 
> get_typlen(argtypeid);
>   
> !             
> !             if (typlen == 0)
>               {
>                       /* Oid not in pg_type, should never happen. */
> !                     elog(ERROR, "cache lookup failed for type %u", 
> argtypeid);
>               }
> ! 
>               fcinfo->flinfo->fn_extra = 
> MemoryContextAlloc(fcinfo->flinfo->fn_mcxt,
>                                                                               
>                           sizeof(int));
>               *(int *)fcinfo->flinfo->fn_extra = typlen;
> 

-- 
  Bruce Momjian                        |  http://candle.pha.pa.us
  pgman@candle.pha.pa.us               |  (610) 359-1001
  +  If your life is a hard drive,     |  13 Roberts Road
  +  Christ can be your backup.        |  Newtown Square, Pennsylvania 19073

---------------------------(end of broadcast)---------------------------
TIP 8: explain analyze is your friend

Reply via email to