1
- /* $PostgreSQL: pgsql/src/interfaces/ecpg/ecpglib/execute.c,v 1.90 2010/01/29 15:57:01 meskes Exp $ */
1
+ /* $PostgreSQL: pgsql/src/interfaces/ecpg/ecpglib/execute.c,v 1.91 2010/02/02 16:09:11 meskes Exp $ */
2
2
3
3
/*
4
4
* The aim is to get a simpler inteface to the database routines.
17
17
#include "postgres_fe.h"
18
18
19
19
#include <locale.h>
20
+ #include <math.h>
20
21
21
22
#include "pg_type.h"
22
23
@@ -463,6 +464,38 @@ ecpg_store_result(const PGresult *results, int act_field,
463
464
return status ;
464
465
}
465
466
467
+ static void
468
+ sprintf_double_value (char * ptr , double value , const char * delim )
469
+ {
470
+ if (isinf (value ))
471
+ {
472
+ if (value < 0 )
473
+ sprintf (ptr , "%s%s" , "-Infinity" , delim );
474
+ else
475
+ sprintf (ptr , "%s%s" , "Infinity" , delim );
476
+ }
477
+ else if (isnan (value ))
478
+ sprintf (ptr , "%s%s" , "NaN" , delim );
479
+ else
480
+ sprintf (ptr , "%.14g%s" , value , delim );
481
+ }
482
+
483
+ static void
484
+ sprintf_float_value (char * ptr , float value , const char * delim )
485
+ {
486
+ if (isinf (value ))
487
+ {
488
+ if (value < 0 )
489
+ sprintf (ptr , "%s%s" , "-Infinity" , delim );
490
+ else
491
+ sprintf (ptr , "%s%s" , "Infinity" , delim );
492
+ }
493
+ else if (isnan (value ))
494
+ sprintf (ptr , "%s%s" , "NaN" , delim );
495
+ else
496
+ sprintf (ptr , "%.14g%s" , value , delim );
497
+ }
498
+
466
499
bool
467
500
ecpg_store_input (const int lineno , const bool force_indicator , const struct variable * var ,
468
501
char * * tobeinserted_p , bool quote )
@@ -693,12 +726,12 @@ ecpg_store_input(const int lineno, const bool force_indicator, const struct vari
693
726
strcpy (mallocedval , "array [" );
694
727
695
728
for (element = 0 ; element < asize ; element ++ )
696
- sprintf (mallocedval + strlen (mallocedval ), "%.14g," , ((float * ) var -> value )[element ]);
729
+ sprintf_float_value (mallocedval + strlen (mallocedval ), ((float * ) var -> value )[element ], "," );
697
730
698
731
strcpy (mallocedval + strlen (mallocedval ) - 1 , "]" );
699
732
}
700
733
else
701
- sprintf (mallocedval , "%.14g" , * ((float * ) var -> value ));
734
+ sprintf_float_value (mallocedval , * ((float * ) var -> value ), "" );
702
735
703
736
* tobeinserted_p = mallocedval ;
704
737
break ;
@@ -712,12 +745,12 @@ ecpg_store_input(const int lineno, const bool force_indicator, const struct vari
712
745
strcpy (mallocedval , "array [" );
713
746
714
747
for (element = 0 ; element < asize ; element ++ )
715
- sprintf (mallocedval + strlen (mallocedval ), "%.14g," , ((double * ) var -> value )[element ]);
748
+ sprintf_double_value (mallocedval + strlen (mallocedval ), ((double * ) var -> value )[element ], "," );
716
749
717
750
strcpy (mallocedval + strlen (mallocedval ) - 1 , "]" );
718
751
}
719
752
else
720
- sprintf (mallocedval , "%.14g" , * ((double * ) var -> value ));
753
+ sprintf_double_value (mallocedval , * ((double * ) var -> value ), "" );
721
754
722
755
* tobeinserted_p = mallocedval ;
723
756
break ;
0 commit comments