Thread: calling a C function from pgsql function

calling a C function from pgsql function

From
tamanna madaan
Date:
Hi All

I have created a function in C language . This is to be called from a pgsql function .
Let say the C language function name is "test1" and pgsql function name is "test" .

test1 is called from test three times with different arguments .  For example :

test ()
begin

test1(arg1);    --test1 is a C library function  returning an int
test1(arg2);
test1(arg3);

end;

Now, my questions are :

1. what are the ways to get  the value returned by this library function . 
2. when test1 is called, will it wait for "test1" to return before continuing with the next statement in "test" or it will continue with the next statement parallely while "test1" is being executed.
3. Moreover, will test1  be called sequentially in order for all the three arguments i.e arg1 first and arg3 in last. Or there can be a different order.

Thanks..
Tamanna








--

 Tamanna | Associate Consultant
GlobalLogic Inc. | Innovation by Design
ARGENTINA | CHILE | CHINA | INDIA | ISRAEL | UKRAINE | UK | USA
Office:  0120-4062000  x 2971


Re: calling a C function from pgsql function

From
Craig Ringer
Date:
On 08/29/2012 09:18 PM, tamanna madaan wrote:

> 1. what are the ways to get  the value returned by this library function .

You need to wrap the C library function with a PostgreSQL C extension
that uses the fmgr.h APIs, so it's callable from SQL and can return a
result to SQL. See:

     http://www.postgresql.org/docs/current/static/xfunc-c.html

> 2. when test1 is called, will it wait for "test1" to return before
> continuing with the next statement in "test" or it will continue with
> the next statement parallely while "test1" is being executed.

The call will return when the C wrapper function returns, so they'll be
executed in series not in parallel.

> 3. Moreover, will test1  be called sequentially in order for all the
> three arguments i.e arg1 first and arg3 in last. Or there can be a
> different order.

The calls will be executed in the order they appear in the PL/PgSQL
function.

--
Craig Ringer


Re: calling a C function from pgsql function

From
Pavel Stehule
Date:
Hello

see http://www.postgresql.org/docs/9.1/static/xfunc-c.html

plpgsql can call any sql function, so you have to register your C
function as custom postgresql sql function

Regards

Pavel Stehule

2012/8/29 tamanna madaan <tamanna.madaan@globallogic.com>:
> Hi All
>
> I have created a function in C language . This is to be called from a pgsql
> function .
> Let say the C language function name is "test1" and pgsql function name is
> "test" .
>
> test1 is called from test three times with different arguments .  For
> example :
>
> test ()
> begin
>
> test1(arg1);    --test1 is a C library function  returning an int
> test1(arg2);
> test1(arg3);
>
> end;
>
> Now, my questions are :
>
> 1. what are the ways to get  the value returned by this library function .
> 2. when test1 is called, will it wait for "test1" to return before
> continuing with the next statement in "test" or it will continue with the
> next statement parallely while "test1" is being executed.
> 3. Moreover, will test1  be called sequentially in order for all the three
> arguments i.e arg1 first and arg3 in last. Or there can be a different
> order.
>
> Thanks..
> Tamanna
>
>
>
>
>
>
>
>
> --
>
>  Tamanna | Associate Consultant
> GlobalLogic Inc. | Innovation by Design
> ARGENTINA | CHILE | CHINA | INDIA | ISRAEL | UKRAINE | UK | USA
> Office:  0120-4062000  x 2971
> www.globallogic.com
>
> http://www.globallogic.com/email_disclaimer.txt
>