diff options
author | unknown <sergefp@mysql.com> | 2005-04-17 02:06:17 +0400 |
---|---|---|
committer | unknown <sergefp@mysql.com> | 2005-04-17 02:06:17 +0400 |
commit | 3c112262b51280ecbf1a625d2f39d8fc41355e01 (patch) | |
tree | 6fd36edbe5ea19d489d1a930379d1204161d34f8 | |
parent | ec280d6ffb908535cc5bf5dd279fc926a37301d9 (diff) | |
parent | 6b00231421ad954d207dd9a48518234145eb71a3 (diff) | |
download | mariadb-git-3c112262b51280ecbf1a625d2f39d8fc41355e01.tar.gz |
Merge spetrunia@bk-internal.mysql.com:/home/bk/mysql-4.1
into mysql.com:/home/psergey/mysql-4.1-look-range
-rw-r--r-- | mysql-test/r/range.result | 19 | ||||
-rw-r--r-- | mysql-test/t/range.test | 21 | ||||
-rw-r--r-- | sql/opt_range.cc | 1 |
3 files changed, 41 insertions, 0 deletions
diff --git a/mysql-test/r/range.result b/mysql-test/r/range.result index fc2b4a78469..afd91ce5fe9 100644 --- a/mysql-test/r/range.result +++ b/mysql-test/r/range.result @@ -577,3 +577,22 @@ id select_type table type possible_keys key key_len ref rows Extra explain select * from t1 where a='aaa' collate latin1_german1_ci; id select_type table type possible_keys key key_len ref rows Extra 1 SIMPLE t1 ALL a NULL NULL NULL 9 Using where +drop table t1; +CREATE TABLE t1 ( +`CLIENT` char(3) character set latin1 collate latin1_bin NOT NULL default '000', +`ARG1` char(3) character set latin1 collate latin1_bin NOT NULL default '', +`ARG2` char(3) character set latin1 collate latin1_bin NOT NULL default '', +`FUNCTION` varchar(10) character set latin1 collate latin1_bin NOT NULL default '', +`FUNCTINT` int(11) NOT NULL default '0', +KEY `VERI_CLNT~2` (`ARG1`) +) ENGINE=InnoDB DEFAULT CHARSET=latin1; +INSERT INTO t1 VALUES ('000',' 0',' 0','Text 001',0), ('000',' 0',' 1','Text 002',0), +('000',' 1',' 2','Text 003',0), ('000',' 2',' 3','Text 004',0), +('001',' 3',' 0','Text 017',0); +SELECT count(*) FROM t1 WHERE CLIENT='000' AND (ARG1 != ' 1' OR ARG1 != ' 2'); +count(*) +4 +SELECT count(*) FROM t1 WHERE CLIENT='000' AND (ARG1 != ' 2' OR ARG1 != ' 1'); +count(*) +4 +drop table t1; diff --git a/mysql-test/t/range.test b/mysql-test/t/range.test index 44f55da5722..3d3d4748fe3 100644 --- a/mysql-test/t/range.test +++ b/mysql-test/t/range.test @@ -445,3 +445,24 @@ explain select * from t1 where a=binary 'aaa'; explain select * from t1 where a='aaa' collate latin1_bin; # this one cannot: explain select * from t1 where a='aaa' collate latin1_german1_ci; +drop table t1; + +# Test for BUG#9348 "result for WHERE A AND (B OR C) differs from WHERE a AND (C OR B)" +CREATE TABLE t1 ( + `CLIENT` char(3) character set latin1 collate latin1_bin NOT NULL default '000', + `ARG1` char(3) character set latin1 collate latin1_bin NOT NULL default '', + `ARG2` char(3) character set latin1 collate latin1_bin NOT NULL default '', + `FUNCTION` varchar(10) character set latin1 collate latin1_bin NOT NULL default '', + `FUNCTINT` int(11) NOT NULL default '0', + KEY `VERI_CLNT~2` (`ARG1`) +) ENGINE=InnoDB DEFAULT CHARSET=latin1; + +INSERT INTO t1 VALUES ('000',' 0',' 0','Text 001',0), ('000',' 0',' 1','Text 002',0), + ('000',' 1',' 2','Text 003',0), ('000',' 2',' 3','Text 004',0), + ('001',' 3',' 0','Text 017',0); + +SELECT count(*) FROM t1 WHERE CLIENT='000' AND (ARG1 != ' 1' OR ARG1 != ' 2'); + +SELECT count(*) FROM t1 WHERE CLIENT='000' AND (ARG1 != ' 2' OR ARG1 != ' 1'); +drop table t1; + diff --git a/sql/opt_range.cc b/sql/opt_range.cc index d25901e56b1..e2cae0598a0 100644 --- a/sql/opt_range.cc +++ b/sql/opt_range.cc @@ -1683,6 +1683,7 @@ key_or(SEL_ARG *key1,SEL_ARG *key2) last=last->next; key1=key1->tree_delete(save); } + last->copy_min(tmp); if (last->copy_min(key2) || last->copy_max(key2)) { // Full range key1->free_tree(); |