aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--src/backend/utils/adt/formatting.c65
-rw-r--r--src/test/regress/expected/timestamp.out42
-rw-r--r--src/test/regress/expected/timestamptz.out42
3 files changed, 68 insertions, 81 deletions
diff --git a/src/backend/utils/adt/formatting.c b/src/backend/utils/adt/formatting.c
index cc4f8137db0..e83a1d90141 100644
--- a/src/backend/utils/adt/formatting.c
+++ b/src/backend/utils/adt/formatting.c
@@ -1,7 +1,7 @@
/* -----------------------------------------------------------------------
* formatting.c
*
- * $PostgreSQL: pgsql/src/backend/utils/adt/formatting.c,v 1.169 2010/03/03 22:28:42 momjian Exp $
+ * $PostgreSQL: pgsql/src/backend/utils/adt/formatting.c,v 1.170 2010/04/07 21:41:53 tgl Exp $
*
*
* Portions Copyright (c) 1999-2010, PostgreSQL Global Development Group
@@ -2044,7 +2044,6 @@ DCH_to_char(FormatNode *node, bool is_interval, TmToChar *in, char *out)
FormatNode *n;
char *s;
struct pg_tm *tm = &in->tm;
- char buff[DCH_CACHE_SIZE];
int i;
/* cache localized days and months */
@@ -2394,67 +2393,55 @@ DCH_to_char(FormatNode *node, bool is_interval, TmToChar *in, char *out)
break;
case DCH_YYYY:
case DCH_IYYY:
- if (tm->tm_year <= 9999 && tm->tm_year >= -9998)
- sprintf(s, "%0*d",
- S_FM(n->suffix) ? 0 : 4,
- n->key->id == DCH_YYYY ?
- ADJUST_YEAR(tm->tm_year, is_interval) :
- ADJUST_YEAR(date2isoyear(
- tm->tm_year,
- tm->tm_mon,
- tm->tm_mday), is_interval));
- else
- sprintf(s, "%d",
- n->key->id == DCH_YYYY ?
- ADJUST_YEAR(tm->tm_year, is_interval) :
- ADJUST_YEAR(date2isoyear(
- tm->tm_year,
- tm->tm_mon,
- tm->tm_mday), is_interval));
+ sprintf(s, "%0*d",
+ S_FM(n->suffix) ? 0 : 4,
+ (n->key->id == DCH_YYYY ?
+ ADJUST_YEAR(tm->tm_year, is_interval) :
+ ADJUST_YEAR(date2isoyear(tm->tm_year,
+ tm->tm_mon,
+ tm->tm_mday),
+ is_interval)));
if (S_THth(n->suffix))
str_numth(s, s, S_TH_TYPE(n->suffix));
s += strlen(s);
break;
case DCH_YYY:
case DCH_IYY:
- snprintf(buff, sizeof(buff), "%0*d",
- S_FM(n->suffix) ? 0 : 3,
- n->key->id == DCH_YYY ?
+ sprintf(s, "%0*d",
+ S_FM(n->suffix) ? 0 : 3,
+ (n->key->id == DCH_YYY ?
ADJUST_YEAR(tm->tm_year, is_interval) :
ADJUST_YEAR(date2isoyear(tm->tm_year,
- tm->tm_mon, tm->tm_mday),
- is_interval));
- i = strlen(buff);
- strcpy(s, buff + (i > 3 ? i - 3 : 0));
+ tm->tm_mon,
+ tm->tm_mday),
+ is_interval)) % 1000);
if (S_THth(n->suffix))
str_numth(s, s, S_TH_TYPE(n->suffix));
s += strlen(s);
break;
case DCH_YY:
case DCH_IY:
- snprintf(buff, sizeof(buff), "%0*d",
- S_FM(n->suffix) ? 0 : 2,
- n->key->id == DCH_YY ?
+ sprintf(s, "%0*d",
+ S_FM(n->suffix) ? 0 : 2,
+ (n->key->id == DCH_YY ?
ADJUST_YEAR(tm->tm_year, is_interval) :
ADJUST_YEAR(date2isoyear(tm->tm_year,
- tm->tm_mon, tm->tm_mday),
- is_interval));
- i = strlen(buff);
- strcpy(s, buff + (i > 2 ? i - 2 : 0));
+ tm->tm_mon,
+ tm->tm_mday),
+ is_interval)) % 100);
if (S_THth(n->suffix))
str_numth(s, s, S_TH_TYPE(n->suffix));
s += strlen(s);
break;
case DCH_Y:
case DCH_I:
- snprintf(buff, sizeof(buff), "%1d",
- n->key->id == DCH_Y ?
+ sprintf(s, "%1d",
+ (n->key->id == DCH_Y ?
ADJUST_YEAR(tm->tm_year, is_interval) :
ADJUST_YEAR(date2isoyear(tm->tm_year,
- tm->tm_mon, tm->tm_mday),
- is_interval));
- i = strlen(buff);
- strcpy(s, buff + (i > 1 ? i - 1 : 0));
+ tm->tm_mon,
+ tm->tm_mday),
+ is_interval)) % 10);
if (S_THth(n->suffix))
str_numth(s, s, S_TH_TYPE(n->suffix));
s += strlen(s);
diff --git a/src/test/regress/expected/timestamp.out b/src/test/regress/expected/timestamp.out
index 0062f8f3807..6def970d800 100644
--- a/src/test/regress/expected/timestamp.out
+++ b/src/test/regress/expected/timestamp.out
@@ -1037,12 +1037,12 @@ SELECT '' AS to_char_4, to_char(d1, 'FMY,YYY FMYYYY FMYYY FMYY FMY FMCC FMQ FMMM
| 1,997 1997 997 97 7 20 1 2 6 41 10 2 2450490
| 1,997 1997 997 97 7 20 1 2 6 41 10 2 2450490
| 1,997 1997 997 97 7 20 2 6 23 161 10 3 2450610
- | 2,001 2001 001 01 1 21 3 9 38 265 22 7 2452175
- | 2,000 2000 000 00 0 20 1 3 11 75 15 4 2451619
- | 2,000 2000 000 00 0 20 1 3 11 75 15 4 2451619
- | 2,000 2000 000 00 0 20 1 3 11 75 15 4 2451619
- | 2,000 2000 000 00 0 20 1 3 11 75 15 4 2451619
- | 2,000 2000 000 00 0 20 1 3 11 75 15 4 2451619
+ | 2,001 2001 1 1 1 21 3 9 38 265 22 7 2452175
+ | 2,000 2000 0 0 0 20 1 3 11 75 15 4 2451619
+ | 2,000 2000 0 0 0 20 1 3 11 75 15 4 2451619
+ | 2,000 2000 0 0 0 20 1 3 11 75 15 4 2451619
+ | 2,000 2000 0 0 0 20 1 3 11 75 15 4 2451619
+ | 2,000 2000 0 0 0 20 1 3 11 75 15 4 2451619
| 1,997 1997 997 97 7 20 1 2 6 41 10 2 2450490
| 1,997 1997 997 97 7 20 1 2 6 41 10 2 2450490
| 1,997 1997 997 97 7 20 1 2 6 41 10 2 2450490
@@ -1066,12 +1066,12 @@ SELECT '' AS to_char_4, to_char(d1, 'FMY,YYY FMYYYY FMYYY FMYY FMY FMCC FMQ FMMM
| 0,097 97 97 97 7 1 1 2 7 47 16 3 1686042
| 0,097 97 97 97 7 1 1 2 7 47 16 7 1756536
| 0,597 597 597 97 7 6 1 2 7 47 16 5 1939157
- | 1,097 1097 097 97 7 11 1 2 7 47 16 3 2121778
+ | 1,097 1097 97 97 7 11 1 2 7 47 16 3 2121778
| 1,697 1697 697 97 7 17 1 2 7 47 16 7 2340924
| 1,797 1797 797 97 7 18 1 2 7 47 16 5 2377448
| 1,897 1897 897 97 7 19 1 2 7 47 16 3 2413972
| 1,997 1997 997 97 7 20 1 2 7 47 16 1 2450496
- | 2,097 2097 097 97 7 21 1 2 7 47 16 7 2487021
+ | 2,097 2097 97 97 7 21 1 2 7 47 16 7 2487021
| 1,996 1996 996 96 6 20 1 2 9 59 28 4 2450142
| 1,996 1996 996 96 6 20 1 2 9 60 29 5 2450143
| 1,996 1996 996 96 6 20 1 3 9 61 1 6 2450144
@@ -1083,9 +1083,9 @@ SELECT '' AS to_char_4, to_char(d1, 'FMY,YYY FMYYYY FMYYY FMYY FMY FMCC FMQ FMMM
| 1,997 1997 997 97 7 20 4 12 52 364 30 3 2450813
| 1,997 1997 997 97 7 20 4 12 53 365 31 4 2450814
| 1,999 1999 999 99 9 20 4 12 53 365 31 6 2451544
- | 2,000 2000 000 00 0 20 1 1 1 1 1 7 2451545
- | 2,000 2000 000 00 0 20 4 12 53 366 31 1 2451910
- | 2,001 2001 001 01 1 21 1 1 1 1 1 2 2451911
+ | 2,000 2000 0 0 0 20 1 1 1 1 1 7 2451545
+ | 2,000 2000 0 0 0 20 4 12 53 366 31 1 2451910
+ | 2,001 2001 1 1 1 21 1 1 1 1 1 2 2451911
(65 rows)
SELECT '' AS to_char_5, to_char(d1, 'HH HH12 HH24 MI SS SSSS')
@@ -1535,12 +1535,12 @@ SELECT '' AS to_char_11, to_char(d1, 'FMIYYY FMIYY FMIY FMI FMIW FMIDDD FMID')
| 1997 997 97 7 7 43 1
| 1997 997 97 7 7 43 1
| 1997 997 97 7 24 163 2
- | 2001 001 01 1 38 265 6
- | 2000 000 00 0 11 73 3
- | 2000 000 00 0 11 73 3
- | 2000 000 00 0 11 73 3
- | 2000 000 00 0 11 73 3
- | 2000 000 00 0 11 73 3
+ | 2001 1 1 1 38 265 6
+ | 2000 0 0 0 11 73 3
+ | 2000 0 0 0 11 73 3
+ | 2000 0 0 0 11 73 3
+ | 2000 0 0 0 11 73 3
+ | 2000 0 0 0 11 73 3
| 1997 997 97 7 7 43 1
| 1997 997 97 7 7 43 1
| 1997 997 97 7 7 43 1
@@ -1564,12 +1564,12 @@ SELECT '' AS to_char_11, to_char(d1, 'FMIYYY FMIYY FMIY FMI FMIW FMIDDD FMID')
| 97 97 97 7 7 44 2
| 97 97 97 7 7 48 6
| 597 597 97 7 7 46 4
- | 1097 097 97 7 7 44 2
+ | 1097 97 97 7 7 44 2
| 1697 697 97 7 7 48 6
| 1797 797 97 7 7 46 4
| 1897 897 97 7 7 44 2
| 1997 997 97 7 7 49 7
- | 2097 097 97 7 7 48 6
+ | 2097 97 97 7 7 48 6
| 1996 996 96 6 9 59 3
| 1996 996 96 6 9 60 4
| 1996 996 96 6 9 61 5
@@ -1582,7 +1582,7 @@ SELECT '' AS to_char_11, to_char(d1, 'FMIYYY FMIYY FMIY FMI FMIW FMIDDD FMID')
| 1998 998 98 8 1 3 3
| 1999 999 99 9 52 362 5
| 1999 999 99 9 52 363 6
- | 2000 000 00 0 52 364 7
- | 2001 001 01 1 1 1 1
+ | 2000 0 0 0 52 364 7
+ | 2001 1 1 1 1 1 1
(65 rows)
diff --git a/src/test/regress/expected/timestamptz.out b/src/test/regress/expected/timestamptz.out
index 1096f28e6bb..47e33947922 100644
--- a/src/test/regress/expected/timestamptz.out
+++ b/src/test/regress/expected/timestamptz.out
@@ -1121,12 +1121,12 @@ SELECT '' AS to_char_4, to_char(d1, 'FMY,YYY FMYYYY FMYYY FMYY FMY FMCC FMQ FMMM
| 1,997 1997 997 97 7 20 1 2 6 41 10 2 2450490
| 1,997 1997 997 97 7 20 1 2 6 41 10 2 2450490
| 1,997 1997 997 97 7 20 2 6 23 161 10 3 2450610
- | 2,001 2001 001 01 1 21 3 9 38 265 22 7 2452175
- | 2,000 2000 000 00 0 20 1 3 11 75 15 4 2451619
- | 2,000 2000 000 00 0 20 1 3 11 75 15 4 2451619
- | 2,000 2000 000 00 0 20 1 3 11 75 15 4 2451619
- | 2,000 2000 000 00 0 20 1 3 11 75 15 4 2451619
- | 2,000 2000 000 00 0 20 1 3 11 75 15 4 2451619
+ | 2,001 2001 1 1 1 21 3 9 38 265 22 7 2452175
+ | 2,000 2000 0 0 0 20 1 3 11 75 15 4 2451619
+ | 2,000 2000 0 0 0 20 1 3 11 75 15 4 2451619
+ | 2,000 2000 0 0 0 20 1 3 11 75 15 4 2451619
+ | 2,000 2000 0 0 0 20 1 3 11 75 15 4 2451619
+ | 2,000 2000 0 0 0 20 1 3 11 75 15 4 2451619
| 1,997 1997 997 97 7 20 1 2 6 41 10 2 2450490
| 1,997 1997 997 97 7 20 1 2 6 41 10 2 2450490
| 1,997 1997 997 97 7 20 1 2 6 41 10 2 2450490
@@ -1151,12 +1151,12 @@ SELECT '' AS to_char_4, to_char(d1, 'FMY,YYY FMYYYY FMYYY FMYY FMY FMCC FMQ FMMM
| 0,097 97 97 97 7 1 1 2 7 47 16 3 1686042
| 0,097 97 97 97 7 1 1 2 7 47 16 7 1756536
| 0,597 597 597 97 7 6 1 2 7 47 16 5 1939157
- | 1,097 1097 097 97 7 11 1 2 7 47 16 3 2121778
+ | 1,097 1097 97 97 7 11 1 2 7 47 16 3 2121778
| 1,697 1697 697 97 7 17 1 2 7 47 16 7 2340924
| 1,797 1797 797 97 7 18 1 2 7 47 16 5 2377448
| 1,897 1897 897 97 7 19 1 2 7 47 16 3 2413972
| 1,997 1997 997 97 7 20 1 2 7 47 16 1 2450496
- | 2,097 2097 097 97 7 21 1 2 7 47 16 7 2487021
+ | 2,097 2097 97 97 7 21 1 2 7 47 16 7 2487021
| 1,996 1996 996 96 6 20 1 2 9 59 28 4 2450142
| 1,996 1996 996 96 6 20 1 2 9 60 29 5 2450143
| 1,996 1996 996 96 6 20 1 3 9 61 1 6 2450144
@@ -1168,9 +1168,9 @@ SELECT '' AS to_char_4, to_char(d1, 'FMY,YYY FMYYYY FMYYY FMYY FMY FMCC FMQ FMMM
| 1,997 1997 997 97 7 20 4 12 52 364 30 3 2450813
| 1,997 1997 997 97 7 20 4 12 53 365 31 4 2450814
| 1,999 1999 999 99 9 20 4 12 53 365 31 6 2451544
- | 2,000 2000 000 00 0 20 1 1 1 1 1 7 2451545
- | 2,000 2000 000 00 0 20 4 12 53 366 31 1 2451910
- | 2,001 2001 001 01 1 21 1 1 1 1 1 2 2451911
+ | 2,000 2000 0 0 0 20 1 1 1 1 1 7 2451545
+ | 2,000 2000 0 0 0 20 4 12 53 366 31 1 2451910
+ | 2,001 2001 1 1 1 21 1 1 1 1 1 2 2451911
(66 rows)
@@ -1628,12 +1628,12 @@ SELECT '' AS to_char_11, to_char(d1, 'FMIYYY FMIYY FMIY FMI FMIW FMIDDD FMID')
| 1997 997 97 7 7 43 1
| 1997 997 97 7 7 43 1
| 1997 997 97 7 24 163 2
- | 2001 001 01 1 38 265 6
- | 2000 000 00 0 11 73 3
- | 2000 000 00 0 11 73 3
- | 2000 000 00 0 11 73 3
- | 2000 000 00 0 11 73 3
- | 2000 000 00 0 11 73 3
+ | 2001 1 1 1 38 265 6
+ | 2000 0 0 0 11 73 3
+ | 2000 0 0 0 11 73 3
+ | 2000 0 0 0 11 73 3
+ | 2000 0 0 0 11 73 3
+ | 2000 0 0 0 11 73 3
| 1997 997 97 7 7 43 1
| 1997 997 97 7 7 43 1
| 1997 997 97 7 7 43 1
@@ -1658,12 +1658,12 @@ SELECT '' AS to_char_11, to_char(d1, 'FMIYYY FMIYY FMIY FMI FMIW FMIDDD FMID')
| 97 97 97 7 7 44 2
| 97 97 97 7 7 48 6
| 597 597 97 7 7 46 4
- | 1097 097 97 7 7 44 2
+ | 1097 97 97 7 7 44 2
| 1697 697 97 7 7 48 6
| 1797 797 97 7 7 46 4
| 1897 897 97 7 7 44 2
| 1997 997 97 7 7 49 7
- | 2097 097 97 7 7 48 6
+ | 2097 97 97 7 7 48 6
| 1996 996 96 6 9 59 3
| 1996 996 96 6 9 60 4
| 1996 996 96 6 9 61 5
@@ -1676,7 +1676,7 @@ SELECT '' AS to_char_11, to_char(d1, 'FMIYYY FMIYY FMIY FMI FMIW FMIDDD FMID')
| 1998 998 98 8 1 3 3
| 1999 999 99 9 52 362 5
| 1999 999 99 9 52 363 6
- | 2000 000 00 0 52 364 7
- | 2001 001 01 1 1 1 1
+ | 2000 0 0 0 52 364 7
+ | 2001 1 1 1 1 1 1
(66 rows)