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

Reply via email to