Thread: Some basic ecpg questions
(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
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!