diff options
author | unknown <igor@rurik.mysql.com> | 2005-07-16 08:19:20 -0700 |
---|---|---|
committer | unknown <igor@rurik.mysql.com> | 2005-07-16 08:19:20 -0700 |
commit | e2bd74015c5cda61912b265c408471ef6a4293d2 (patch) | |
tree | a5c1d0f3c03176cf88739d5d3fb73d6b9a21f29c | |
parent | 7bdc4dd0a1fb5f4140aeb00a3e6582395fd9a516 (diff) | |
download | mariadb-git-e2bd74015c5cda61912b265c408471ef6a4293d2.tar.gz |
opt_range.cc:
Fixed bug #11853.
Corrected the code of the range optimization for
NOT IN and NOT BETWEEN.
range.test, range.result:
Fixed bug #11853.
mysql-test/t/range.test:
Fixed bug #11853.
sql/opt_range.cc:
Fixed bug #11853.
Corrected the code of the range optimization for
NOT IN and NOT BETWEEN.
-rw-r--r-- | mysql-test/r/range.result | 24 | ||||
-rw-r--r-- | mysql-test/t/range.test | 23 | ||||
-rw-r--r-- | sql/opt_range.cc | 3 |
3 files changed, 49 insertions, 1 deletions
diff --git a/mysql-test/r/range.result b/mysql-test/r/range.result index 6f9b4e41b22..e8e30b3653a 100644 --- a/mysql-test/r/range.result +++ b/mysql-test/r/range.result @@ -744,3 +744,27 @@ a b 1 3 DROP VIEW v1; DROP TABLE t1; +CREATE TABLE t1 (name varchar(15) NOT NULL, KEY idx(name)); +INSERT INTO t1 VALUES ('Betty'), ('Anna'); +SELECT * FROM t1; +name +Anna +Betty +DELETE FROM t1 WHERE name NOT LIKE 'A%a'; +SELECT * FROM t1; +name +Anna +DROP TABLE t1; +CREATE TABLE t1 (a int, KEY idx(a)); +INSERT INTO t1 VALUES (NULL), (1), (2), (3); +SELECT * FROM t1; +a +NULL +1 +2 +3 +DELETE FROM t1 WHERE NOT(a <=> 2); +SELECT * FROM t1; +a +2 +DROP TABLE t1; diff --git a/mysql-test/t/range.test b/mysql-test/t/range.test index 3d2285b1633..065cef659b8 100644 --- a/mysql-test/t/range.test +++ b/mysql-test/t/range.test @@ -553,3 +553,26 @@ SELECT a,b FROM v1 WHERE a < 2 and b=3; DROP VIEW v1; DROP TABLE t1; + +# +# Bug #11853: DELETE statement with a NOT (LIKE/<=>) where condition +# for an indexed attribute +# + +CREATE TABLE t1 (name varchar(15) NOT NULL, KEY idx(name)); +INSERT INTO t1 VALUES ('Betty'), ('Anna'); + +SELECT * FROM t1; +DELETE FROM t1 WHERE name NOT LIKE 'A%a'; +SELECT * FROM t1; + +DROP TABLE t1; + +CREATE TABLE t1 (a int, KEY idx(a)); +INSERT INTO t1 VALUES (NULL), (1), (2), (3); + +SELECT * FROM t1; +DELETE FROM t1 WHERE NOT(a <=> 2); +SELECT * FROM t1; + +DROP TABLE t1; diff --git a/sql/opt_range.cc b/sql/opt_range.cc index c2760b08b6e..676f8d8a33d 100644 --- a/sql/opt_range.cc +++ b/sql/opt_range.cc @@ -3531,7 +3531,8 @@ static SEL_TREE *get_mm_tree(PARAM *param,COND *cond) if (arg->type() != Item::FUNC_ITEM) DBUG_RETURN(0); cond_func= (Item_func*) arg; - if (cond_func->select_optimize() == Item_func::OPTIMIZE_NONE) + if (cond_func->functype() != Item_func::BETWEEN && + cond_func->functype() != Item_func::IN_FUNC) DBUG_RETURN(0); inv= TRUE; } |