mirror of
https://github.com/MariaDB/server.git
synced 2025-01-31 02:51:44 +01: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:
parent
0ebc50b851
commit
597781c1b1
3 changed files with 76 additions and 5 deletions
|
@ -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
|
||||
1 SIMPLE t1 const PRIMARY PRIMARY 4 const 1 Using index
|
||||
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;
|
||||
|
||||
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;
|
||||
Item_func_eq *eq_item= 0;
|
||||
if (((Item *) item_equal)->const_item() && !item_equal->val_int())
|
||||
{
|
||||
cond= new Item_int((char*) "FALSE",0,1);
|
||||
return cond;
|
||||
}
|
||||
return new Item_int((longlong) 0,1);
|
||||
Item *item_const= item_equal->get_const();
|
||||
Item_equal_iterator it(*item_equal);
|
||||
Item *head;
|
||||
|
@ -6685,9 +6682,14 @@ static Item *eliminate_item_equal(COND *cond, COND_EQUAL *upper_levels,
|
|||
}
|
||||
|
||||
if (!cond && !eq_list.head())
|
||||
{
|
||||
if (!eq_item)
|
||||
return new Item_int((longlong) 1,1);
|
||||
return eq_item;
|
||||
}
|
||||
|
||||
eq_list.push_back(eq_item);
|
||||
if (eq_item)
|
||||
eq_list.push_back(eq_item);
|
||||
if (!cond)
|
||||
cond= new Item_cond_and(eq_list);
|
||||
else
|
||||
|
|
Loading…
Add table
Reference in a new issue