@@ -600,6 +600,7 @@ typedef enum
600
600
DCH_MS ,
601
601
DCH_Month ,
602
602
DCH_Mon ,
603
+ DCH_OF ,
603
604
DCH_P_M ,
604
605
DCH_PM ,
605
606
DCH_Q ,
@@ -746,6 +747,7 @@ static const KeyWord DCH_keywords[] = {
746
747
{"MS" , 2 , DCH_MS , TRUE, FROM_CHAR_DATE_NONE },
747
748
{"Month" , 5 , DCH_Month , FALSE, FROM_CHAR_DATE_GREGORIAN },
748
749
{"Mon" , 3 , DCH_Mon , FALSE, FROM_CHAR_DATE_GREGORIAN },
750
+ {"OF" , 2 , DCH_OF , FALSE, FROM_CHAR_DATE_NONE }, /* O */
749
751
{"P.M." , 4 , DCH_P_M , FALSE, FROM_CHAR_DATE_NONE }, /* P */
750
752
{"PM" , 2 , DCH_PM , FALSE, FROM_CHAR_DATE_NONE },
751
753
{"Q" , 1 , DCH_Q , TRUE, FROM_CHAR_DATE_NONE }, /* Q */
@@ -874,7 +876,7 @@ static const int DCH_index[KeyWord_INDEX_SIZE] = {
874
876
-1 , -1 , -1 , -1 , -1 , -1 , -1 , -1 , -1 , -1 ,
875
877
-1 , -1 , -1 , -1 , -1 , -1 , -1 , -1 , -1 , -1 ,
876
878
-1 , -1 , -1 , -1 , -1 , DCH_A_D , DCH_B_C , DCH_CC , DCH_DAY , -1 ,
877
- DCH_FX , -1 , DCH_HH24 , DCH_IDDD , DCH_J , -1 , -1 , DCH_MI , -1 , -1 ,
879
+ DCH_FX , -1 , DCH_HH24 , DCH_IDDD , DCH_J , -1 , -1 , DCH_MI , -1 , DCH_OF ,
878
880
DCH_P_M , DCH_Q , DCH_RM , DCH_SSSS , DCH_TZ , DCH_US , -1 , DCH_WW , -1 , DCH_Y_YYY ,
879
881
-1 , -1 , -1 , -1 , -1 , -1 , -1 , DCH_a_d , DCH_b_c , DCH_cc ,
880
882
DCH_day , -1 , DCH_fx , -1 , DCH_hh24 , DCH_iddd , DCH_j , -1 , -1 , DCH_mi ,
@@ -2502,6 +2504,16 @@ DCH_to_char(FormatNode *node, bool is_interval, TmToChar *in, char *out, Oid col
2502
2504
s += strlen (s );
2503
2505
}
2504
2506
break ;
2507
+ case DCH_OF :
2508
+ INVALID_FOR_INTERVAL ;
2509
+ sprintf (s , "%+0*ld" , S_FM (n -> suffix ) ? 0 : 3 , tm -> tm_gmtoff / SECS_PER_HOUR );
2510
+ s += strlen (s );
2511
+ if (tm -> tm_gmtoff % SECS_PER_HOUR != 0 )
2512
+ {
2513
+ sprintf (s , ":%02ld" , (tm -> tm_gmtoff % SECS_PER_HOUR ) / SECS_PER_MINUTE );
2514
+ s += strlen (s );
2515
+ }
2516
+ break ;
2505
2517
case DCH_A_D :
2506
2518
case DCH_B_C :
2507
2519
INVALID_FOR_INTERVAL ;
@@ -2915,9 +2927,10 @@ DCH_from_char(FormatNode *node, char *in, TmFromChar *out)
2915
2927
break ;
2916
2928
case DCH_tz :
2917
2929
case DCH_TZ :
2930
+ case DCH_OF :
2918
2931
ereport (ERROR ,
2919
2932
(errcode (ERRCODE_FEATURE_NOT_SUPPORTED ),
2920
- errmsg ("\"TZ\"/\"tz\" format patterns are not supported in to_date" )));
2933
+ errmsg ("\"TZ\"/\"tz\"/\"OF\" format patterns are not supported in to_date" )));
2921
2934
case DCH_A_D :
2922
2935
case DCH_B_C :
2923
2936
case DCH_a_d :
0 commit comments