ECPG does not correctly identify pointer type

From: pgsql-bugs(at)postgresql(dot)org
To: pgsql-bugs(at)postgresql(dot)org
Subject: ECPG does not correctly identify pointer type
Date: 2001-08-14 09:22:17
Message-ID: 200108140922.f7E9MHe16045@hub.org
Views: Raw Message | Whole Thread | Download mbox | Resend email
Thread:
Lists: pgsql-bugs

Lee Kindness (lkindness(at)csl(dot)co(dot)uk) reports a bug with a severity of 1
The lower the number the more severe it is.

Short Description
ECPG does not correctly identify pointer type

Long Description
The embedded SQL preprocessor, ecpg, does not correctly identify pointer types. Example #1 below results in the output #2 (edited for clarity) which incorrectly has references to 'ptr.id' and 'ptr.name' rather than 'ptr->id' and 'ptr->name' respectively.

When the 'ExamplePtr ptr' definition is replaced by 'ExampleStr *ptr' the same output is produced, when changed to 'struct ExampleStr_ *ptr' ecpg outputs the error:

test.pc:16: ERROR: parse error

I am running ecpg version 2.7.1 on a Redhat Linux 7.0 system.

Sample Code
#1:

typedef struct ExampleStr_
{
int id;
char name[100];
} ExampleStr, *ExamplePtr;

EXEC SQL TYPE ExampleStr IS STRUCT
{
int id;
char name[100];
};
EXEC SQL TYPE ExamplePtr IS ExampleStr REFERENCE;

ExamplePtr getExample(int id)
{
EXEC SQL BEGIN DECLARE SECTION;
ExamplePtr ptr;
int s_id = id;
EXEC SQL END DECLARE SECTION;

if( (ptr = calloc(1, sizeof(ExampleStr))) != NULL )
{
EXEC SQL SELECT *
INTO :ptr
FROM example
WHERE id = :s_id;
}
return( ptr );
}

#2:

/* Processed by ecpg (2.7.1) */
/* These three include files are added by the preprocessor */
#include <ecpgtype.h>
#include <ecpglib.h>
#include <ecpgerrno.h>

typedef struct ExampleStr_
{
int id;
char name[100];
} ExampleStr, *ExamplePtr;

/* exec sql type ExampleStr is struct {
int id ;
char name [ 100 ] ;
} */
/* exec sql type ExamplePtr is ExampleStr reference */

ExamplePtr getExample(int id)
{
/* exec sql begin declare section */
ExamplePtr ptr ;
int s_id = id ;
/* exec sql end declare section */

if( (ptr = calloc(1, sizeof(ExampleStr))) != NULL )
{
{ ECPGdo(__LINE__, NULL, "select * from example where id = ? ",
ECPGt_int,&(s_id),1L,1L,sizeof(int),
ECPGt_NO_INDICATOR, NULL , 0L, 0L, 0L, ECPGt_EOIT,
ECPGt_int,&(ptr.id),1L,1L,sizeof(int),
ECPGt_NO_INDICATOR, NULL , 0L, 0L, 0L,
ECPGt_char,(ptr.name),100L,1L,100*sizeof(char),
ECPGt_NO_INDICATOR, NULL , 0L, 0L, 0L, ECPGt_EORT);}
}
return( ptr );
}

No file was uploaded with this report

Browse pgsql-bugs by date

  From Date Subject
Next Message Szinyei Gerzson 2001-08-14 14:23:28 Except all bug in PostgreSQL 7.1*
Previous Message Martin Kuria 2001-08-14 06:11:39 triggers