On Mon, Mar 18, 2024 at 2:01 AM jian he <jian.universal...@gmail.com> wrote: > > looking at it again. > I found out we can just simply do > ` > Datum > pg_basetype(PG_FUNCTION_ARGS) > { > Oid oid; > > oid = get_fn_expr_argtype(fcinfo->flinfo, 0); > PG_RETURN_OID(getBaseType(oid)); > } > ` > > if the type is not a domain, work the same as pg_typeof. > if the type is domain, pg_typeof return as is, pg_basetype return the > base type. > so it only diverges when the argument type is a type of domain. > > the doc: > <function>pg_basetype</function> ( <type>"any"</type> ) > <returnvalue>regtype</returnvalue> > </para> > <para> > Returns the OID of the base type of a domain. If the argument > is not a type of domain, > return the OID of the data type of the argument just like <link > linkend="function-pg-typeof"><function>pg_typeof()</function></link>. > If there's a chain of domain dependencies, it will recurse > until finding the base type. > </para> > > > also, I think this way, we only do one syscache lookup.
Looks good to me. But should it be named pg_basetypeof()? ------ Regards, Alexander Korotkov