On Tue, Sep 25, 2007 at 02:13:05PM +0200, Michael Meskes wrote: > On Tue, Sep 25, 2007 at 11:07:27AM +0200, Magnus Hagander wrote: > > Oh, and I'm now seeing failures on my dev box with ECPG on the MSVC build > > using "the old way" (.bat-files): > > array_of_struct.c > > array_of_struct.pgc(26): error C2065: 'customer' : undeclared identifier > > array_of_struct.pgc(26): error C2146: syntax error : missing ';' before > > identifier 'custs1' > > array_of_struct.pgc(26): error C2065: 'custs1' : undeclared identifier > > array_of_struct.pgc(26): error C2109: subscript requires array or > > pointer type > > array_of_struct.pgc(27): error C2065: 'cust_ind' : undeclared identifier > > array_of_struct.pgc(27): error C2146: syntax error : missing ';' before > > identifier 'inds' > > array_of_struct.pgc(27): error C2065: 'inds' : undeclared identifier > > array_of_struct.pgc(27): error C2109: subscript requires array or > > pointer type > > array_of_struct.pgc(33): error C2275: 'customer2' : illegal use of this > > type as an expression > > array_of_struct.pgc(32) : see declaration of 'customer2' > > I do not have a Windows development setup around, so I never tried > myself but this looks strange. Could anyone please send me the .c file? > There are two possible reason: Either ecpg creates different code on > Windows, or the code that works on all Unix systems does not compile on > Windows.
Irrk. The C file is very wrong indeed. Here's the relevant part where it shoudl be declaring 'customer': /* exec sql type customer is struct { #line 12 "array_of_struct.pgc" struct varchar_name_12 { int len; char arr[ 50 ]; } name ; #line 13 "array_of_struct.pgc" int phone ; } */ #line 14 "array_of_struct.pgc" (all on one line, in case the MUA wraps it) Seems like the entire definition of the struct is commented out? Are we perhaps looking at something broken by Windows newlines? Anyway, I've attached the full output file. > P.S.: Is there some documentation available on how to set up a Windows > build system? Takes less time when you know all software to install > beforehand and if you get this software at all. There's a chapter in the developer version of the docs. That combined withthe README file in src/tools/msvc should get yuo there - especially if you know a bit of Windows devving beforehand. Suggestions for improvements are always welcome though, since not a lot of people have built something off those instructions yet. //Magnus
/* Processed by ecpg (regression mode) */ /* These include files are added by the preprocessor */ #include <ecpgtype.h> #include <ecpglib.h> #include <ecpgerrno.h> #include <sqlca.h> /* End of automatic include section */ #define ECPGdebug(X,Y) ECPGdebug((X)+100,(Y)) #line 1 "array_of_struct.pgc" #include <stdio.h> #line 1 "./../regression.h" #line 3 "array_of_struct.pgc" /* exec sql whenever sqlerror sqlprint ; */ #line 5 "array_of_struct.pgc" /* exec sql whenever sql_warning sqlprint ; */ #line 6 "array_of_struct.pgc" /* exec sql whenever not found sqlprint ; */ #line 7 "array_of_struct.pgc" /* exec sql type customer is struct { #line 12 "array_of_struct.pgc" struct varchar_name_12 { int len; char arr[ 50 ]; } name ; #line 13 "array_of_struct.pgc" int phone ; } */ #line 14 "array_of_struct.pgc" /* exec sql type cust_ind is struct ind { #line 19 "array_of_struct.pgc" short name_ind ; #line 20 "array_of_struct.pgc" short phone_ind ; } */ #line 21 "array_of_struct.pgc" int main( int argc, char * argv[] ) { /* exec sql begin declare section */ typedef struct { #line 30 "array_of_struct.pgc" struct varchar_name_30 { int len; char arr[ 50 ]; } name ; #line 31 "array_of_struct.pgc" int phone ; } customer2 ; #line 32 "array_of_struct.pgc" #line 26 "array_of_struct.pgc" customer custs1 [ 10 ] ; #line 27 "array_of_struct.pgc" cust_ind inds [ 10 ] ; #line 33 "array_of_struct.pgc" customer2 custs2 [ 10 ] ; #line 38 "array_of_struct.pgc" struct customer3 { #line 36 "array_of_struct.pgc" struct varchar_name_36 { int len; char arr[ 50 ]; } name ; #line 37 "array_of_struct.pgc" int phone ; } custs3 [ 10 ] ; #line 43 "array_of_struct.pgc" struct customer4 { #line 41 "array_of_struct.pgc" struct varchar_name_41 { int len; char arr[ 50 ]; } name ; #line 42 "array_of_struct.pgc" int phone ; } custs4 ; #line 44 "array_of_struct.pgc" int r ; /* exec sql end declare section */ #line 45 "array_of_struct.pgc" ECPGdebug(1, stderr); { ECPGconnect(__LINE__, 0, "regress1" , NULL, NULL , NULL, 0); #line 49 "array_of_struct.pgc" if (sqlca.sqlwarn[0] == 'W') sqlprint(); #line 49 "array_of_struct.pgc" if (sqlca.sqlcode < 0) sqlprint();} #line 49 "array_of_struct.pgc" { ECPGdo(__LINE__, 0, 1, NULL, 0, ECPGst_normal, "create table customers ( c varchar ( 50 ) , p int ) ", ECPGt_EOIT, ECPGt_EORT); #line 51 "array_of_struct.pgc" if (sqlca.sqlwarn[0] == 'W') sqlprint(); #line 51 "array_of_struct.pgc" if (sqlca.sqlcode < 0) sqlprint();} #line 51 "array_of_struct.pgc" { ECPGdo(__LINE__, 0, 1, NULL, 0, ECPGst_normal, "insert into customers values ( 'John Doe' , '12345' ) ", ECPGt_EOIT, ECPGt_EORT); #line 52 "array_of_struct.pgc" if (sqlca.sqlcode == ECPG_NOT_FOUND) sqlprint(); #line 52 "array_of_struct.pgc" if (sqlca.sqlwarn[0] == 'W') sqlprint(); #line 52 "array_of_struct.pgc" if (sqlca.sqlcode < 0) sqlprint();} #line 52 "array_of_struct.pgc" { ECPGdo(__LINE__, 0, 1, NULL, 0, ECPGst_normal, "insert into customers values ( 'Jane Doe' , '67890' ) ", ECPGt_EOIT, ECPGt_EORT); #line 53 "array_of_struct.pgc" if (sqlca.sqlcode == ECPG_NOT_FOUND) sqlprint(); #line 53 "array_of_struct.pgc" if (sqlca.sqlwarn[0] == 'W') sqlprint(); #line 53 "array_of_struct.pgc" if (sqlca.sqlcode < 0) sqlprint();} #line 53 "array_of_struct.pgc" { ECPGdo(__LINE__, 0, 1, NULL, 0, ECPGst_normal, "select * from customers limit 2 ", ECPGt_EOIT, ECPGt_varchar,&(custs1->name),(long)50,(long)10,sizeof( customer ), ECPGt_short,&(inds->name_ind),(long)1,(long)10,sizeof( struct ind ), ECPGt_int,&(custs1->phone),(long)1,(long)10,sizeof( customer ), ECPGt_short,&(inds->phone_ind),(long)1,(long)10,sizeof( struct ind ), ECPGt_EORT); #line 55 "array_of_struct.pgc" if (sqlca.sqlcode == ECPG_NOT_FOUND) sqlprint(); #line 55 "array_of_struct.pgc" if (sqlca.sqlwarn[0] == 'W') sqlprint(); #line 55 "array_of_struct.pgc" if (sqlca.sqlcode < 0) sqlprint();} #line 55 "array_of_struct.pgc" printf("custs1:\n"); for (r = 0; r < 2; r++) { printf( "name - %s\n", custs1[r].name.arr ); printf( "phone - %d\n", custs1[r].phone ); } { ECPGdo(__LINE__, 0, 1, NULL, 0, ECPGst_normal, "select * from customers limit 2 ", ECPGt_EOIT, ECPGt_varchar,&(custs2->name),(long)50,(long)10,sizeof( customer2 ), ECPGt_short,&(inds->name_ind),(long)1,(long)10,sizeof( struct ind ), ECPGt_int,&(custs2->phone),(long)1,(long)10,sizeof( customer2 ), ECPGt_short,&(inds->phone_ind),(long)1,(long)10,sizeof( struct ind ), ECPGt_EORT); #line 63 "array_of_struct.pgc" if (sqlca.sqlcode == ECPG_NOT_FOUND) sqlprint(); #line 63 "array_of_struct.pgc" if (sqlca.sqlwarn[0] == 'W') sqlprint(); #line 63 "array_of_struct.pgc" if (sqlca.sqlcode < 0) sqlprint();} #line 63 "array_of_struct.pgc" printf("\ncusts2:\n"); for (r = 0; r < 2; r++) { printf( "name - %s\n", custs2[r].name.arr ); printf( "phone - %d\n", custs2[r].phone ); } { ECPGdo(__LINE__, 0, 1, NULL, 0, ECPGst_normal, "select * from customers limit 2 ", ECPGt_EOIT, ECPGt_varchar,&(custs3->name),(long)50,(long)10,sizeof( struct customer3 ), ECPGt_short,&(inds->name_ind),(long)1,(long)10,sizeof( struct ind ), ECPGt_int,&(custs3->phone),(long)1,(long)10,sizeof( struct customer3 ), ECPGt_short,&(inds->phone_ind),(long)1,(long)10,sizeof( struct ind ), ECPGt_EORT); #line 71 "array_of_struct.pgc" if (sqlca.sqlcode == ECPG_NOT_FOUND) sqlprint(); #line 71 "array_of_struct.pgc" if (sqlca.sqlwarn[0] == 'W') sqlprint(); #line 71 "array_of_struct.pgc" if (sqlca.sqlcode < 0) sqlprint();} #line 71 "array_of_struct.pgc" printf("\ncusts3:\n"); for (r = 0; r < 2; r++) { printf( "name - %s\n", custs3[r].name.arr ); printf( "phone - %d\n", custs3[r].phone ); } { ECPGdo(__LINE__, 0, 1, NULL, 0, ECPGst_normal, "select * from customers limit 1 ", ECPGt_EOIT, ECPGt_varchar,&(custs4.name),(long)50,(long)1,sizeof(struct varchar_name_41), ECPGt_short,&(inds[0].name_ind),(long)1,(long)1,sizeof(short), ECPGt_int,&(custs4.phone),(long)1,(long)1,sizeof(int), ECPGt_short,&(inds[0].phone_ind),(long)1,(long)1,sizeof(short), ECPGt_EORT); #line 79 "array_of_struct.pgc" if (sqlca.sqlcode == ECPG_NOT_FOUND) sqlprint(); #line 79 "array_of_struct.pgc" if (sqlca.sqlwarn[0] == 'W') sqlprint(); #line 79 "array_of_struct.pgc" if (sqlca.sqlcode < 0) sqlprint();} #line 79 "array_of_struct.pgc" printf("\ncusts4:\n"); printf( "name - %s\n", custs4.name.arr ); printf( "phone - %d\n", custs4.phone ); { ECPGdisconnect(__LINE__, "ALL"); #line 84 "array_of_struct.pgc" if (sqlca.sqlwarn[0] == 'W') sqlprint(); #line 84 "array_of_struct.pgc" if (sqlca.sqlcode < 0) sqlprint();} #line 84 "array_of_struct.pgc" return( 0 ); }
---------------------------(end of broadcast)--------------------------- TIP 3: Have you checked our extensive FAQ? http://www.postgresql.org/docs/faq