Skip to content
/ server Public

Commit 576c47f

Browse files
committed
MDEV-38580 TO_DATE should check both formatting and standalone month name
also fixed Serbian locale: Cyrillic was wrongly mapped to Latin fixed locale.test, that was failing in mtr with --cursor protocol
1 parent 0766146 commit 576c47f

File tree

4 files changed

+32
-4
lines changed

4 files changed

+32
-4
lines changed

mysql-test/main/locale.result

Lines changed: 16 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -370,7 +370,7 @@ SET lc_messages=DEFAULT;
370370
# End of 10.11 tests
371371
#
372372
#
373-
# MDEV-38520 Add month name formatting (%M shows month names in genitive case)
373+
# MDEV-38520 Add formatting month's name (%B prints "formatting" months names, %M - "standalone" names)
374374
#
375375
SET lc_time_names=uk_UA;
376376
SELECT monthname('2001-10-01'), monthname('2001-02-15'), monthname('2001-03-30');
@@ -411,3 +411,18 @@ SELECT date_format('2026-04-16','%d %M %Y'), date_format('2026-08-24','%d %M %Y'
411411
date_format('2026-04-16','%d %M %Y') date_format('2026-08-24','%d %M %Y') date_format('2026-01-22','%d %M %Y')
412412
16 април 2026 24 август 2026 22 јануар 2026
413413
SET lc_time_names=DEFAULT;
414+
#
415+
# MDEV-38580 TO_DATE should check both formatting and standalone month name
416+
#
417+
SELECT TO_DATE('16 април 2026','DD MONTH YYYY','NLS_DATE_LANGUAGE=''CYRILLIC SERBIAN''') AS x FROM DUAL;
418+
x
419+
2026-04-16 00:00:00
420+
SELECT TO_DATE('15 april 2024','DD MONTH YYYY','NLS_DATE_LANGUAGE=''LATIN SERBIAN''') AS x FROM DUAL;
421+
x
422+
2024-04-15 00:00:00
423+
SELECT TO_DATE('15 квітень 2024','DD MONTH YYYY','NLS_DATE_LANGUAGE=''UKRAINIAN''') AS x FROM DUAL;
424+
x
425+
2024-04-15 00:00:00
426+
SELECT TO_DATE('15 квітня 2024','DD MONTH YYYY','NLS_DATE_LANGUAGE=''UKRAINIAN''') AS x FROM DUAL;
427+
x
428+
2024-04-15 00:00:00

mysql-test/main/locale.test

Lines changed: 10 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -244,7 +244,7 @@ SET lc_messages=DEFAULT;
244244

245245

246246
--echo #
247-
--echo # MDEV-38520 Add month name formatting (%M shows month names in genitive case)
247+
--echo # MDEV-38520 Add formatting month's name (%B prints "formatting" months names, %M - "standalone" names)
248248
--echo #
249249

250250
SET lc_time_names=uk_UA;
@@ -274,3 +274,12 @@ SET lc_time_names=sr_Cyrl_RS;
274274
SELECT date_format('2026-04-16','%d %M %Y'), date_format('2026-08-24','%d %M %Y'), date_format('2026-01-22','%d %M %Y');
275275

276276
SET lc_time_names=DEFAULT;
277+
278+
--echo #
279+
--echo # MDEV-38580 TO_DATE should check both formatting and standalone month name
280+
--echo #
281+
282+
SELECT TO_DATE('16 април 2026','DD MONTH YYYY','NLS_DATE_LANGUAGE=''CYRILLIC SERBIAN''') AS x FROM DUAL;
283+
SELECT TO_DATE('15 april 2024','DD MONTH YYYY','NLS_DATE_LANGUAGE=''LATIN SERBIAN''') AS x FROM DUAL;
284+
SELECT TO_DATE('15 квітень 2024','DD MONTH YYYY','NLS_DATE_LANGUAGE=''UKRAINIAN''') AS x FROM DUAL;
285+
SELECT TO_DATE('15 квітня 2024','DD MONTH YYYY','NLS_DATE_LANGUAGE=''UKRAINIAN''') AS x FROM DUAL;

sql/item_timefunc.cc

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -867,6 +867,8 @@ extract_oracle_date_time(THD *thd, uint16 *format_ptr,
867867
break;
868868
case FMT_MONTH:
869869
if ((l_time->month= check_word(val_cs, locale->month_names,
870+
val, val_end, &val)) <= 0 &&
871+
(l_time->month= check_word(val_cs, locale->month_names_formatting,
870872
val, val_end, &val)) <= 0)
871873
goto error;
872874
break;
@@ -2441,6 +2443,7 @@ uint Item_func_date_format::format_length(const String *format)
24412443
{
24422444
switch(*++ptr) {
24432445
case 'M': /* month, textual */
2446+
case 'B': /* month, formatting */
24442447
case 'W': /* day (of the week), textual */
24452448
size += 64; /* large for UTF8 locale data */
24462449
break;

sql/sql_locale.cc

Lines changed: 3 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -3727,7 +3727,7 @@ struct ORACLE_DATE_LOCALE Oracle_date_locale[]=
37273727
{ "CATALAN"_Lex_ident_locale, &my_locale_ca_ES },
37283728
{ "CROATIAN"_Lex_ident_locale, &my_locale_hr_HR },
37293729
//{ "CYRILLIC KAZAKH"_Lex_ident_locale, &my_locale_ckk },
3730-
{ "CYRILLIC SERBIAN"_Lex_ident_locale, &my_locale_sr_RS },
3730+
{ "CYRILLIC SERBIAN"_Lex_ident_locale, &my_locale_sr_Cyrl_RS },
37313731
//{"CYRILLIC UZBEK"_Lex_ident_locale, &my_locale_cuz },
37323732
{ "CZECH"_Lex_ident_locale, &my_locale_cs_CZ },
37333733
{ "DANISH"_Lex_ident_locale, &my_locale_da_DK },
@@ -3757,7 +3757,7 @@ struct ORACLE_DATE_LOCALE Oracle_date_locale[]=
37573757
//{ "LAO"_Lex_ident_locale, &my_locale_lo_LO },
37583758
{ "LATIN AMERICAN SPANISH"_Lex_ident_locale, &my_locale_es_ES },
37593759
//{ "LATIN BOSNIAN"_Lex_ident_locale, &my_locale_lbs_LBS },
3760-
//{ "LATIN SERBIAN"_Lex_ident_locale, &my_locale_lsr_LSR },
3760+
{ "LATIN SERBIAN"_Lex_ident_locale, &my_locale_sr_Latn_RS },
37613761
//{ "LATIN UZBEK"_Lex_ident_locale, &my_locale_luz_LUZ },
37623762
{ "LATVIAN"_Lex_ident_locale, &my_locale_lv_LV },
37633763
{ "LITHUANIAN"_Lex_ident_locale, &my_locale_lt_LT },
@@ -3852,6 +3852,7 @@ void init_oracle_data_locale()
38523852
for (locale= Oracle_date_locale; locale->locale ; locale++)
38533853
{
38543854
update_lengths_in_typelib(locale->locale->month_names);
3855+
update_lengths_in_typelib(locale->locale->month_names_formatting);
38553856
update_lengths_in_typelib(locale->locale->ab_month_names);
38563857
update_lengths_in_typelib(locale->locale->day_names);
38573858
update_lengths_in_typelib(locale->locale->ab_day_names);

0 commit comments

Comments
 (0)