Thread: Some basic ecpg questions

Some basic ecpg questions

From
"Murphy Pope"
Date:
(I apologize in advance for such basic questions, but...)
 
I saw in some of the test sources for ecpg that I can use the
    EXEC SQL TYPE foo IS int;
statement to tell ecpg about an artificial data type.  I also noticed that I can use EXEC SQL TYPE to tell ecpg about structures.  But I have a few questions about this:
 
1)  It looks like I have to define each data type twice: once for ecpg and once for C.  Is that correct or is there something basic that I am missing?
 
2)  I could not seem to include a varchar inside of a struct - the ecpg preprocessor got confused by that.  My construct looked something like:
   
    typedef struct
    {
        int        id;
        varchar data[50];
    } foo;
 
    EXEC SQL TYPE foo IS
    struct
    {
        int         id;
        varchar  data[50];
    };
 
When I tried to declare a 'foo' inside of the DECLATION SECTION, ecpg seemed to produce some code that my GNU CC didn't understand.  (If it would help, I can send in the actual source and resulting .c file).
 
3)  If I use EXEC SQL TYPE to declare a structure, it doesn't look like I can use an array of these structures to retreive multiple rows.  Using the previous example structures, I want to do something like:
 
    EXEC SQL BEGIN DECLARATION SECTION;
        foo    records[5];
    EXEC SQL END DECLARATION SECTION;
 
   EXEC SQL select * into :records from bar limit 5;
 
ecpg doesn't seem to understand this construct, but if I take members out of the structure and declare them as:
 
    EXEC SQL BEGIN DECLARATION SECTION;
        int        id[5];
        char     data[5][50];
  EXEC SQL END DECLARATION SECTION;      
 
that works (yes, I know I changed from varchar to char in this example).
 
I am using ecpg (and postgresql) version 7.1.3.
 
Thanks in advance for any help.
 
                         --  Murphy
 
 
 
 

Re: Some basic ecpg questions

From
Michael Meskes
Date:
On Wed, Mar 20, 2002 at 07:08:28PM -0500, Murphy Pope wrote:
> 1)  It looks like I have to define each data type twice: once for ecpg and once for C.  Is that correct or is there
somethingbasic that I am missing?
 

I just committed some patches for this. Up to postgresql version 7.2
this is correct.

> 2)  I could not seem to include a varchar inside of a struct - the ecpg preprocessor got confused by that.  My
constructlooked something like:
 
>     
>     typedef struct
>     {
>         int        id;
>         varchar data[50];
>     } foo;

C does not know varchar at all.

> When I tried to declare a 'foo' inside of the DECLATION SECTION, ecpg seemed to produce some code that my GNU CC
didn'tunderstand.  (If it would help, I can send in the actual source and resulting .c file).
 

Please try the actual CVS version as this part was just changed earlier
today.

> 3)  If I use EXEC SQL TYPE to declare a structure, it doesn't look like I can use an array of these structures to
retreivemultiple rows.  Using the previous example structures, I want to do something like:
 
> 
>     EXEC SQL BEGIN DECLARATION SECTION;
>         foo    records[5];
>     EXEC SQL END DECLARATION SECTION;
> 
>    EXEC SQL select * into :records from bar limit 5;

Did you EXEC SQL TYPE datatype foo?

If so, please send me a simple example file I I can reproduce this.

Michael
-- 
Michael Meskes
Michael@Fam-Meskes.De
Go SF 49ers! Go Rhein Fire!
Use Debian GNU/Linux! Use PostgreSQL!