Commit 7f905da3 authored by unknown's avatar unknown
Browse files

select.result, select.test:

  Added a test case for bug #7098.
sql_select.cc:
  Fixed bug #7098.
  When a string field was substituted for an equal constant
  the collation of the constant was changed by mistake for 
  the binary collation.


sql/sql_select.cc:
  Fixed bug #7098.
  When a string field was substituted for an equal constant
  the collation of the constant was changed by mistake for 
  the binary collation.
mysql-test/t/select.test:
  Added a test case for bug #7098.
mysql-test/r/select.result:
  Added a test case for bug #7098.
parent 96f9c9d9
Loading
Loading
Loading
Loading
+22 −0
Original line number Diff line number Diff line
@@ -2400,3 +2400,25 @@ id select_type table type possible_keys key key_len ref rows Extra
1	SIMPLE	t1	ALL	NULL	NULL	NULL	NULL	5	
1	SIMPLE	t2	ref	a	a	23	test.t1.a	2	
DROP TABLE t1, t2;
CREATE TABLE t1 ( city char(30) );
INSERT INTO t1 VALUES ('London');
INSERT INTO t1 VALUES ('Paris');
SELECT * FROM t1 WHERE city='London';
city
London
SELECT * FROM t1 WHERE city='london';
city
London
EXPLAIN SELECT * FROM t1 WHERE city='London' AND city='london';
id	select_type	table	type	possible_keys	key	key_len	ref	rows	Extra
1	SIMPLE	t1	ALL	NULL	NULL	NULL	NULL	2	Using where
SELECT * FROM t1 WHERE city='London' AND city='london';
city
London
EXPLAIN SELECT * FROM t1 WHERE city LIKE '%london%' AND city='London';
id	select_type	table	type	possible_keys	key	key_len	ref	rows	Extra
1	SIMPLE	t1	ALL	NULL	NULL	NULL	NULL	2	Using where
SELECT * FROM t1 WHERE city LIKE '%london%' AND city='London';
city
London
DROP TABLE t1;
+19 −0
Original line number Diff line number Diff line
@@ -1945,3 +1945,22 @@ EXPLAIN SELECT * FROM t1 LEFT JOIN t2 USE INDEX (a) ON t1.a=t2.a;
EXPLAIN SELECT * FROM t1 LEFT JOIN t2 FORCE INDEX (a) ON t1.a=t2.a;

DROP TABLE t1, t2;


#
# Test case for bug 7098: substitution of a constant for a string field 
#

CREATE TABLE t1 ( city char(30) );
INSERT INTO t1 VALUES ('London');
INSERT INTO t1 VALUES ('Paris');

SELECT * FROM t1 WHERE city='London';
SELECT * FROM t1 WHERE city='london';
EXPLAIN SELECT * FROM t1 WHERE city='London' AND city='london';
SELECT * FROM t1 WHERE city='London' AND city='london';
EXPLAIN SELECT * FROM t1 WHERE city LIKE '%london%' AND city='London';
SELECT * FROM t1 WHERE city LIKE '%london%' AND city='London';

DROP TABLE t1;
+4 −0
Original line number Diff line number Diff line
@@ -4230,6 +4230,8 @@ change_cond_ref_to_const(THD *thd, I_List<COND_CMP> *save_list,
    Item *tmp=value->new_item();
    if (tmp)
    {
      tmp->collation.set(value->collation.collation,
                         value->collation.derivation);
      thd->change_item_tree(args + 1, tmp);
      func->update_used_tables();
      if ((functype == Item_func::EQ_FUNC || functype == Item_func::EQUAL_FUNC)
@@ -4251,6 +4253,8 @@ change_cond_ref_to_const(THD *thd, I_List<COND_CMP> *save_list,
    Item *tmp=value->new_item();
    if (tmp)
    {
      tmp->collation.set(value->collation.collation,
                         value->collation.derivation);
      thd->change_item_tree(args, tmp);
      value= tmp;
      func->update_used_tables();