mirror of
https://github.com/MariaDB/server.git
synced 2025-01-18 04:53:01 +01:00
Fixed BUG#17476: Stored procedure not returning data when it is called first
time per connection Removed const_string() method from Item_string (it was only used in one place, in a bad way). Defer possible SP variable, and access data directly instead, in date_format item.
This commit is contained in:
parent
053a56c751
commit
d85e929547
4 changed files with 54 additions and 4 deletions
|
@ -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;
|
||||
|
|
|
@ -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
|
||||
#
|
||||
|
|
|
@ -1585,7 +1585,6 @@ public:
|
|||
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)
|
||||
|
|
|
@ -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;
|
||||
|
||||
|
@ -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
|
||||
|
@ -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…
Reference in a new issue