mirror of
https://github.com/MariaDB/server.git
synced 2025-01-18 04:53:01 +01:00
Fix for bug #5134: WHERE x = 'bar' AND x LIKE BINARY 'bar' returns
wrong results
This commit is contained in:
parent
d5bf903e4d
commit
23535cce16
3 changed files with 39 additions and 2 deletions
|
@ -80,3 +80,21 @@ NULL
|
|||
select b from t1 having binary b like '';
|
||||
b
|
||||
drop table t1;
|
||||
create table t1( firstname char(20), lastname char(20));
|
||||
insert into t1 values ("john","doe"),("John","Doe");
|
||||
select * from t1 where firstname='john' and firstname like binary 'john';
|
||||
firstname lastname
|
||||
john doe
|
||||
select * from t1 where firstname='john' and binary 'john' = firstname;
|
||||
firstname lastname
|
||||
john doe
|
||||
select * from t1 where firstname='john' and firstname = binary 'john';
|
||||
firstname lastname
|
||||
john doe
|
||||
select * from t1 where firstname='John' and firstname like binary 'john';
|
||||
firstname lastname
|
||||
john doe
|
||||
select * from t1 where firstname='john' and firstname like binary 'John';
|
||||
firstname lastname
|
||||
John Doe
|
||||
drop table t1;
|
||||
|
|
|
@ -49,3 +49,16 @@ select b from t1 where binary b like '';
|
|||
select b from t1 group by binary b like '';
|
||||
select b from t1 having binary b like '';
|
||||
drop table t1;
|
||||
|
||||
#
|
||||
# Bug5134: WHERE x = 'bar' AND x LIKE BINARY 'bar' returns wrong results
|
||||
#
|
||||
|
||||
create table t1( firstname char(20), lastname char(20));
|
||||
insert into t1 values ("john","doe"),("John","Doe");
|
||||
select * from t1 where firstname='john' and firstname like binary 'john';
|
||||
select * from t1 where firstname='john' and binary 'john' = firstname;
|
||||
select * from t1 where firstname='john' and firstname = binary 'john';
|
||||
select * from t1 where firstname='John' and firstname like binary 'john';
|
||||
select * from t1 where firstname='john' and firstname like binary 'John';
|
||||
drop table t1;
|
||||
|
|
|
@ -3371,7 +3371,10 @@ change_cond_ref_to_const(I_List<COND_CMP> *save_list,Item *and_father,
|
|||
Item *right_item= func->arguments()[1];
|
||||
Item_func::Functype functype= func->functype();
|
||||
|
||||
if (right_item->eq(field,0) && left_item != value)
|
||||
if (right_item->eq(field,0) && left_item != value &&
|
||||
(left_item->result_type() != STRING_RESULT ||
|
||||
value->result_type() != STRING_RESULT ||
|
||||
left_item->binary == value->binary))
|
||||
{
|
||||
Item *tmp=value->new_item();
|
||||
if (tmp)
|
||||
|
@ -3390,7 +3393,10 @@ change_cond_ref_to_const(I_List<COND_CMP> *save_list,Item *and_father,
|
|||
func->arguments()[1]->result_type()));
|
||||
}
|
||||
}
|
||||
else if (left_item->eq(field,0) && right_item != value)
|
||||
else if (left_item->eq(field,0) && right_item != value &&
|
||||
(right_item->result_type() != STRING_RESULT ||
|
||||
value->result_type() != STRING_RESULT ||
|
||||
right_item->binary == value->binary))
|
||||
{
|
||||
Item *tmp=value->new_item();
|
||||
if (tmp)
|
||||
|
|
Loading…
Reference in a new issue