Thread: How to pass array from .pgc to sql function

How to pass array from .pgc to sql function

From
Siva Palanisamy
Date:

Hi All,

 

I am using embedded Postgres ‘C’ file to make function calls to the sql. I have a .pgc (a ‘C’ file with sql statements) and .sql file.

 

I have a pointer array that looks like this:

typedef struct {

                char* displayName;

} DisplayName;

 

DisplayName* displayName_list = calloc(5, sizeof(*displayName_list));

 

displayName_list = response->displayName_list

 

Assume that response->displayName_list holds the list of names to be sent to the sql function. Below is the similar sql func:

 

CREATE OR REPLACE FUNCTION prepare_names,TEXT[])

        RETURNS VOID AS '

………………………………….

 

I need to convert that pointer which holds the list of names to the sql func as an array. Please help me on this part.

 

Thanks and Regards,

Siva.



::DISCLAIMER::
-----------------------------------------------------------------------------------------------------------------------

The contents of this e-mail and any attachment(s) are confidential and intended for the named recipient(s) only.
It shall not attach any liability on the originator or HCL or its affiliates. Any views or opinions presented in
this email are solely those of the author and may not necessarily reflect the opinions of HCL or its affiliates.
Any form of reproduction, dissemination, copying, disclosure, modification, distribution and / or publication of
this message without the prior written consent of the author of this e-mail is strictly prohibited. If you have
received this email in error please delete it and notify the sender immediately. Before opening any mail and
attachments please check them for viruses and defect.

-----------------------------------------------------------------------------------------------------------------------

Re: How to pass array from .pgc to sql function

From
Merlin Moncure
Date:
On Mon, Sep 19, 2011 at 8:20 AM, Siva Palanisamy <siva_p@hcl.com> wrote:
> Hi All,
>
>
>
> I am using embedded Postgres ‘C’ file to make function calls to the sql. I
> have a .pgc (a ‘C’ file with sql statements) and .sql file.
>
>
>
> I have a pointer array that looks like this:
>
> typedef struct {
>
>                 char* displayName;
>
> } DisplayName;
>
>
>
> DisplayName* displayName_list = calloc(5, sizeof(*displayName_list));
>
>
>
> displayName_list = response->displayName_list
>
>
>
> Assume that response->displayName_list holds the list of names to be sent to
> the sql function. Below is the similar sql func:
>
>
>
> CREATE OR REPLACE FUNCTION prepare_names,TEXT[])
>
>         RETURNS VOID AS '
>
> ………………………………….
>
>
>
> I need to convert that pointer which holds the list of names to the sql func
> as an array. Please help me on this part.

it looks like container types are not supported in ecpg.  see:
http://developer.postgresql.org/pgdocs/postgres/ecpg-variables.html#ECPG-VARIABLES-NONPRIMITIVE-SQL.

You can probably work around the issue by constructing text
representations of the array and casting it in the query.

merlin