@@ -600,6 +600,7 @@ typedef enum
600600 DCH_MS ,
601601 DCH_Month ,
602602 DCH_Mon ,
603+ DCH_OF ,
603604 DCH_P_M ,
604605 DCH_PM ,
605606 DCH_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 ,
878880 DCH_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 ,
880882 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
25022504 s += strlen (s );
25032505 }
25042506 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 ;
25052517 case DCH_A_D :
25062518 case DCH_B_C :
25072519 INVALID_FOR_INTERVAL ;
@@ -2915,9 +2927,10 @@ DCH_from_char(FormatNode *node, char *in, TmFromChar *out)
29152927 break ;
29162928 case DCH_tz :
29172929 case DCH_TZ :
2930+ case DCH_OF :
29182931 ereport (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" )));
29212934 case DCH_A_D :
29222935 case DCH_B_C :
29232936 case DCH_a_d :
0 commit comments