@@ -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 :