Loading mysql-test/r/case.result +15 −0 Original line number Diff line number Diff line Loading @@ -154,3 +154,18 @@ t1 CREATE TABLE `t1` ( `COALESCE('a' COLLATE latin1_bin,'b')` char(1) character set latin1 collate latin1_bin NOT NULL default '' ) ENGINE=MyISAM DEFAULT CHARSET=latin1 DROP TABLE t1; SELECT 'case+union+test' UNION SELECT CASE LOWER('1') WHEN LOWER('2') THEN 'BUG' ELSE 'nobug' END; case+union+test case+union+test nobug SELECT CASE LOWER('1') WHEN LOWER('2') THEN 'BUG' ELSE 'nobug' END; CASE LOWER('1') WHEN LOWER('2') THEN 'BUG' ELSE 'nobug' END nobug SELECT 'case+union+test' UNION SELECT CASE '1' WHEN '2' THEN 'BUG' ELSE 'nobug' END; case+union+test case+union+test nobug mysql-test/t/case.test +11 −0 Original line number Diff line number Diff line Loading @@ -107,3 +107,14 @@ explain extended SELECT COALESCE('a' COLLATE latin1_bin,'b'); SHOW CREATE TABLE t1; DROP TABLE t1; # Test for BUG#10151 SELECT 'case+union+test' UNION SELECT CASE LOWER('1') WHEN LOWER('2') THEN 'BUG' ELSE 'nobug' END; SELECT CASE LOWER('1') WHEN LOWER('2') THEN 'BUG' ELSE 'nobug' END; SELECT 'case+union+test' UNION SELECT CASE '1' WHEN '2' THEN 'BUG' ELSE 'nobug' END; sql/item_cmpfunc.cc +3 −1 Original line number Diff line number Diff line Loading @@ -1174,6 +1174,8 @@ Item *Item_func_case::find_item(String *str) String *first_expr_str,*tmp; longlong first_expr_int; double first_expr_real; char buff[MAX_FIELD_WIDTH]; String buff_str(buff,sizeof(buff),default_charset()); /* These will be initialized later */ LINT_INIT(first_expr_str); Loading @@ -1186,7 +1188,7 @@ Item *Item_func_case::find_item(String *str) { case STRING_RESULT: // We can't use 'str' here as this may be overwritten if (!(first_expr_str= args[first_expr_num]->val_str(&str_value))) if (!(first_expr_str= args[first_expr_num]->val_str(&buff_str))) return else_expr_num != -1 ? args[else_expr_num] : 0; // Impossible break; case INT_RESULT: Loading sql/sql_parse.cc +0 −1 Original line number Diff line number Diff line Loading @@ -2882,7 +2882,6 @@ mysql_execute_command(THD *thd) } else res= -1; first_local_table->next= tables; lex->select_lex.table_list.first= (byte*) first_local_table; break; } Loading Loading
mysql-test/r/case.result +15 −0 Original line number Diff line number Diff line Loading @@ -154,3 +154,18 @@ t1 CREATE TABLE `t1` ( `COALESCE('a' COLLATE latin1_bin,'b')` char(1) character set latin1 collate latin1_bin NOT NULL default '' ) ENGINE=MyISAM DEFAULT CHARSET=latin1 DROP TABLE t1; SELECT 'case+union+test' UNION SELECT CASE LOWER('1') WHEN LOWER('2') THEN 'BUG' ELSE 'nobug' END; case+union+test case+union+test nobug SELECT CASE LOWER('1') WHEN LOWER('2') THEN 'BUG' ELSE 'nobug' END; CASE LOWER('1') WHEN LOWER('2') THEN 'BUG' ELSE 'nobug' END nobug SELECT 'case+union+test' UNION SELECT CASE '1' WHEN '2' THEN 'BUG' ELSE 'nobug' END; case+union+test case+union+test nobug
mysql-test/t/case.test +11 −0 Original line number Diff line number Diff line Loading @@ -107,3 +107,14 @@ explain extended SELECT COALESCE('a' COLLATE latin1_bin,'b'); SHOW CREATE TABLE t1; DROP TABLE t1; # Test for BUG#10151 SELECT 'case+union+test' UNION SELECT CASE LOWER('1') WHEN LOWER('2') THEN 'BUG' ELSE 'nobug' END; SELECT CASE LOWER('1') WHEN LOWER('2') THEN 'BUG' ELSE 'nobug' END; SELECT 'case+union+test' UNION SELECT CASE '1' WHEN '2' THEN 'BUG' ELSE 'nobug' END;
sql/item_cmpfunc.cc +3 −1 Original line number Diff line number Diff line Loading @@ -1174,6 +1174,8 @@ Item *Item_func_case::find_item(String *str) String *first_expr_str,*tmp; longlong first_expr_int; double first_expr_real; char buff[MAX_FIELD_WIDTH]; String buff_str(buff,sizeof(buff),default_charset()); /* These will be initialized later */ LINT_INIT(first_expr_str); Loading @@ -1186,7 +1188,7 @@ Item *Item_func_case::find_item(String *str) { case STRING_RESULT: // We can't use 'str' here as this may be overwritten if (!(first_expr_str= args[first_expr_num]->val_str(&str_value))) if (!(first_expr_str= args[first_expr_num]->val_str(&buff_str))) return else_expr_num != -1 ? args[else_expr_num] : 0; // Impossible break; case INT_RESULT: Loading
sql/sql_parse.cc +0 −1 Original line number Diff line number Diff line Loading @@ -2882,7 +2882,6 @@ mysql_execute_command(THD *thd) } else res= -1; first_local_table->next= tables; lex->select_lex.table_list.first= (byte*) first_local_table; break; } Loading