Re: [BUGS] Bug #640: ECPG: inserting float numbers - Mailing list pgsql-hackers

From Lee Kindness
Subject Re: [BUGS] Bug #640: ECPG: inserting float numbers
Date
Msg-id 15621.54854.130976.87612@kelvin.csl.co.uk
Whole thread Raw
Responses Re: [BUGS] Bug #640: ECPG: inserting float numbers  (Bruce Momjian <pgman@candle.pha.pa.us>)
List pgsql-hackers
Bruce, the attached source reproduces this on 7.2, I don't have a
later version at hand to test if it's been fixed:

 createdb floattest
 echo "CREATE TABLE tab1(col1 FLOAT);" | psql floattest
 ecpg insert-float.pgc
 gcc insert-float.c -lecpg -lpq
 ./a.out floattest

results in:

 col1: -0.000006
 *!*!* Error -400: 'ERROR:  parser: parse error at or near "a"' in line 21.

and in epcgdebug:

 [29189]: ECPGexecute line 21: QUERY: insert into tab1 ( col1  ) values ( -6.0000002122251e-06A ) on connection
floattest
 [29189]: ECPGexecute line 21: Error: ERROR:  parser: parse error at or near "a"
 [29189]: raising sqlcode -400 in line 21, ''ERROR:  parser: parse error at or near "a"' in line 21.'.

Regards, Lee Kindness.

Bruce Momjian writes:
 > Has this been addressed?  Can you supply a reproducable example?
 > Edward Pilipczuk wrote:
 > > On Monday, 22 April 2002 18:41, you wrote:
 > > > Edward (edx@astercity.net) reports a bug with a severity of 1
 > > > ECPG: inserting float numbers
 > > > Inserting records with single precision real variables having small value
 > > > (range 1.0e-6 or less) frequently results in errors in ECPG translations
 > > > putting into resulted sql statement unexpected characters => see fragments
 > > > of sample code and ECPGdebug log where after value of rate variable the
 > > > unexpected character '^A' appears
 > > >
 > > > Sample Code
 > > > [ snip ]

#include <stdlib.h>

EXEC SQL INCLUDE sqlca;

int main(int argc, char **argv)
{
  EXEC SQL BEGIN DECLARE SECTION;
  char *db = argv[1];
  float col1;
  EXEC SQL END DECLARE SECTION;
  FILE *f;

  if( (f = fopen("ecpgdebug", "w" )) != NULL )
    ECPGdebug(1, f);

  EXEC SQL CONNECT TO :db;
  EXEC SQL BEGIN;

  col1 = -6e-06;
  printf("col1: %f\n", col1);
  EXEC SQL INSERT INTO tab1(col1) VALUES (:col1);
  if( sqlca.sqlcode < 0 )
    {
      fprintf(stdout, "*!*!* Error %ld: %s\n", sqlca.sqlcode, sqlca.sqlerrm.sqlerrmc);
      EXEC SQL ABORT;
      EXEC SQL DISCONNECT;
      return( 1 );
    }
  else
    {
      EXEC SQL COMMIT;
      EXEC SQL DISCONNECT;
      return( 0 );
    }
}

pgsql-hackers by date:

Previous
From: Hannu Krosing
Date:
Subject: Re: Timestamp/Interval proposals: Part 2
Next
From: NunoACHenriques
Date:
Subject: Re: tuplesort: unexpected end of data