Re[2]: [BUGS] BUG #11761: range_in dosn't work via direct functional call

From: Dunauskas Oleg <olegjobs(at)mail(dot)ru>
To: Pavel Stehule <pavel(dot)stehule(at)gmail(dot)com>
Cc: pgsql-bugs(at)postgresql(dot)org <pgsql-bugs(at)postgresql(dot)org>, Heikki Linnakangas <hlinnakangas(at)vmware(dot)com>
Subject: Re[2]: [BUGS] BUG #11761: range_in dosn't work via direct functional call
Date: 2014-10-24 17:32:45
Message-ID: 1414171965.135034595@f243.i.mail.ru
Views: Raw Message | Whole Thread | Download mbox | Resend email
Thread:
Lists: pgsql-bugs

Thanks for help, for other people I leave some snippet,  it took one working day to dig into postgres code to understand this:

FmgrInfo fmgr;

Oid func_id = fmgr_internal_function("range_in");
fmgr_info(func_id, &fmgr);

Datum result = FunctionCall3(&fmgr, CStringGetDatum("(1,1)"), ObjectIdGetDatum(3904), Int32GetDatum(0));
And one more question, for example, I do some memory allocation via palloc in _PG_Init().
Is this memory preserve for all life time after library is loaded into postgresql process?

Other case, for example, I have this code in dynamic lib:

char *global_init;
char *global;

void _PG_init(void)
{
   global_init = (char *) palloc(10);
}

Datum f (PG_FUNCTION_ARGS)
{
   if (!global)
   {
      global  = (char*) palloc (10);
   }
   *global = '\0'; // is it ok when i call "f" several times?
   *global_init = '\0'; // is it ok when i call "f" several times?

Fri, 24 Oct 2014 15:52:36 +0200 от Pavel Stehule <pavel(dot)stehule(at)gmail(dot)com>:
>
>
>2014-10-24 15:08 GMT+02:00 Heikki Linnakangas < hlinnakangas(at)vmware(dot)com > :
>>On 10/22/2014 08:27 PM, olegjobs(at)mail(dot)ru wrote:
>>>This function test_ext_get_range(cstring) returns int4range:
>>>
>>>Datum test_ext_get_range(PG_ FUNCTION_ARGS)
>>>{
>>>    char *ts = PG_GETARG_CSTRING(0);
>>>
>>>    return DirectFunctionCall3(range_in, CStringGetDatum(ts),
>>>ObjectIdGetDatum(3904), Int32GetDatum(0);
>>>}
>>>In psql:
>>>select test_ext_get_range('[1,1]');
>>>error:
>>>connection to the server was lost.
>>>
>>>it seems to me that some memory problems because of "The range I/O functions
>>>need a bit more cached info than other range
>>>  * functions, so they store a RangeIOData struct in fn_extra, not just a
>>>  * pointer to a type cache entry. "
>>
>>Yeah, DirectFunctionCall cannot be used with range_in. Use FunctionCall3 instead. See this comment in fmgr.c, above DirectFunctionCall1Coll:
>
>There is a special "InputFunctionCall"
>
>Regards
>
>Pavel

>>>/*
>>> * These are for invocation of a specifically named function with a
>>> * directly-computed parameter list.  Note that neither arguments nor result
>>> * are allowed to be NULL.  Also, the function cannot be one that needs to
>>> * look at FmgrInfo, since there won't be any.
>>> */
>>
>>range_in needs to look at FmgrInfo.
>>
>>- Heikki
>>
>>
>>--
>>Sent via pgsql-bugs mailing list ( pgsql-bugs(at)postgresql(dot)org )
>>To make changes to your subscription:
>>http://www.postgresql.org/ mailpref/pgsql-bugs
>

In response to

Responses

Browse pgsql-bugs by date

  From Date Subject
Next Message Heikki Linnakangas 2014-10-24 18:15:41 Re: [BUGS] Re: [BUGS] Re: [BUGS] Re: [BUGS] Re: BUG #11431: Failing to backup and restore a Windows postgres database, with Norwegian Bokmål locale.
Previous Message Keyur Govande 2014-10-24 16:10:09 Re: [BUGS] BUG #11767: ODBC driver bug when fetching constant string columns