OSDN Git Service

Do not check nan values for infinity. Some system are not able to handle this.
authorMichael Meskes <meskes@postgresql.org>
Tue, 16 Feb 2010 18:41:23 +0000 (18:41 +0000)
committerMichael Meskes <meskes@postgresql.org>
Tue, 16 Feb 2010 18:41:23 +0000 (18:41 +0000)
By Zoltán Böszörményi

src/interfaces/ecpg/ecpglib/execute.c
src/interfaces/ecpg/test/expected/pgtypeslib-nan_test.c
src/interfaces/ecpg/test/pgtypeslib/nan_test.pgc

index d0aef8a..f65ede5 100644 (file)
@@ -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);
 }
index 6b15abe..d8c654f 100644 (file)
@@ -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), 
index 7aa99b0..a136867 100644 (file)
@@ -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);