@@ -600,6 +600,7 @@ typedef enum
600600DCH_MS ,
601601DCH_Month ,
602602DCH_Mon ,
603+ DCH_OF ,
603604DCH_P_M ,
604605DCH_PM ,
605606DCH_Q ,
@@ -746,6 +747,7 @@ static const KeyWord DCH_keywords[] = {
746747{"MS" ,2 ,DCH_MS , TRUE,FROM_CHAR_DATE_NONE },
747748{"Month" ,5 ,DCH_Month , FALSE,FROM_CHAR_DATE_GREGORIAN },
748749{"Mon" ,3 ,DCH_Mon , FALSE,FROM_CHAR_DATE_GREGORIAN },
750+ {"OF" ,2 ,DCH_OF , FALSE,FROM_CHAR_DATE_NONE },/* O */
749751{"P.M." ,4 ,DCH_P_M , FALSE,FROM_CHAR_DATE_NONE },/* P */
750752{"PM" ,2 ,DCH_PM , FALSE,FROM_CHAR_DATE_NONE },
751753{"Q" ,1 ,DCH_Q , TRUE,FROM_CHAR_DATE_NONE },/* Q */
@@ -874,7 +876,7 @@ static const int DCH_index[KeyWord_INDEX_SIZE] = {
874876-1 ,-1 ,-1 ,-1 ,-1 ,-1 ,-1 ,-1 ,-1 ,-1 ,
875877-1 ,-1 ,-1 ,-1 ,-1 ,-1 ,-1 ,-1 ,-1 ,-1 ,
876878-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 ,
878880DCH_P_M ,DCH_Q ,DCH_RM ,DCH_SSSS ,DCH_TZ ,DCH_US ,-1 ,DCH_WW ,-1 ,DCH_Y_YYY ,
879881-1 ,-1 ,-1 ,-1 ,-1 ,-1 ,-1 ,DCH_a_d ,DCH_b_c ,DCH_cc ,
880882DCH_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
25022504s += strlen (s );
25032505}
25042506break ;
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 ;
25052517case DCH_A_D :
25062518case DCH_B_C :
25072519INVALID_FOR_INTERVAL ;
@@ -2915,9 +2927,10 @@ DCH_from_char(FormatNode *node, char *in, TmFromChar *out)
29152927break ;
29162928case DCH_tz :
29172929case DCH_TZ :
2930+ case DCH_OF :
29182931ereport (ERROR ,
29192932(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" )));
29212934case DCH_A_D :
29222935case DCH_B_C :
29232936case DCH_a_d :