v1-fix_rm.diff
text/plain
Filename: v1-fix_rm.diff
Type: text/plain
Part: 0
Patch
Format: unified
Series: patch v1
| File | + | − |
|---|---|---|
| src/backend/utils/adt/formatting.c | 2 | 2 |
| src/test/regress/expected/timestamp.out | 12 | 0 |
| src/test/regress/sql/timestamp.sql | 4 | 0 |
diff --git a/src/backend/utils/adt/formatting.c b/src/backend/utils/adt/formatting.c
index 783c7b5e7a..9e64eec7da 100644
--- a/src/backend/utils/adt/formatting.c
+++ b/src/backend/utils/adt/formatting.c
@@ -3210,14 +3210,14 @@ DCH_to_char(FormatNode *node, bool is_interval, TmToChar *in, char *out, Oid col
if (!tm->tm_mon)
break;
sprintf(s, "%*s", S_FM(n->suffix) ? 0 : -4,
- rm_months_upper[MONTHS_PER_YEAR - tm->tm_mon]);
+ rm_months_upper[MONTHS_PER_YEAR - Abs(tm->tm_mon)]);
s += strlen(s);
break;
case DCH_rm:
if (!tm->tm_mon)
break;
sprintf(s, "%*s", S_FM(n->suffix) ? 0 : -4,
- rm_months_lower[MONTHS_PER_YEAR - tm->tm_mon]);
+ rm_months_lower[MONTHS_PER_YEAR - Abs(tm->tm_mon)]);
s += strlen(s);
break;
case DCH_W:
diff --git a/src/test/regress/expected/timestamp.out b/src/test/regress/expected/timestamp.out
index fff3cf08c1..2ef529dd28 100644
--- a/src/test/regress/expected/timestamp.out
+++ b/src/test/regress/expected/timestamp.out
@@ -1816,6 +1816,18 @@ SELECT to_char(d, 'FF1 FF2 FF3 FF4 FF5 FF6 ff1 ff2 ff3 ff4 ff5 ff6 MS US')
7 78 789 7890 78901 789012 7 78 789 7890 78901 789012 789 789012
(4 rows)
+SELECT to_char(interval '-3mon', 'rm');
+ to_char
+---------
+ iii
+(1 row)
+
+SELECT to_char(interval '-1year -10mon', 'RM');
+ to_char
+---------
+ X
+(1 row)
+
-- timestamp numeric fields constructor
SELECT make_timestamp(2014, 12, 28, 6, 30, 45.887);
make_timestamp
diff --git a/src/test/regress/sql/timestamp.sql b/src/test/regress/sql/timestamp.sql
index ed03d7c218..fddf553e2b 100644
--- a/src/test/regress/sql/timestamp.sql
+++ b/src/test/regress/sql/timestamp.sql
@@ -306,6 +306,10 @@ SELECT to_char(d, 'FF1 FF2 FF3 FF4 FF5 FF6 ff1 ff2 ff3 ff4 ff5 ff6 MS US')
('2018-11-02 12:34:56.78901234')
) d(d);
+SELECT to_char(interval '-3mon', 'rm');
+
+SELECT to_char(interval '-1year -10mon', 'RM');
+
-- timestamp numeric fields constructor
SELECT make_timestamp(2014, 12, 28, 6, 30, 45.887);
SELECT make_timestamp(-44, 3, 15, 12, 30, 15);