From 03f1648872daf555bdf48427f22219626c7b666a Mon Sep 17 00:00:00 2001 From: Bruce Momjian Date: Fri, 18 Dec 1998 07:08:03 +0000 Subject: Attached is a patch with some fixes that (I think that) should go into 6.4.1. Here is the list: MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit - The type int8 now works. In fact, the bug(s) were in src/backend/port/snprintf.c, so int8 is probably broken in every platform that hasn't a native snprintf/vsnprintf. The type itself worked as expected, only the output was wrong. Anyway, this patch should be checked in other platforms. - The regression tests for int2 and int4, which were broken due to differences in the error messages, are fixed. - The regression test for float8, which was broken in the reference platform, is also fixed. I don't know if the new file (float8-OSF1.out) will work on other platforms, but it might be worth to try it. - Two new template files are provided (alpha_cc, which includes optimization, and alpha_gcc), and src/templates/.similar is updated accordingly. src/templates/alpha should be removed from the distribution. *IMPORTANT NOTE*: I don't know if you can use gcc to compile postgres; I've written the alpha_gcc file because alpha_cc has some flags that are specific to DEC C. - There is a (very basic) Digital Unix specific FAQ in doc/FAQ_DigitalUnix. -- ------------------------------------------------------------------- Pedro José Lobo Perea Tel: +34 91 336 78 19 --- src/backend/port/snprintf.c | 4 +- src/template/.similar | 2 +- src/template/alpha | 16 -- src/template/alpha_cc | 15 ++ src/template/alpha_gcc | 16 ++ src/test/regress/expected/float8-OSF1.out | 234 ++++++++++++++++++++++++++++++ 6 files changed, 268 insertions(+), 19 deletions(-) delete mode 100644 src/template/alpha create mode 100644 src/template/alpha_cc create mode 100644 src/template/alpha_gcc create mode 100644 src/test/regress/expected/float8-OSF1.out (limited to 'src') diff --git a/src/backend/port/snprintf.c b/src/backend/port/snprintf.c index 2e3e077a66..7ec97b94e8 100644 --- a/src/backend/port/snprintf.c +++ b/src/backend/port/snprintf.c @@ -72,7 +72,7 @@ typedef long long long_long; * causing nast effects. **************************************************************/ -/*static char _id[] = "$Id: snprintf.c,v 1.13 1998/12/18 07:03:06 momjian Exp $";*/ +/*static char _id[] = "$Id: snprintf.c,v 1.14 1998/12/18 07:08:00 momjian Exp $";*/ static char *end; static int SnprfOverflow; @@ -349,7 +349,7 @@ int base, zpad; { int signvalue = 0; -#ifdef HAVE_LONG_INT_64 +#ifdef HAVE_LONG_LONG_INT_64 unsigned long_long uvalue; #else unsigned long uvalue; diff --git a/src/template/.similar b/src/template/.similar index 96e4f86271..c5f74dc39f 100644 --- a/src/template/.similar +++ b/src/template/.similar @@ -1,4 +1,4 @@ -alpha-dec-osf=alpha +alpha-dec-osf=alpha_cc alpha-unknown-linux-gnu=linux_alpha hppa1.1-hp-hpux=hpux_cc hppa1.1-stratus-sysv4=svr4 diff --git a/src/template/alpha b/src/template/alpha deleted file mode 100644 index 3da0dfe93a..0000000000 --- a/src/template/alpha +++ /dev/null @@ -1,16 +0,0 @@ -AROPT:crs -# NOFIXADE disallows unaligned access. -# on Ultrix and OSF/1 it invokes an explicit syscall. -# on HP-UX it turns off certain compiler options. -# This is defined here because a bunch of clients include tmp/c.h, -# which is where the work is done on HP-UX. It only affects the -# backend on Ultrix and OSF/1. -CFLAGS:-DNOFIXADE -SHARED_LIB: -ALL: -SRCH_INC: -SRCH_LIB: -USE_LOCALE:no -DLSUFFIX:.so -YFLAGS:-d -YACC: diff --git a/src/template/alpha_cc b/src/template/alpha_cc new file mode 100644 index 0000000000..20c3d1c94c --- /dev/null +++ b/src/template/alpha_cc @@ -0,0 +1,15 @@ +AROPT:crs +# NOFIXADE disallows unaligned access. +# on Ultrix and OSF/1 it invokes an explicit syscall. +# on HP-UX it turns off certain compiler options. +# This is defined here because a bunch of clients include tmp/c.h, +# which is where the work is done on HP-UX. It only affects the +# backend on Ultrix and OSF/1. +CFLAGS:-DNOFIXADE -std -O4 -Olimit 2000 +SHARED_LIB: +ALL: +SRCH_INC: +SRCH_LIB: +DLSUFFIX:.so +YFLAGS:-d +YACC: diff --git a/src/template/alpha_gcc b/src/template/alpha_gcc new file mode 100644 index 0000000000..3da0dfe93a --- /dev/null +++ b/src/template/alpha_gcc @@ -0,0 +1,16 @@ +AROPT:crs +# NOFIXADE disallows unaligned access. +# on Ultrix and OSF/1 it invokes an explicit syscall. +# on HP-UX it turns off certain compiler options. +# This is defined here because a bunch of clients include tmp/c.h, +# which is where the work is done on HP-UX. It only affects the +# backend on Ultrix and OSF/1. +CFLAGS:-DNOFIXADE +SHARED_LIB: +ALL: +SRCH_INC: +SRCH_LIB: +USE_LOCALE:no +DLSUFFIX:.so +YFLAGS:-d +YACC: diff --git a/src/test/regress/expected/float8-OSF1.out b/src/test/regress/expected/float8-OSF1.out new file mode 100644 index 0000000000..30003c3c31 --- /dev/null +++ b/src/test/regress/expected/float8-OSF1.out @@ -0,0 +1,234 @@ +QUERY: CREATE TABLE FLOAT8_TBL(f1 float8); +QUERY: INSERT INTO FLOAT8_TBL(f1) VALUES ('0.0'); +QUERY: INSERT INTO FLOAT8_TBL(f1) VALUES ('1004.30'); +QUERY: INSERT INTO FLOAT8_TBL(f1) VALUES ('-34.84'); +QUERY: INSERT INTO FLOAT8_TBL(f1) VALUES ('1.2345678901234e+200'); +QUERY: INSERT INTO FLOAT8_TBL(f1) VALUES ('1.2345678901234e-200'); +QUERY: SELECT '' AS five, FLOAT8_TBL.*; +five|f1 +----+-------------------- + |0 + |1004.3 + |-34.84 + |1.2345678901234e+200 + |1.2345678901234e-200 +(5 rows) + +QUERY: SELECT '' AS four, f.* FROM FLOAT8_TBL f WHERE f.f1 <> '1004.3'; +four|f1 +----+-------------------- + |0 + |-34.84 + |1.2345678901234e+200 + |1.2345678901234e-200 +(4 rows) + +QUERY: SELECT '' AS one, f.* FROM FLOAT8_TBL f WHERE f.f1 = '1004.3'; +one| f1 +---+------ + |1004.3 +(1 row) + +QUERY: SELECT '' AS three, f.* FROM FLOAT8_TBL f WHERE '1004.3' > f.f1; +three| f1 +-----+-------------------- + | 0 + | -34.84 + |1.2345678901234e-200 +(3 rows) + +QUERY: SELECT '' AS three, f.* FROM FLOAT8_TBL f WHERE f.f1 < '1004.3'; +three| f1 +-----+-------------------- + | 0 + | -34.84 + |1.2345678901234e-200 +(3 rows) + +QUERY: SELECT '' AS four, f.* FROM FLOAT8_TBL f WHERE '1004.3' >= f.f1; +four| f1 +----+-------------------- + | 0 + | 1004.3 + | -34.84 + |1.2345678901234e-200 +(4 rows) + +QUERY: SELECT '' AS four, f.* FROM FLOAT8_TBL f WHERE f.f1 <= '1004.3'; +four| f1 +----+-------------------- + | 0 + | 1004.3 + | -34.84 + |1.2345678901234e-200 +(4 rows) + +QUERY: SELECT '' AS three, f.f1, f.f1 * '-10' AS x + FROM FLOAT8_TBL f + WHERE f.f1 > '0.0'; +three|f1 |x +-----+--------------------+--------------------- + |1004.3 |-10043 + |1.2345678901234e+200|-1.2345678901234e+201 + |1.2345678901234e-200|-1.2345678901234e-199 +(3 rows) + +QUERY: SELECT '' AS three, f.f1, f.f1 + '-10' AS x + FROM FLOAT8_TBL f + WHERE f.f1 > '0.0'; +three|f1 |x +-----+--------------------+-------------------- + |1004.3 |994.3 + |1.2345678901234e+200|1.2345678901234e+200 + |1.2345678901234e-200|-10 +(3 rows) + +QUERY: SELECT '' AS three, f.f1, f.f1 / '-10' AS x + FROM FLOAT8_TBL f + WHERE f.f1 > '0.0'; +three|f1 |x +-----+--------------------+--------------------- + |1004.3 |-100.43 + |1.2345678901234e+200|-1.2345678901234e+199 + |1.2345678901234e-200|-1.2345678901234e-201 +(3 rows) + +QUERY: SELECT '' AS three, f.f1, f.f1 - '-10' AS x + FROM FLOAT8_TBL f + WHERE f.f1 > '0.0'; +three|f1 |x +-----+--------------------+-------------------- + |1004.3 |1014.3 + |1.2345678901234e+200|1.2345678901234e+200 + |1.2345678901234e-200|10 +(3 rows) + +QUERY: SELECT '' AS one, f.f1 ^ '2.0' AS square_f1 + FROM FLOAT8_TBL f where f.f1 = '1004.3'; +one| square_f1 +---+---------- + |1008618.49 +(1 row) + +QUERY: SELECT '' AS five, f.f1, @f.f1 AS abs_f1 + FROM FLOAT8_TBL f; +five|f1 |abs_f1 +----+--------------------+-------------------- + |0 |0 + |1004.3 |1004.3 + |-34.84 |34.84 + |1.2345678901234e+200|1.2345678901234e+200 + |1.2345678901234e-200|1.2345678901234e-200 +(5 rows) + +QUERY: SELECT '' AS five, f.f1, %f.f1 AS trunc_f1 + FROM FLOAT8_TBL f; +five|f1 |trunc_f1 +----+--------------------+-------------------- + |0 |0 + |1004.3 |1004 + |-34.84 |-34 + |1.2345678901234e+200|1.2345678901234e+200 + |1.2345678901234e-200|0 +(5 rows) + +QUERY: SELECT '' AS five, f.f1, f.f1 % AS round_f1 + FROM FLOAT8_TBL f; +five|f1 |round_f1 +----+--------------------+-------------------- + |0 |0 + |1004.3 |1004 + |-34.84 |-35 + |1.2345678901234e+200|1.2345678901234e+200 + |1.2345678901234e-200|0 +(5 rows) + +QUERY: SELECT '' AS three, f.f1, |/f.f1 AS sqrt_f1 + FROM FLOAT8_TBL f + WHERE f.f1 > '0.0'; +three|f1 |sqrt_f1 +-----+--------------------+--------------------- + |1004.3 |31.6906926399535 + |1.2345678901234e+200|1.11111110611109e+100 + |1.2345678901234e-200|1.11111110611109e-100 +(3 rows) + +QUERY: SELECT '' AS three, f.f1, : ( ; f.f1) AS exp_ln_f1 + FROM FLOAT8_TBL f + WHERE f.f1 > '0.0'; +three|f1 |exp_ln_f1 +-----+--------------------+--------------------- + |1004.3 |1004.3 + |1.2345678901234e+200|1.23456789012338e+200 + |1.2345678901234e-200|1.23456789012339e-200 +(3 rows) + +QUERY: SELECT '' AS five, f.f1, ||/f.f1 AS cbrt_f1 FROM FLOAT8_TBL f; +five|f1 |cbrt_f1 +----+--------------------+-------------------- + |0 |0 + |1004.3 |10.014312837827 + |-34.84 |-3.26607421344208 + |1.2345678901234e+200|4.97933859234765e+66 + |1.2345678901234e-200|2.3112042409018e-67 +(5 rows) + +QUERY: SELECT '' AS five, FLOAT8_TBL.*; +five|f1 +----+-------------------- + |0 + |1004.3 + |-34.84 + |1.2345678901234e+200 + |1.2345678901234e-200 +(5 rows) + +QUERY: UPDATE FLOAT8_TBL + SET f1 = FLOAT8_TBL.f1 * '-1' + WHERE FLOAT8_TBL.f1 > '0.0'; +QUERY: SELECT '' AS bad, f.f1 * '1e200' from FLOAT8_TBL f; +ERROR: floating point exception! The last floating point operation either exceeded legal ranges or was a divide by zero +QUERY: SELECT '' AS bad, f.f1 ^ '1e200' from FLOAT8_TBL f; +ERROR: pow() result is out of range +QUERY: SELECT '' AS bad, (; (f.f1)) from FLOAT8_TBL f where f.f1 = '0.0' ; +ERROR: can't take log of zero +QUERY: SELECT '' AS bad, (; (f.f1)) from FLOAT8_TBL f where f.f1 < '0.0' ; +ERROR: can't take log of a negative number +QUERY: SELECT '' AS bad, : (f.f1) from FLOAT8_TBL f; +ERROR: exp() result is out of range +QUERY: SELECT '' AS bad, f.f1 / '0.0' from FLOAT8_TBL f; +ERROR: float8div: divide by zero error +QUERY: SELECT '' AS five, FLOAT8_TBL.*; +five|f1 +----+--------------------- + |0 + |-34.84 + |-1004.3 + |-1.2345678901234e+200 + |-1.2345678901234e-200 +(5 rows) + +QUERY: INSERT INTO FLOAT8_TBL(f1) VALUES ('10e400'); +ERROR: Bad float8 input format '10e400' +QUERY: INSERT INTO FLOAT8_TBL(f1) VALUES ('-10e400'); +ERROR: Bad float8 input format '-10e400' +QUERY: INSERT INTO FLOAT8_TBL(f1) VALUES ('10e-400'); +ERROR: Bad float8 input format '10e-400' +QUERY: INSERT INTO FLOAT8_TBL(f1) VALUES ('-10e-400'); +ERROR: Bad float8 input format '-10e-400' +QUERY: DELETE FROM FLOAT8_TBL; +QUERY: INSERT INTO FLOAT8_TBL(f1) VALUES ('0.0'); +QUERY: INSERT INTO FLOAT8_TBL(f1) VALUES ('-34.84'); +QUERY: INSERT INTO FLOAT8_TBL(f1) VALUES ('-1004.30'); +QUERY: INSERT INTO FLOAT8_TBL(f1) VALUES ('-1.2345678901234e+200'); +QUERY: INSERT INTO FLOAT8_TBL(f1) VALUES ('-1.2345678901234e-200'); +QUERY: SELECT '' AS five, FLOAT8_TBL.*; +five|f1 +----+--------------------- + |0 + |-34.84 + |-1004.3 + |-1.2345678901234e+200 + |-1.2345678901234e-200 +(5 rows) + -- cgit v1.2.1