Re: [PATCHES] ecpg generates wrong code for EXEC SQL FREE <cursor>

From: Bruce Momjian <pgman(at)candle(dot)pha(dot)pa(dot)us>
To: Rene Hogendoorn <hogend(at)nlr(dot)nl>
Cc: pgsql-patches(at)postgreSQL(dot)org, pgsql-bugs(at)postgreSQL(dot)org
Subject: Re: [PATCHES] ecpg generates wrong code for EXEC SQL FREE <cursor>
Date: 1999-11-23 19:43:43
Message-ID: 199911231943.OAA10770@candle.pha.pa.us
Views: Raw Message | Whole Thread | Download mbox | Resend email
Thread:
Lists: pgsql-bugs


Thanks. This will appear in 7.0.

> ============================================================================
> POSTGRESQL BUG REPORT
> ============================================================================
>
>
> Your name : Rene Hogendoorn
> Your email address : hogend(at)nlr(dot)nl
>
>
> System Configuration
> ---------------------
> Architecture (example: Intel Pentium) : Intel PII / dec alpha
>
> Operating System (example: Linux 2.0.26 ELF) : Redhat 6.1 / DUNIX 4.0f
>
> PostgreSQL version (example: PostgreSQL-6.5.3): PostgreSQL-6.5.3
>
> Compiler used (example: gcc 2.8.0) : egcs 1.1.2 / gcc 2.7.2.2
>
>
> Please enter a FULL description of your problem:
> ------------------------------------------------
>
> ecpg generates wrong code for EXEC SQL FREE <cursor>.
> The code generated, looks like
>
> if( Successful( "Database_c::Delete_via_WHERE", "cannot prepare the statement", __LINE__, __FILE__))
> {
> { ECPGdo(__LINE__, NULL, "?",
> ECPGt_char_variable,(ECPGprepared_statement("st1")),1L,1L,1*sizeof(char),
> ECPGt_NO_INDICATOR, NULL , 0L, 0L, 0L, ECPGt_EOIT, ECPGt_EORT);}
> #line 279 "/home/tradefp1/hogend/SASS-C/SASS-C/Dev/common/gendbi_common/src/database.ec"
>
> Successful( "Database_c::Delete_via_WHERE", "Cannot execute the statement", __LINE__, __FILE__);
> }
> delete [] stmnt;
> stmnt = 0;
> { ECPGdeallocate(__LINE__, NULL, "st1");}
>
> ^^^^^^
>
> The problem is that ECPGdeallocate has only two arguments
>
> Please describe a way to repeat the problem. Please try to provide a
> concise reproducible example, if at all possible:
> ----------------------------------------------------------------------
>
> EXEC SQL BEGIN DECLARE SECTION;
> char * stmnt;
> EXEC SQL END DECLARE SECTION;
>
> stmnt = new char[len_ + 1];
> if( stmnt == 0 )
> return memerr( __LINE__, __FILE__ );
> sprintf( stmnt,"DELETE FROM %s WHERE %s", _table, _where_clause );
> EXEC SQL PREPARE st1 FROM :stmnt;
>
> // if (SQLCODE == NO_SQL_ERROR)
> if( Successful( "Database_c::Delete_via_WHERE", "cannot prepare the statement", __LINE__, __FILE__))
> {
> EXEC SQL EXECUTE st1;
> //if( SQLCODE == NO_SQL_ERROR)
> //{
> //}
> Successful( "Database_c::Delete_via_WHERE", "Cannot execute the statement", __LINE__, __FILE__);
> // end of modifications .......................................................................
> }
> delete [] stmnt;
> stmnt = 0;
>
> EXEC SQL FREE st1;
>
>
>
>
> If you know how this problem might be fixed, list the solution below:
> ---------------------------------------------------------------------
>
> diff -c postgresql-6.5.3/src/interfaces/ecpg/preproc/preproc.y.orig postgresql-6.5.3/src/interfaces/ecpg/preproc/preproc.y
> *** postgresql-6.5.3/src/interfaces/ecpg/preproc/preproc.y.orig Sat Jul 10 00:53:40 1999
> --- postgresql-6.5.3/src/interfaces/ecpg/preproc/preproc.y Tue Nov 23 14:53:42 1999
> ***************
> *** 956,962 ****
> output_statement($1, 0);
> }
> | ECPGFree {
> ! fprintf(yyout, "{ ECPGdeallocate(__LINE__, %s, \"%s\");", connection ? connection : "NULL", $1);
> whenever_action(2);
> free($1);
> }
> --- 956,974 ----
> output_statement($1, 0);
> }
> | ECPGFree {
> ! fprintf(yyout, "{ ECPGdeallocate(__LINE__, \"%s\");", $1);
> whenever_action(2);
> free($1);
> }
> --
>
> R. A. Hogendoorn E-mail: hogend(at)nlr(dot)nl
> Information and Communication Technology Division Tel. +31-527-24-8367
> National Aerospace Laboratory, The Netherlands Fax. +31-527-24-8210
>
> ************
>
>

--
Bruce Momjian | http://www.op.net/~candle
maillist(at)candle(dot)pha(dot)pa(dot)us | (610) 853-3000
+ If your life is a hard drive, | 830 Blythe Avenue
+ Christ can be your backup. | Drexel Hill, Pennsylvania 19026

In response to

Browse pgsql-bugs by date

  From Date Subject
Next Message Silvio Macedo 1999-11-25 11:39:34 initdb bug in Postgres on Ultrasparc platform
Previous Message Bruce Momjian 1999-11-23 19:27:31 Re: [PATCHES] ecpg sqlca.h bug