On 3/10/15 2:43 PM, Pavel Stehule wrote:

    There is not all that much commonality; many functions don't bother to
    populate all of the ArrayMetaState fields because they don't need all of
    them.  (The ones you quote don't, in fact.)  You are either going to end
    up with a subroutine that does extra syscache lookups to populate the
    whole struct every time, or a confusing collection of ad-hoc
    subroutines.
    I'm not convinced that there's a lot of mileage to be gained here.


I have not good feeling about it too. If we would to enhance this are,
we probably need a specific flinfo field and flags to specify more
precious the context of cached informations. my_extra should be reserved
for generic usage. But still there is relative big space for settings
some less common fields like "proc".

With extra field in flinfo we can have interface like

bool set_flinfo_type_cache(fcinfo, type, flags);
and usage fcinfo->flinfo->typecache->typlen, ..

I'm not following what you intended there, but in any case I don't think we'd need to change all that much, because there's only 3 cases:

1) Get only the base type info
2) Get base type info and equality operator
3) Get IO info for one IOFunc

Passing the function an enum (and perhaps keeping it in ArrayMetaState) would be enough to distinguish between the 3 cases. You'd also need to pass in IOFuncSelector.

That said, this pattern with fn_extra is repeated a lot, even just in the backend (not counting contrib or extensions). It would be nice if there was generic support for this.

decibel@decina:[17:15]~/pgsql/HEAD/src/backend (array_offset_v4 $)$pg_grep fn_extra|cut -d: -f1|uniq -c
  14 access/gist/gistscan.c
   7 executor/functions.c
   1 executor/nodeWindowAgg.c
  14 utils/adt/array_userfuncs.c
  31 utils/adt/arrayfuncs.c
   4 utils/adt/domains.c
   2 utils/adt/enum.c
   1 utils/adt/int.c
   6 utils/adt/jsonfuncs.c
   1 utils/adt/oid.c
   4 utils/adt/orderedsetaggs.c
   7 utils/adt/rangetypes.c
  24 utils/adt/rowtypes.c
   8 utils/adt/varlena.c
(utils/fmgr/* doesn't count)
--
Jim Nasby, Data Architect, Blue Treble Consulting
Data in Trouble? Get it in Treble! http://BlueTreble.com


--
Sent via pgsql-hackers mailing list (pgsql-hackers@postgresql.org)
To make changes to your subscription:
http://www.postgresql.org/mailpref/pgsql-hackers

Reply via email to