git.postgresql.org Git - postgresql.git/commitdiff

git projects / postgresql.git / commitdiff
? search:
summary | shortlog | log | commit | commitdiff | tree
raw | patch | inline | side by side (parent: 09cba66)
Fix cash_in() to behave properly in locales where frac_digits is zero,
2009年6月10日 16:31:32 +0000 (16:31 +0000)
2009年6月10日 16:31:32 +0000 (16:31 +0000)
eg Japan. Report and fix by Itagaki Takahiro. Also fix CASHDEBUG printout
format for branches with 64-bit money type, and some minor comment cleanup.

Back-patch to 7.4, because it's broken all the way back.


diff --git a/src/backend/utils/adt/cash.c b/src/backend/utils/adt/cash.c
index cd4fc6af092091bd44b790f3987150c3b3af1a11..73d55c5b54f6e0e23c20c3b02787d39ae91496a2 100644 (file)
--- a/src/backend/utils/adt/cash.c
+++ b/src/backend/utils/adt/cash.c
@@ -13,7 +13,7 @@
* this version handles 64 bit numbers and so can hold values up to
* 92,233,720,368,547,758ドル.07.
*
- * $PostgreSQL: pgsql/src/backend/utils/adt/cash.c,v 1.80 2008年06月09日 19:58:39 tgl Exp $
+ * $PostgreSQL: pgsql/src/backend/utils/adt/cash.c,v 1.81 2009年06月10日 16:31:32 tgl Exp $
*/
#include "postgres.h"
@@ -191,23 +191,21 @@ cash_in(PG_FUNCTION_ARGS)
for (;; s++)
{
- /* we look for digits as int8 as we have less */
+ /* we look for digits as long as we have found less */
/* than the required number of decimal places */
- if (isdigit((unsigned char) *s) && dec < fpoint)
+ if (isdigit((unsigned char) *s) && (!seen_dot || dec < fpoint))
{
- value = (value * 10) + *s - '0';
+ value = (value * 10) + (*s - '0');
if (seen_dot)
dec++;
-
}
/* decimal point? then start counting fractions... */
else if (*s == dsymbol && !seen_dot)
{
seen_dot = 1;
-
}
- /* not "thousands" separator? */
+ /* ignore if "thousands" separator, else we're done */
else if (*s != ssymbol)
{
/* round off */
@@ -236,7 +234,7 @@ cash_in(PG_FUNCTION_ARGS)
result = value * sgn;
#ifdef CASHDEBUG
- printf("cashin- result is %d\n", result);
+ printf("cashin- result is " INT64_FORMAT "\n", result);
#endif
PG_RETURN_CASH(result);
This is the main PostgreSQL git repository.
RSS Atom

AltStyle によって変換されたページ (->オリジナル) /