diff options
author | unknown <sergefp@mysql.com> | 2005-09-23 13:43:20 +0400 |
---|---|---|
committer | unknown <sergefp@mysql.com> | 2005-09-23 13:43:20 +0400 |
commit | 32de973588d71d4cb7a6decf7a83c0554de2a9a1 (patch) | |
tree | 2e801cb6f35588dff5e51605eaa727f593755774 | |
parent | 727f0b8a1f2fdc3f458f6b5da5ebe3cc73620403 (diff) | |
download | mariadb-git-32de973588d71d4cb7a6decf7a83c0554de2a9a1.tar.gz |
Fix for BUG#13419: In "ref" optimizer, take into account that item=Item_func_in(x,y) is
not equivalent to "x=y" when item->negated == TRUE.
mysql-test/r/func_in.result:
Testcase for BUG#13419
mysql-test/t/func_in.test:
Testcase for BUG#13419
sql/sql_select.cc:
Fix for BUG#13419:
* Take into account that item=Item_func_in(x,y) is not equivalent to "x=y" when
item->negated == TRUE.
* Removed comment that is no longer true.
-rw-r--r-- | mysql-test/r/func_in.result | 9 | ||||
-rw-r--r-- | mysql-test/t/func_in.test | 7 | ||||
-rw-r--r-- | sql/sql_select.cc | 4 |
3 files changed, 18 insertions, 2 deletions
diff --git a/mysql-test/r/func_in.result b/mysql-test/r/func_in.result index 516d0a28a21..3cf2afc83d1 100644 --- a/mysql-test/r/func_in.result +++ b/mysql-test/r/func_in.result @@ -193,3 +193,12 @@ select * from t1 where a in (NULL, 'aa'); a aa drop table t1; +create table t1 (id int, key(id)); +insert into t1 values (1),(2),(3); +select count(*) from t1 where id not in (1); +count(*) +2 +select count(*) from t1 where id not in (1,2); +count(*) +1 +drop table t1; diff --git a/mysql-test/t/func_in.test b/mysql-test/t/func_in.test index aec2de7a467..2ffe5a2d5f7 100644 --- a/mysql-test/t/func_in.test +++ b/mysql-test/t/func_in.test @@ -102,4 +102,11 @@ insert into t1 values ('aa'), ('bb'); select * from t1 where a in (NULL, 'aa'); drop table t1; +# BUG#13419 +create table t1 (id int, key(id)); +insert into t1 values (1),(2),(3); +select count(*) from t1 where id not in (1); +select count(*) from t1 where id not in (1,2); +drop table t1; + # End of 4.1 tests diff --git a/sql/sql_select.cc b/sql/sql_select.cc index 59b82b53b32..0d9cab6a36b 100644 --- a/sql/sql_select.cc +++ b/sql/sql_select.cc @@ -2140,7 +2140,6 @@ merge_key_fields(KEY_FIELD *start,KEY_FIELD *new_fields,KEY_FIELD *end, field Field used in comparision eq_func True if we used =, <=> or IS NULL value Value used for comparison with field - Is NULL for BETWEEN and IN usable_tables Tables which can be used for key optimization NOTES @@ -2325,7 +2324,8 @@ add_key_fields(KEY_FIELD **key_fields,uint *and_level, add_key_field(key_fields,*and_level,cond_func, ((Item_field*)(cond_func->key_item()->real_item()))->field, cond_func->argument_count() == 2 && - cond_func->functype() == Item_func::IN_FUNC, + cond_func->functype() == Item_func::IN_FUNC && + !((Item_func_in*)cond_func)->negated, cond_func->arguments()+1, cond_func->argument_count()-1, usable_tables); break; |