From: Michael Meskes Date: Tue, 16 Feb 2010 18:41:23 +0000 (+0000) Subject: Do not check nan values for infinity. Some system are not able to handle this. X-Git-Tag: REL9_0_ALPHA4~41 X-Git-Url: https://granicus.if.org/sourcecode?a=commitdiff_plain;h=492eaefb90b9e60b608a1a4b2e3e68ce7c6c7c69;p=postgresql Do not check nan values for infinity. Some system are not able to handle this. By Zoltán Böszörményi --- diff --git a/src/interfaces/ecpg/ecpglib/execute.c b/src/interfaces/ecpg/ecpglib/execute.c index d0aef8a5c6..f65ede5836 100644 --- a/src/interfaces/ecpg/ecpglib/execute.c +++ b/src/interfaces/ecpg/ecpglib/execute.c @@ -1,4 +1,4 @@ -/* $PostgreSQL: pgsql/src/interfaces/ecpg/ecpglib/execute.c,v 1.93 2010/02/04 09:41:34 meskes Exp $ */ +/* $PostgreSQL: pgsql/src/interfaces/ecpg/ecpglib/execute.c,v 1.94 2010/02/16 18:41:23 meskes Exp $ */ /* * The aim is to get a simpler inteface to the database routines. @@ -468,15 +468,15 @@ ecpg_store_result(const PGresult *results, int act_field, static void sprintf_double_value(char *ptr, double value, const char *delim) { - if (isinf(value)) + if (isnan(value)) + sprintf(ptr, "%s%s", "NaN", delim); + else if (isinf(value)) { if (value < 0) sprintf(ptr, "%s%s", "-Infinity", delim); else sprintf(ptr, "%s%s", "Infinity", delim); } - else if (isnan(value)) - sprintf(ptr, "%s%s", "NaN", delim); else sprintf(ptr, "%.14g%s", value, delim); } @@ -484,15 +484,15 @@ sprintf_double_value(char *ptr, double value, const char *delim) static void sprintf_float_value(char *ptr, float value, const char *delim) { - if (isinf(value)) + if (isnan(value)) + sprintf(ptr, "%s%s", "NaN", delim); + else if (isinf(value)) { if (value < 0) sprintf(ptr, "%s%s", "-Infinity", delim); else sprintf(ptr, "%s%s", "Infinity", delim); } - else if (isnan(value)) - sprintf(ptr, "%s%s", "NaN", delim); else sprintf(ptr, "%.14g%s", value, delim); } diff --git a/src/interfaces/ecpg/test/expected/pgtypeslib-nan_test.c b/src/interfaces/ecpg/test/expected/pgtypeslib-nan_test.c index 6b15abe8f1..d8c654f143 100644 --- a/src/interfaces/ecpg/test/expected/pgtypeslib-nan_test.c +++ b/src/interfaces/ecpg/test/expected/pgtypeslib-nan_test.c @@ -104,10 +104,10 @@ if (sqlca.sqlcode < 0) sqlprint ( );} if (sqlca.sqlcode) break; - if (isinf(d)) - printf("%d %sInf '%s'\n", id, (d < 0 ? "-" : "+"), val); if (isnan(d)) printf("%d NaN '%s'\n", id, val); + else if (isinf(d)) + printf("%d %sInf '%s'\n", id, (d < 0 ? "-" : "+"), val); { ECPGdo(__LINE__, 0, 1, NULL, 0, ECPGst_normal, "insert into nantest1 ( id , d ) values ( $1 + 3 , $2 )", ECPGt_int,&(id),(long)1,(long)1,sizeof(int), diff --git a/src/interfaces/ecpg/test/pgtypeslib/nan_test.pgc b/src/interfaces/ecpg/test/pgtypeslib/nan_test.pgc index 7aa99b00d1..a136867bbd 100644 --- a/src/interfaces/ecpg/test/pgtypeslib/nan_test.pgc +++ b/src/interfaces/ecpg/test/pgtypeslib/nan_test.pgc @@ -37,10 +37,10 @@ main(void) exec sql fetch from cur into :id, :d, :val; if (sqlca.sqlcode) break; - if (isinf(d)) - printf("%d %sInf '%s'\n", id, (d < 0 ? "-" : "+"), val); if (isnan(d)) printf("%d NaN '%s'\n", id, val); + else if (isinf(d)) + printf("%d %sInf '%s'\n", id, (d < 0 ? "-" : "+"), val); exec sql insert into nantest1 (id, d) values (:id + 3, :d); exec sql insert into nantest1 (id, d) values (:id + 6, :val);