Movatterモバイル変換


[0]ホーム

URL:


Skip to content

Navigation Menu

Sign in
Appearance settings

Search code, repositories, users, issues, pull requests...

Provide feedback

We read every piece of feedback, and take your input very seriously.

Saved searches

Use saved searches to filter your results more quickly

Sign up
Appearance settings

Commitf2eba40

Browse files
committed
Fix is_digit labeling of to_timestamp's FFn format codes.
These format codes produce or consume strings of digits, so theyshould be labeled with is_digit = true, but they were not.This has effect in only one place, where is_next_separator()is checked to see if the preceding format code should slurp upall the available digits. Thus, with a format such as '...SSFF3'with remaining input '12345', the 'SS' code would consume allfive digits (and then complain about seconds being out of range)when it should eat only two digits.Per report from Nick Davies. This bug goes back tod589f94where the FFn codes were introduced, so back-patch to v13.Discussion:https://postgr.es/m/AM8PR08MB6356AC979252CFEA78B56678B6312@AM8PR08MB6356.eurprd08.prod.outlook.com
1 parentcd1c8b9 commitf2eba40

File tree

3 files changed

+25
-13
lines changed

3 files changed

+25
-13
lines changed

‎src/backend/utils/adt/formatting.c

Lines changed: 13 additions & 13 deletions
Original file line numberDiff line numberDiff line change
@@ -624,7 +624,7 @@ typedef enum
624624
DCH_Day,
625625
DCH_Dy,
626626
DCH_D,
627-
DCH_FF1,
627+
DCH_FF1,/* FFn codes must be consecutive */
628628
DCH_FF2,
629629
DCH_FF3,
630630
DCH_FF4,
@@ -787,12 +787,12 @@ static const KeyWord DCH_keywords[] = {
787787
{"Day",3,DCH_Day, false,FROM_CHAR_DATE_NONE},
788788
{"Dy",2,DCH_Dy, false,FROM_CHAR_DATE_NONE},
789789
{"D",1,DCH_D, true,FROM_CHAR_DATE_GREGORIAN},
790-
{"FF1",3,DCH_FF1,false,FROM_CHAR_DATE_NONE},/* F */
791-
{"FF2",3,DCH_FF2,false,FROM_CHAR_DATE_NONE},
792-
{"FF3",3,DCH_FF3,false,FROM_CHAR_DATE_NONE},
793-
{"FF4",3,DCH_FF4,false,FROM_CHAR_DATE_NONE},
794-
{"FF5",3,DCH_FF5,false,FROM_CHAR_DATE_NONE},
795-
{"FF6",3,DCH_FF6,false,FROM_CHAR_DATE_NONE},
790+
{"FF1",3,DCH_FF1,true,FROM_CHAR_DATE_NONE},/* F */
791+
{"FF2",3,DCH_FF2,true,FROM_CHAR_DATE_NONE},
792+
{"FF3",3,DCH_FF3,true,FROM_CHAR_DATE_NONE},
793+
{"FF4",3,DCH_FF4,true,FROM_CHAR_DATE_NONE},
794+
{"FF5",3,DCH_FF5,true,FROM_CHAR_DATE_NONE},
795+
{"FF6",3,DCH_FF6,true,FROM_CHAR_DATE_NONE},
796796
{"FX",2,DCH_FX, false,FROM_CHAR_DATE_NONE},
797797
{"HH24",4,DCH_HH24, true,FROM_CHAR_DATE_NONE},/* H */
798798
{"HH12",4,DCH_HH12, true,FROM_CHAR_DATE_NONE},
@@ -843,12 +843,12 @@ static const KeyWord DCH_keywords[] = {
843843
{"dd",2,DCH_DD, true,FROM_CHAR_DATE_GREGORIAN},
844844
{"dy",2,DCH_dy, false,FROM_CHAR_DATE_NONE},
845845
{"d",1,DCH_D, true,FROM_CHAR_DATE_GREGORIAN},
846-
{"ff1",3,DCH_FF1,false,FROM_CHAR_DATE_NONE},/* f */
847-
{"ff2",3,DCH_FF2,false,FROM_CHAR_DATE_NONE},
848-
{"ff3",3,DCH_FF3,false,FROM_CHAR_DATE_NONE},
849-
{"ff4",3,DCH_FF4,false,FROM_CHAR_DATE_NONE},
850-
{"ff5",3,DCH_FF5,false,FROM_CHAR_DATE_NONE},
851-
{"ff6",3,DCH_FF6,false,FROM_CHAR_DATE_NONE},
846+
{"ff1",3,DCH_FF1,true,FROM_CHAR_DATE_NONE},/* f */
847+
{"ff2",3,DCH_FF2,true,FROM_CHAR_DATE_NONE},
848+
{"ff3",3,DCH_FF3,true,FROM_CHAR_DATE_NONE},
849+
{"ff4",3,DCH_FF4,true,FROM_CHAR_DATE_NONE},
850+
{"ff5",3,DCH_FF5,true,FROM_CHAR_DATE_NONE},
851+
{"ff6",3,DCH_FF6,true,FROM_CHAR_DATE_NONE},
852852
{"fx",2,DCH_FX, false,FROM_CHAR_DATE_NONE},
853853
{"hh24",4,DCH_HH24, true,FROM_CHAR_DATE_NONE},/* h */
854854
{"hh12",4,DCH_HH12, true,FROM_CHAR_DATE_NONE},

‎src/test/regress/expected/horology.out

Lines changed: 11 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -2979,6 +2979,17 @@ SELECT i, to_timestamp('2018-11-02 12:34:56.123456', 'YYYY-MM-DD HH24:MI:SS.FF'
29792979

29802980
SELECT i, to_timestamp('2018-11-02 12:34:56.123456789', 'YYYY-MM-DD HH24:MI:SS.FF' || i) FROM generate_series(1, 6) i;
29812981
ERROR: date/time field value out of range: "2018-11-02 12:34:56.123456789"
2982+
SELECT i, to_timestamp('20181102123456123456', 'YYYYMMDDHH24MISSFF' || i) FROM generate_series(1, 6) i;
2983+
i | to_timestamp
2984+
---+-------------------------------------
2985+
1 | Fri Nov 02 12:34:56.1 2018 PDT
2986+
2 | Fri Nov 02 12:34:56.12 2018 PDT
2987+
3 | Fri Nov 02 12:34:56.123 2018 PDT
2988+
4 | Fri Nov 02 12:34:56.1235 2018 PDT
2989+
5 | Fri Nov 02 12:34:56.12346 2018 PDT
2990+
6 | Fri Nov 02 12:34:56.123456 2018 PDT
2991+
(6 rows)
2992+
29822993
SELECT to_date('1 4 1902', 'Q MM YYYY'); -- Q is ignored
29832994
to_date
29842995
------------

‎src/test/regress/sql/horology.sql

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -450,6 +450,7 @@ SELECT i, to_timestamp('2018-11-02 12:34:56.1234', 'YYYY-MM-DD HH24:MI:SS.FF' ||
450450
SELECT i, to_timestamp('2018-11-02 12:34:56.12345','YYYY-MM-DD HH24:MI:SS.FF'|| i)FROM generate_series(1,6) i;
451451
SELECT i, to_timestamp('2018-11-02 12:34:56.123456','YYYY-MM-DD HH24:MI:SS.FF'|| i)FROM generate_series(1,6) i;
452452
SELECT i, to_timestamp('2018-11-02 12:34:56.123456789','YYYY-MM-DD HH24:MI:SS.FF'|| i)FROM generate_series(1,6) i;
453+
SELECT i, to_timestamp('20181102123456123456','YYYYMMDDHH24MISSFF'|| i)FROM generate_series(1,6) i;
453454

454455
SELECT to_date('1 4 1902','Q MM YYYY');-- Q is ignored
455456
SELECT to_date('3 4 21 01','W MM CC YY');

0 commit comments

Comments
 (0)

[8]ページ先頭

©2009-2025 Movatter.jp