mirror of
https://github.com/MariaDB/server.git
synced 2025-08-01 03:47:19 +03:00
select.result, select.test:
Added test cases for bug #6474. sql_select.cc: Fixed bug #6474. A wrong result was returned when a query contained the same equality of the form field=const on different AND levels.
This commit is contained in:
@ -2333,3 +2333,36 @@ EXPLAIN SELECT i FROM t1 WHERE i=1;
|
|||||||
id select_type table type possible_keys key key_len ref rows Extra
|
id select_type table type possible_keys key key_len ref rows Extra
|
||||||
1 SIMPLE t1 const PRIMARY PRIMARY 4 const 1 Using index
|
1 SIMPLE t1 const PRIMARY PRIMARY 4 const 1 Using index
|
||||||
DROP TABLE t1;
|
DROP TABLE t1;
|
||||||
|
CREATE TABLE t1 (
|
||||||
|
K2C4 varchar(4) character set latin1 collate latin1_bin NOT NULL default '',
|
||||||
|
K4N4 varchar(4) character set latin1 collate latin1_bin NOT NULL default '0000',
|
||||||
|
F2I4 int(11) NOT NULL default '0'
|
||||||
|
) ENGINE=MyISAM DEFAULT CHARSET=latin1;
|
||||||
|
INSERT INTO t1 VALUES
|
||||||
|
('W%RT', '0100', 1),
|
||||||
|
('W-RT', '0100', 1),
|
||||||
|
('WART', '0100', 1),
|
||||||
|
('WART', '0200', 1),
|
||||||
|
('WERT', '0100', 2),
|
||||||
|
('WORT','0200', 2),
|
||||||
|
('WT', '0100', 2),
|
||||||
|
('W_RT', '0100', 2),
|
||||||
|
('WaRT', '0100', 3),
|
||||||
|
('WART', '0300', 3),
|
||||||
|
('WRT' , '0400', 3),
|
||||||
|
('WURM', '0500', 3),
|
||||||
|
('W%T', '0600', 4),
|
||||||
|
('WA%T', '0700', 4),
|
||||||
|
('WA_T', '0800', 4);
|
||||||
|
SELECT K2C4, K4N4, F2I4 FROM t1
|
||||||
|
WHERE K2C4 = 'WART' AND
|
||||||
|
(F2I4 = 2 AND K2C4 = 'WART' OR (F2I4 = 2 OR K4N4 = '0200'));
|
||||||
|
K2C4 K4N4 F2I4
|
||||||
|
WART 0200 1
|
||||||
|
SELECT K2C4, K4N4, F2I4 FROM t1
|
||||||
|
WHERE K2C4 = 'WART' AND (K2C4 = 'WART' OR K4N4 = '0200');
|
||||||
|
K2C4 K4N4 F2I4
|
||||||
|
WART 0100 1
|
||||||
|
WART 0200 1
|
||||||
|
WART 0300 3
|
||||||
|
DROP TABLE t1;
|
||||||
|
@ -1910,3 +1910,39 @@ EXPLAIN SELECT i FROM t1 WHERE i=1;
|
|||||||
EXPLAIN SELECT i FROM t1 WHERE i=1;
|
EXPLAIN SELECT i FROM t1 WHERE i=1;
|
||||||
|
|
||||||
DROP TABLE t1;
|
DROP TABLE t1;
|
||||||
|
|
||||||
|
#
|
||||||
|
# Test for bug #6474
|
||||||
|
#
|
||||||
|
|
||||||
|
CREATE TABLE t1 (
|
||||||
|
K2C4 varchar(4) character set latin1 collate latin1_bin NOT NULL default '',
|
||||||
|
K4N4 varchar(4) character set latin1 collate latin1_bin NOT NULL default '0000',
|
||||||
|
F2I4 int(11) NOT NULL default '0'
|
||||||
|
) ENGINE=MyISAM DEFAULT CHARSET=latin1;
|
||||||
|
|
||||||
|
INSERT INTO t1 VALUES
|
||||||
|
('W%RT', '0100', 1),
|
||||||
|
('W-RT', '0100', 1),
|
||||||
|
('WART', '0100', 1),
|
||||||
|
('WART', '0200', 1),
|
||||||
|
('WERT', '0100', 2),
|
||||||
|
('WORT','0200', 2),
|
||||||
|
('WT', '0100', 2),
|
||||||
|
('W_RT', '0100', 2),
|
||||||
|
('WaRT', '0100', 3),
|
||||||
|
('WART', '0300', 3),
|
||||||
|
('WRT' , '0400', 3),
|
||||||
|
('WURM', '0500', 3),
|
||||||
|
('W%T', '0600', 4),
|
||||||
|
('WA%T', '0700', 4),
|
||||||
|
('WA_T', '0800', 4);
|
||||||
|
|
||||||
|
SELECT K2C4, K4N4, F2I4 FROM t1
|
||||||
|
WHERE K2C4 = 'WART' AND
|
||||||
|
(F2I4 = 2 AND K2C4 = 'WART' OR (F2I4 = 2 OR K4N4 = '0200'));
|
||||||
|
|
||||||
|
SELECT K2C4, K4N4, F2I4 FROM t1
|
||||||
|
WHERE K2C4 = 'WART' AND (K2C4 = 'WART' OR K4N4 = '0200');
|
||||||
|
|
||||||
|
DROP TABLE t1;
|
||||||
|
@ -6639,10 +6639,7 @@ static Item *eliminate_item_equal(COND *cond, COND_EQUAL *upper_levels,
|
|||||||
List<Item> eq_list;
|
List<Item> eq_list;
|
||||||
Item_func_eq *eq_item= 0;
|
Item_func_eq *eq_item= 0;
|
||||||
if (((Item *) item_equal)->const_item() && !item_equal->val_int())
|
if (((Item *) item_equal)->const_item() && !item_equal->val_int())
|
||||||
{
|
return new Item_int((longlong) 0,1);
|
||||||
cond= new Item_int((char*) "FALSE",0,1);
|
|
||||||
return cond;
|
|
||||||
}
|
|
||||||
Item *item_const= item_equal->get_const();
|
Item *item_const= item_equal->get_const();
|
||||||
Item_equal_iterator it(*item_equal);
|
Item_equal_iterator it(*item_equal);
|
||||||
Item *head;
|
Item *head;
|
||||||
@ -6685,9 +6682,14 @@ static Item *eliminate_item_equal(COND *cond, COND_EQUAL *upper_levels,
|
|||||||
}
|
}
|
||||||
|
|
||||||
if (!cond && !eq_list.head())
|
if (!cond && !eq_list.head())
|
||||||
|
{
|
||||||
|
if (!eq_item)
|
||||||
|
return new Item_int((longlong) 1,1);
|
||||||
return eq_item;
|
return eq_item;
|
||||||
|
}
|
||||||
|
|
||||||
eq_list.push_back(eq_item);
|
if (eq_item)
|
||||||
|
eq_list.push_back(eq_item);
|
||||||
if (!cond)
|
if (!cond)
|
||||||
cond= new Item_cond_and(eq_list);
|
cond= new Item_cond_and(eq_list);
|
||||||
else
|
else
|
||||||
|
Reference in New Issue
Block a user