Thread: domains code query

domains code query

From
Andrew Dunstan
Date:
*
domains.c contains the followng snippet in domain_in():

   else* *if* (my_extra->domain_type != domainType)    domain_state_setup(my_extra, domainType, false,
    fcinfo->flinfo->fn_mcxt);
 


We were just looking at this code (in the context of implementing enums) and wondered when this case might arise. 
Would it be when more than one domain is used in a table row? Or are we smarter than that?

Putting it another way, how often are fcinfo/flinfo created and reused?

TIA

cheers

andrew



Re: domains code query

From
Tom Lane
Date:
Andrew Dunstan <andrew@dunslane.net> writes:
> domains.c contains the followng snippet in domain_in():

>     else* *if* (my_extra->domain_type != domainType)
>         domain_state_setup(my_extra, domainType, false,
>                            fcinfo->flinfo->fn_mcxt);

> We were just looking at this code (in the context of implementing enums) and wondered when this case might arise. 
> Would it be when more than one domain is used in a table row? Or are we smarter than that?

I think it's just defensive programming.  The logic was copied from
array_in which does something similar, but AFAIR there's not really
any code path which would feed differing input types to the same
function call within a single query execution.  Still, since it takes
only an extra comparison or so to handle the scenario, why not?
        regards, tom lane


Re: domains code query

From
andrew@dunslane.net
Date:
Tom Lane wrote:
> Andrew Dunstan <andrew@dunslane.net> writes:
>> domains.c contains the followng snippet in domain_in():
>
>>     else* if (my_extra->domain_type != domainType)
>>         domain_state_setup(my_extra, domainType, false,
>>                            fcinfo->flinfo->fn_mcxt);
>
>> We were just looking at this code (in the context of implementing enums)
>> and wondered when this case might arise.
>> Would it be when more than one domain is used in a table row? Or are we
>> smarter than that?
>
> I think it's just defensive programming.  The logic was copied from
> array_in which does something similar, but AFAIR there's not really
> any code path which would feed differing input types to the same
> function call within a single query execution.  Still, since it takes
> only an extra comparison or so to handle the scenario, why not?
>


Sure. We were hoping it was something like that.

cheers

andrew