@ -110,7 +110,7 @@
* Maximal length of one node
* - - - - - - - - - -
*/
# define DCH_MAX_ITEM_SIZ 9 /* max julian day */
# define DCH_MAX_ITEM_SIZ 12 /* max localized day name */
# define NUM_MAX_ITEM_SIZ 8 /* roman number (RN has 15 chars) */
/* ----------
@ -525,10 +525,12 @@ do { \
* Suffixes definition for DATE - TIME TO / FROM CHAR
* - - - - - - - - - -
*/
# define TM_SUFFIX_LEN 2
static KeySuffix DCH_suff [ ] = {
{ " FM " , 2 , DCH_S_FM , SUFFTYPE_PREFIX } ,
{ " fm " , 2 , DCH_S_FM , SUFFTYPE_PREFIX } ,
{ " TM " , 2 , DCH_S_TM , SUFFTYPE_PREFIX } ,
{ " TM " , TM_SUFFIX_LEN , DCH_S_TM , SUFFTYPE_PREFIX } ,
{ " tm " , 2 , DCH_S_TM , SUFFTYPE_PREFIX } ,
{ " TH " , 2 , DCH_S_TH , SUFFTYPE_POSTFIX } ,
{ " th " , 2 , DCH_S_th , SUFFTYPE_POSTFIX } ,
@ -537,6 +539,7 @@ static KeySuffix DCH_suff[] = {
{ NULL , 0 , 0 , 0 }
} ;
/* ----------
* Format - pictures ( KeyWord ) .
*
@ -2495,7 +2498,16 @@ DCH_to_char(FormatNode *node, bool is_interval, TmToChar *in, char *out, Oid col
if ( ! tm - > tm_mon )
break ;
if ( S_TM ( n - > suffix ) )
strcpy ( s , str_toupper_z ( localized_full_months [ tm - > tm_mon - 1 ] , collid ) ) ;
{
char * str = str_toupper_z ( localized_full_months [ tm - > tm_mon - 1 ] , collid ) ;
if ( strlen ( str ) < ( n - > key - > len + TM_SUFFIX_LEN ) * DCH_MAX_ITEM_SIZ )
strcpy ( s , str ) ;
else
ereport ( ERROR ,
( errcode ( ERRCODE_DATETIME_VALUE_OUT_OF_RANGE ) ,
errmsg ( " localized string format value too long " ) ) ) ;
}
else
sprintf ( s , " %*s " , S_FM ( n - > suffix ) ? 0 : - 9 ,
asc_toupper_z ( months_full [ tm - > tm_mon - 1 ] ) ) ;
@ -2506,7 +2518,16 @@ DCH_to_char(FormatNode *node, bool is_interval, TmToChar *in, char *out, Oid col
if ( ! tm - > tm_mon )
break ;
if ( S_TM ( n - > suffix ) )
strcpy ( s , str_initcap_z ( localized_full_months [ tm - > tm_mon - 1 ] , collid ) ) ;
{
char * str = str_initcap_z ( localized_full_months [ tm - > tm_mon - 1 ] , collid ) ;
if ( strlen ( str ) < ( n - > key - > len + TM_SUFFIX_LEN ) * DCH_MAX_ITEM_SIZ )
strcpy ( s , str ) ;
else
ereport ( ERROR ,
( errcode ( ERRCODE_DATETIME_VALUE_OUT_OF_RANGE ) ,
errmsg ( " localized string format value too long " ) ) ) ;
}
else
sprintf ( s , " %*s " , S_FM ( n - > suffix ) ? 0 : - 9 ,
months_full [ tm - > tm_mon - 1 ] ) ;
@ -2517,7 +2538,16 @@ DCH_to_char(FormatNode *node, bool is_interval, TmToChar *in, char *out, Oid col
if ( ! tm - > tm_mon )
break ;
if ( S_TM ( n - > suffix ) )
strcpy ( s , str_tolower_z ( localized_full_months [ tm - > tm_mon - 1 ] , collid ) ) ;
{
char * str = str_tolower_z ( localized_full_months [ tm - > tm_mon - 1 ] , collid ) ;
if ( strlen ( str ) < ( n - > key - > len + TM_SUFFIX_LEN ) * DCH_MAX_ITEM_SIZ )
strcpy ( s , str ) ;
else
ereport ( ERROR ,
( errcode ( ERRCODE_DATETIME_VALUE_OUT_OF_RANGE ) ,
errmsg ( " localized string format value too long " ) ) ) ;
}
else
sprintf ( s , " %*s " , S_FM ( n - > suffix ) ? 0 : - 9 ,
asc_tolower_z ( months_full [ tm - > tm_mon - 1 ] ) ) ;
@ -2528,7 +2558,16 @@ DCH_to_char(FormatNode *node, bool is_interval, TmToChar *in, char *out, Oid col
if ( ! tm - > tm_mon )
break ;
if ( S_TM ( n - > suffix ) )
strcpy ( s , str_toupper_z ( localized_abbrev_months [ tm - > tm_mon - 1 ] , collid ) ) ;
{
char * str = str_toupper_z ( localized_abbrev_months [ tm - > tm_mon - 1 ] , collid ) ;
if ( strlen ( str ) < ( n - > key - > len + TM_SUFFIX_LEN ) * DCH_MAX_ITEM_SIZ )
strcpy ( s , str ) ;
else
ereport ( ERROR ,
( errcode ( ERRCODE_DATETIME_VALUE_OUT_OF_RANGE ) ,
errmsg ( " localized string format value too long " ) ) ) ;
}
else
strcpy ( s , asc_toupper_z ( months [ tm - > tm_mon - 1 ] ) ) ;
s + = strlen ( s ) ;
@ -2538,7 +2577,16 @@ DCH_to_char(FormatNode *node, bool is_interval, TmToChar *in, char *out, Oid col
if ( ! tm - > tm_mon )
break ;
if ( S_TM ( n - > suffix ) )
strcpy ( s , str_initcap_z ( localized_abbrev_months [ tm - > tm_mon - 1 ] , collid ) ) ;
{
char * str = str_initcap_z ( localized_abbrev_months [ tm - > tm_mon - 1 ] , collid ) ;
if ( strlen ( str ) < ( n - > key - > len + TM_SUFFIX_LEN ) * DCH_MAX_ITEM_SIZ )
strcpy ( s , str ) ;
else
ereport ( ERROR ,
( errcode ( ERRCODE_DATETIME_VALUE_OUT_OF_RANGE ) ,
errmsg ( " localized string format value too long " ) ) ) ;
}
else
strcpy ( s , months [ tm - > tm_mon - 1 ] ) ;
s + = strlen ( s ) ;
@ -2548,7 +2596,16 @@ DCH_to_char(FormatNode *node, bool is_interval, TmToChar *in, char *out, Oid col
if ( ! tm - > tm_mon )
break ;
if ( S_TM ( n - > suffix ) )
strcpy ( s , str_tolower_z ( localized_abbrev_months [ tm - > tm_mon - 1 ] , collid ) ) ;
{
char * str = str_tolower_z ( localized_abbrev_months [ tm - > tm_mon - 1 ] , collid ) ;
if ( strlen ( str ) < ( n - > key - > len + TM_SUFFIX_LEN ) * DCH_MAX_ITEM_SIZ )
strcpy ( s , str ) ;
else
ereport ( ERROR ,
( errcode ( ERRCODE_DATETIME_VALUE_OUT_OF_RANGE ) ,
errmsg ( " localized string format value too long " ) ) ) ;
}
else
strcpy ( s , asc_tolower_z ( months [ tm - > tm_mon - 1 ] ) ) ;
s + = strlen ( s ) ;
@ -2562,7 +2619,16 @@ DCH_to_char(FormatNode *node, bool is_interval, TmToChar *in, char *out, Oid col
case DCH_DAY :
INVALID_FOR_INTERVAL ;
if ( S_TM ( n - > suffix ) )
strcpy ( s , str_toupper_z ( localized_full_days [ tm - > tm_wday ] , collid ) ) ;
{
char * str = str_toupper_z ( localized_full_days [ tm - > tm_wday ] , collid ) ;
if ( strlen ( str ) < ( n - > key - > len + TM_SUFFIX_LEN ) * DCH_MAX_ITEM_SIZ )
strcpy ( s , str ) ;
else
ereport ( ERROR ,
( errcode ( ERRCODE_DATETIME_VALUE_OUT_OF_RANGE ) ,
errmsg ( " localized string format value too long " ) ) ) ;
}
else
sprintf ( s , " %*s " , S_FM ( n - > suffix ) ? 0 : - 9 ,
asc_toupper_z ( days [ tm - > tm_wday ] ) ) ;
@ -2571,7 +2637,16 @@ DCH_to_char(FormatNode *node, bool is_interval, TmToChar *in, char *out, Oid col
case DCH_Day :
INVALID_FOR_INTERVAL ;
if ( S_TM ( n - > suffix ) )
strcpy ( s , str_initcap_z ( localized_full_days [ tm - > tm_wday ] , collid ) ) ;
{
char * str = str_initcap_z ( localized_full_days [ tm - > tm_wday ] , collid ) ;
if ( strlen ( str ) < ( n - > key - > len + TM_SUFFIX_LEN ) * DCH_MAX_ITEM_SIZ )
strcpy ( s , str ) ;
else
ereport ( ERROR ,
( errcode ( ERRCODE_DATETIME_VALUE_OUT_OF_RANGE ) ,
errmsg ( " localized string format value too long " ) ) ) ;
}
else
sprintf ( s , " %*s " , S_FM ( n - > suffix ) ? 0 : - 9 ,
days [ tm - > tm_wday ] ) ;
@ -2580,7 +2655,16 @@ DCH_to_char(FormatNode *node, bool is_interval, TmToChar *in, char *out, Oid col
case DCH_day :
INVALID_FOR_INTERVAL ;
if ( S_TM ( n - > suffix ) )
strcpy ( s , str_tolower_z ( localized_full_days [ tm - > tm_wday ] , collid ) ) ;
{
char * str = str_tolower_z ( localized_full_days [ tm - > tm_wday ] , collid ) ;
if ( strlen ( str ) < ( n - > key - > len + TM_SUFFIX_LEN ) * DCH_MAX_ITEM_SIZ )
strcpy ( s , str ) ;
else
ereport ( ERROR ,
( errcode ( ERRCODE_DATETIME_VALUE_OUT_OF_RANGE ) ,
errmsg ( " localized string format value too long " ) ) ) ;
}
else
sprintf ( s , " %*s " , S_FM ( n - > suffix ) ? 0 : - 9 ,
asc_tolower_z ( days [ tm - > tm_wday ] ) ) ;
@ -2589,7 +2673,16 @@ DCH_to_char(FormatNode *node, bool is_interval, TmToChar *in, char *out, Oid col
case DCH_DY :
INVALID_FOR_INTERVAL ;
if ( S_TM ( n - > suffix ) )
strcpy ( s , str_toupper_z ( localized_abbrev_days [ tm - > tm_wday ] , collid ) ) ;
{
char * str = str_toupper_z ( localized_abbrev_days [ tm - > tm_wday ] , collid ) ;
if ( strlen ( str ) < ( n - > key - > len + TM_SUFFIX_LEN ) * DCH_MAX_ITEM_SIZ )
strcpy ( s , str ) ;
else
ereport ( ERROR ,
( errcode ( ERRCODE_DATETIME_VALUE_OUT_OF_RANGE ) ,
errmsg ( " localized string format value too long " ) ) ) ;
}
else
strcpy ( s , asc_toupper_z ( days_short [ tm - > tm_wday ] ) ) ;
s + = strlen ( s ) ;
@ -2597,7 +2690,16 @@ DCH_to_char(FormatNode *node, bool is_interval, TmToChar *in, char *out, Oid col
case DCH_Dy :
INVALID_FOR_INTERVAL ;
if ( S_TM ( n - > suffix ) )
strcpy ( s , str_initcap_z ( localized_abbrev_days [ tm - > tm_wday ] , collid ) ) ;
{
char * str = str_initcap_z ( localized_abbrev_days [ tm - > tm_wday ] , collid ) ;
if ( strlen ( str ) < ( n - > key - > len + TM_SUFFIX_LEN ) * DCH_MAX_ITEM_SIZ )
strcpy ( s , str ) ;
else
ereport ( ERROR ,
( errcode ( ERRCODE_DATETIME_VALUE_OUT_OF_RANGE ) ,
errmsg ( " localized string format value too long " ) ) ) ;
}
else
strcpy ( s , days_short [ tm - > tm_wday ] ) ;
s + = strlen ( s ) ;
@ -2605,7 +2707,16 @@ DCH_to_char(FormatNode *node, bool is_interval, TmToChar *in, char *out, Oid col
case DCH_dy :
INVALID_FOR_INTERVAL ;
if ( S_TM ( n - > suffix ) )
strcpy ( s , str_tolower_z ( localized_abbrev_days [ tm - > tm_wday ] , collid ) ) ;
{
char * str = str_tolower_z ( localized_abbrev_days [ tm - > tm_wday ] , collid ) ;
if ( strlen ( str ) < ( n - > key - > len + TM_SUFFIX_LEN ) * DCH_MAX_ITEM_SIZ )
strcpy ( s , str ) ;
else
ereport ( ERROR ,
( errcode ( ERRCODE_DATETIME_VALUE_OUT_OF_RANGE ) ,
errmsg ( " localized string format value too long " ) ) ) ;
}
else
strcpy ( s , asc_tolower_z ( days_short [ tm - > tm_wday ] ) ) ;
s + = strlen ( s ) ;