Loading mysql-test/r/sp.result +19 −0 Original line number Diff line number Diff line Loading @@ -4768,4 +4768,23 @@ Handler Inner drop procedure bug15011| drop table t3| drop procedure if exists bug17476| create table t3 ( d date )| insert into t3 values ( '2005-01-01' ), ( '2005-01-02' ), ( '2005-01-03' ), ( '2005-01-04' ), ( '2005-02-01' ), ( '2005-02-02' )| create procedure bug17476(pDateFormat varchar(10)) select date_format(t3.d, pDateFormat), count(*) from t3 group by date_format(t3.d, pDateFormat)| call bug17476('%Y-%m')| date_format(t3.d, pDateFormat) count(*) 2005-01 4 2005-02 2 call bug17476('%Y-%m')| date_format(t3.d, pDateFormat) count(*) 2005-01 4 2005-02 2 drop table t3| drop procedure bug17476| drop table t1,t2; mysql-test/t/sp.test +25 −0 Original line number Diff line number Diff line Loading @@ -5615,6 +5615,31 @@ drop procedure bug15011| drop table t3| # # BUG#17476: Stored procedure not returning data when it is called first # time per connection # --disable_warnings drop procedure if exists bug17476| --enable_warnings create table t3 ( d date )| insert into t3 values ( '2005-01-01' ), ( '2005-01-02' ), ( '2005-01-03' ), ( '2005-01-04' ), ( '2005-02-01' ), ( '2005-02-02' )| create procedure bug17476(pDateFormat varchar(10)) select date_format(t3.d, pDateFormat), count(*) from t3 group by date_format(t3.d, pDateFormat)| call bug17476('%Y-%m')| call bug17476('%Y-%m')| drop table t3| drop procedure bug17476| # # BUG#NNNN: New bug synopsis # Loading sql/item.h +0 −1 Original line number Diff line number Diff line Loading @@ -1585,7 +1585,6 @@ class Item_string :public Item str_value.length(), collation.collation); } Item *safe_charset_converter(CHARSET_INFO *tocs); String *const_string() { return &str_value; } inline void append(char *str, uint length) { str_value.append(str, length); } void print(String *str); // to prevent drop fixed flag (no need parent cleanup call) Loading sql/item_timefunc.cc +10 −3 Original line number Diff line number Diff line Loading @@ -1605,9 +1605,15 @@ longlong Item_func_sec_to_time::val_int() void Item_func_date_format::fix_length_and_dec() { /* Must use this_item() in case it's a local SP variable (for ->max_length and ->str_value) */ Item *arg1= args[1]->this_item(); decimals=0; collation.set(&my_charset_bin); if (args[1]->type() == STRING_ITEM) if (arg1->type() == STRING_ITEM) { // Optimize the normal case fixed_length=1; Loading @@ -1615,13 +1621,13 @@ void Item_func_date_format::fix_length_and_dec() The result is a binary string (no reason to use collation->mbmaxlen This is becasue make_date_time() only returns binary strings */ max_length= format_length(((Item_string*) args[1])->const_string()); max_length= format_length(&arg1->str_value); } else { fixed_length=0; /* The result is a binary string (no reason to use collation->mbmaxlen */ max_length=min(args[1]->max_length,MAX_BLOB_WIDTH) * 10; max_length=min(arg1->max_length, MAX_BLOB_WIDTH) * 10; set_if_smaller(max_length,MAX_BLOB_WIDTH); } maybe_null=1; // If wrong date Loading @@ -1631,6 +1637,7 @@ void Item_func_date_format::fix_length_and_dec() bool Item_func_date_format::eq(const Item *item, bool binary_cmp) const { Item_func_date_format *item_func; if (item->type() != FUNC_ITEM) return 0; if (func_name() != ((Item_func*) item)->func_name()) Loading Loading
mysql-test/r/sp.result +19 −0 Original line number Diff line number Diff line Loading @@ -4768,4 +4768,23 @@ Handler Inner drop procedure bug15011| drop table t3| drop procedure if exists bug17476| create table t3 ( d date )| insert into t3 values ( '2005-01-01' ), ( '2005-01-02' ), ( '2005-01-03' ), ( '2005-01-04' ), ( '2005-02-01' ), ( '2005-02-02' )| create procedure bug17476(pDateFormat varchar(10)) select date_format(t3.d, pDateFormat), count(*) from t3 group by date_format(t3.d, pDateFormat)| call bug17476('%Y-%m')| date_format(t3.d, pDateFormat) count(*) 2005-01 4 2005-02 2 call bug17476('%Y-%m')| date_format(t3.d, pDateFormat) count(*) 2005-01 4 2005-02 2 drop table t3| drop procedure bug17476| drop table t1,t2;
mysql-test/t/sp.test +25 −0 Original line number Diff line number Diff line Loading @@ -5615,6 +5615,31 @@ drop procedure bug15011| drop table t3| # # BUG#17476: Stored procedure not returning data when it is called first # time per connection # --disable_warnings drop procedure if exists bug17476| --enable_warnings create table t3 ( d date )| insert into t3 values ( '2005-01-01' ), ( '2005-01-02' ), ( '2005-01-03' ), ( '2005-01-04' ), ( '2005-02-01' ), ( '2005-02-02' )| create procedure bug17476(pDateFormat varchar(10)) select date_format(t3.d, pDateFormat), count(*) from t3 group by date_format(t3.d, pDateFormat)| call bug17476('%Y-%m')| call bug17476('%Y-%m')| drop table t3| drop procedure bug17476| # # BUG#NNNN: New bug synopsis # Loading
sql/item.h +0 −1 Original line number Diff line number Diff line Loading @@ -1585,7 +1585,6 @@ class Item_string :public Item str_value.length(), collation.collation); } Item *safe_charset_converter(CHARSET_INFO *tocs); String *const_string() { return &str_value; } inline void append(char *str, uint length) { str_value.append(str, length); } void print(String *str); // to prevent drop fixed flag (no need parent cleanup call) Loading
sql/item_timefunc.cc +10 −3 Original line number Diff line number Diff line Loading @@ -1605,9 +1605,15 @@ longlong Item_func_sec_to_time::val_int() void Item_func_date_format::fix_length_and_dec() { /* Must use this_item() in case it's a local SP variable (for ->max_length and ->str_value) */ Item *arg1= args[1]->this_item(); decimals=0; collation.set(&my_charset_bin); if (args[1]->type() == STRING_ITEM) if (arg1->type() == STRING_ITEM) { // Optimize the normal case fixed_length=1; Loading @@ -1615,13 +1621,13 @@ void Item_func_date_format::fix_length_and_dec() The result is a binary string (no reason to use collation->mbmaxlen This is becasue make_date_time() only returns binary strings */ max_length= format_length(((Item_string*) args[1])->const_string()); max_length= format_length(&arg1->str_value); } else { fixed_length=0; /* The result is a binary string (no reason to use collation->mbmaxlen */ max_length=min(args[1]->max_length,MAX_BLOB_WIDTH) * 10; max_length=min(arg1->max_length, MAX_BLOB_WIDTH) * 10; set_if_smaller(max_length,MAX_BLOB_WIDTH); } maybe_null=1; // If wrong date Loading @@ -1631,6 +1637,7 @@ void Item_func_date_format::fix_length_and_dec() bool Item_func_date_format::eq(const Item *item, bool binary_cmp) const { Item_func_date_format *item_func; if (item->type() != FUNC_ITEM) return 0; if (func_name() != ((Item_func*) item)->func_name()) Loading