mirror of
https://github.com/MariaDB/server.git
synced 2025-08-08 11:22:35 +03:00
MDEV-36216 TO_CHAR FM format not recognized in SQL_MODE=Oracle
Adding support for the "FM" format in function TO_CHAR(date_time, fmt). "FM" in the format string disables padding of all components following it. So now TO_CHAR() works as follows: - By default string format components DAY (weekday name) and MONTH (month name) are right-padded with spaces to the maximum possible DAY and MONTH name lengths respectively, according to the current locale specified in @@lc_time_names. So for example, with lc_time_names='en_US' all month names are right-padded with spaces up to 9 characters ('September' is the longest). SET lc_time_names='en_US'; SELECT TO_CHAR('0001-02-03', 'MONTH'); -> 'February ' (padded to 9 chars) NEW: When typed after FM, DAY and MONTH names are not right-padded with trailing spaces any more: SET lc_time_names='en_US'; SELECT TO_CHAR('0001-02-03', 'FMMONTH'); -> 'February' (not padded) - By default numeric components YYYY, YYY, YY, Y, DD, H12, H24, MI, SS are left-padded with leading digits '0' up to the maximum possible number of digits in the component (e.g. 4 for YYYY): SELECT TO_CHAR('0001-02-03', 'YYYY'); -> '0001' (padded to 4 chars) NEW: When typed after FM, these numeric components are not left-padded with leading zeros any more: SELECT TO_CHAR('0001-02-03', 'FMYYYY'); -> '1' (not padded) - If FM is specified multiple times in a format string, every FM negates the previous padding state: * an odd FM disables padding * an even FM enables padding Implementation details: - Adding a helper class Date_time_format_oracle. - Adding a helper method Date_time_format_oracle::append_lex_cstring() - Moving the function append_val() to Date_time_format_oracle as a method. - Moving the function make_date_time_oracle() to Date_time_format_oracle as a method format(). - Adding helper methods month_name() and day_name() in class MY_LOCALE, to return the corresponding components as LEX_CSTRINGs.
This commit is contained in:
@@ -62,6 +62,26 @@ public:
|
||||
{}
|
||||
my_repertoire_t repertoire() const
|
||||
{ return is_ascii ? MY_REPERTOIRE_ASCII : MY_REPERTOIRE_EXTENDED; }
|
||||
/*
|
||||
Get a non-abbreviated month name by index
|
||||
@param month - the month index 0..11
|
||||
*/
|
||||
LEX_CSTRING month_name(uint month) const
|
||||
{
|
||||
if (month > 11)
|
||||
return Lex_cstring("##", 2);
|
||||
return Lex_cstring_strlen(month_names->type_names[month]);
|
||||
}
|
||||
/*
|
||||
Get a non-abbreviated weekday name by index
|
||||
@param weekday - the weekday index 0..6
|
||||
*/
|
||||
LEX_CSTRING day_name(uint weekday) const
|
||||
{
|
||||
if (weekday > 6)
|
||||
return Lex_cstring("##", 2);
|
||||
return Lex_cstring_strlen(day_names->type_names[weekday]);
|
||||
}
|
||||
};
|
||||
/* Exported variables */
|
||||
|
||||
|
Reference in New Issue
Block a user