diff options
author | Sergey Vojtovich <sergey.vojtovich@oracle.com> | 2011-02-21 11:17:56 +0300 |
---|---|---|
committer | Sergey Vojtovich <sergey.vojtovich@oracle.com> | 2011-02-21 11:17:56 +0300 |
commit | 95b4ff0081fe614eeba9d7fa60cb667477836c1c (patch) | |
tree | a94404cd1b09355be5aaa9523d72385041d4fecb | |
parent | a5f20712a0ab7e40bd577d593b063d1391723308 (diff) | |
parent | 659ff29394c458e3dc9fd44d453c21c54bf4cb31 (diff) | |
download | mariadb-git-95b4ff0081fe614eeba9d7fa60cb667477836c1c.tar.gz |
Merge.
-rw-r--r-- | mysql-test/r/func_time.result | 10 | ||||
-rw-r--r-- | mysql-test/t/func_time.test | 7 | ||||
-rw-r--r-- | sql/item_timefunc.cc | 13 | ||||
-rw-r--r-- | sql/item_timefunc.h | 9 |
4 files changed, 27 insertions, 12 deletions
diff --git a/mysql-test/r/func_time.result b/mysql-test/r/func_time.result index 2a95b234548..bbc86ddeda0 100644 --- a/mysql-test/r/func_time.result +++ b/mysql-test/r/func_time.result @@ -136,7 +136,7 @@ dayname("1962-03-03") dayname("1962-03-03")+0 Saturday 5 select monthname("1972-03-04"),monthname("1972-03-04")+0; monthname("1972-03-04") monthname("1972-03-04")+0 -March 3 +March 0 select time_format(19980131000000,'%H|%I|%k|%l|%i|%p|%r|%S|%T'); time_format(19980131000000,'%H|%I|%k|%l|%i|%p|%r|%S|%T') 00|12|0|12|00|AM|12:00:00 AM|00|00:00:00 @@ -1368,3 +1368,11 @@ SELECT SUBDATE(STR_TO_DATE(NULL,0), INTERVAL 1 HOUR); SUBDATE(STR_TO_DATE(NULL,0), INTERVAL 1 HOUR) NULL # +# BUG#59895 - setting storage engine to null segfaults mysqld +# +SELECT MONTHNAME(0), MONTHNAME(0) IS NULL, MONTHNAME(0) + 1; +MONTHNAME(0) MONTHNAME(0) IS NULL MONTHNAME(0) + 1 +NULL 1 NULL +SET storage_engine=NULL; +ERROR 42000: Variable 'storage_engine' can't be set to the value of 'NULL' +# diff --git a/mysql-test/t/func_time.test b/mysql-test/t/func_time.test index eaa592c2ad5..f53d90cef96 100644 --- a/mysql-test/t/func_time.test +++ b/mysql-test/t/func_time.test @@ -881,4 +881,11 @@ SELECT WEEK(STR_TO_DATE(NULL,0)); SELECT SUBDATE(STR_TO_DATE(NULL,0), INTERVAL 1 HOUR); --echo # +--echo # BUG#59895 - setting storage engine to null segfaults mysqld +--echo # +SELECT MONTHNAME(0), MONTHNAME(0) IS NULL, MONTHNAME(0) + 1; +--error ER_WRONG_VALUE_FOR_VAR +SET storage_engine=NULL; + +--echo # diff --git a/sql/item_timefunc.cc b/sql/item_timefunc.cc index 3d587ace335..99467b7c3fc 100644 --- a/sql/item_timefunc.cc +++ b/sql/item_timefunc.cc @@ -1133,16 +1133,13 @@ String* Item_func_monthname::val_str(String* str) { DBUG_ASSERT(fixed == 1); const char *month_name; - uint month= (uint) val_int(); uint err; + MYSQL_TIME ltime; - if (null_value || !month) - { - null_value=1; - return (String*) 0; - } - null_value=0; - month_name= locale->month_names->type_names[month-1]; + if ((null_value= (get_arg0_date(<ime, TIME_FUZZY_DATE) || !ltime.month))) + return (String *) 0; + + month_name= locale->month_names->type_names[ltime.month - 1]; str->copy(month_name, (uint) strlen(month_name), &my_charset_utf8_bin, collation.collation, &err); return str; diff --git a/sql/item_timefunc.h b/sql/item_timefunc.h index 9732e8dc360..92e24d75111 100644 --- a/sql/item_timefunc.h +++ b/sql/item_timefunc.h @@ -163,16 +163,19 @@ public: }; -class Item_func_monthname :public Item_func_month +class Item_func_monthname :public Item_str_func { MY_LOCALE *locale; public: - Item_func_monthname(Item *a) :Item_func_month(a) {} + Item_func_monthname(Item *a) :Item_str_func(a) {} const char *func_name() const { return "monthname"; } String *val_str(String *str); - enum Item_result result_type () const { return STRING_RESULT; } void fix_length_and_dec(); bool check_partition_func_processor(uchar *int_arg) {return TRUE;} + bool check_valid_arguments_processor(uchar *int_arg) + { + return !has_date_args(); + } }; |