diff options
-rw-r--r-- | mysql-test/r/heap.result | 6 | ||||
-rw-r--r-- | mysql-test/r/key.result | 8 | ||||
-rw-r--r-- | mysql-test/r/ps.result | 6 | ||||
-rw-r--r-- | mysql-test/t/heap.test | 10 | ||||
-rw-r--r-- | mysql-test/t/key.test | 11 | ||||
-rw-r--r-- | mysql-test/t/ps.test | 13 | ||||
-rw-r--r-- | sql/ha_heap.cc | 3 |
7 files changed, 56 insertions, 1 deletions
diff --git a/mysql-test/r/heap.result b/mysql-test/r/heap.result index c49c9abb368..92b694b5117 100644 --- a/mysql-test/r/heap.result +++ b/mysql-test/r/heap.result @@ -227,3 +227,9 @@ SELECT MAX(job_title_id) FROM job_titles; MAX(job_title_id) NULL DROP TABLE job_titles; +CREATE TABLE t1 (a INT NOT NULL, B INT, KEY(B)) ENGINE=HEAP; +INSERT INTO t1 VALUES(1,1), (1,NULL); +SELECT * FROM t1 WHERE B is not null; +a B +1 1 +DROP TABLE t1; diff --git a/mysql-test/r/key.result b/mysql-test/r/key.result index 89307cf7080..e3b341fcaf8 100644 --- a/mysql-test/r/key.result +++ b/mysql-test/r/key.result @@ -296,4 +296,12 @@ Table Op Msg_type Msg_text test.t1 check status OK select c1 from t1 where c2='\Z\Z\Z\Z'; c1 +truncate table t1; +insert into t1 values(1,"aaaa"),(2,"aaab"),(3,"aaac"),(4,"aaccc"); +delete from t1 where c1=3; +delete from t1 where c1=1; +delete from t1 where c1=4; +check table t1; +Table Op Msg_type Msg_text +test.t1 check status OK drop table t1; diff --git a/mysql-test/r/ps.result b/mysql-test/r/ps.result index e1391a496c6..6cad58282a2 100644 --- a/mysql-test/r/ps.result +++ b/mysql-test/r/ps.result @@ -450,3 +450,9 @@ found_rows() 10 deallocate prepare stmt; drop table t1; +CREATE TABLE t1 (N int, M tinyint); +INSERT INTO t1 VALUES (1,0),(1,0),(2,0),(2,0),(3,0); +PREPARE stmt FROM 'UPDATE t1 AS P1 INNER JOIN (SELECT N FROM t1 GROUP BY N HAVING COUNT(M) > 1) AS P2 ON P1.N = P2.N SET P1.M = 2'; +EXECUTE stmt; +DEALLOCATE PREPARE stmt; +DROP TABLE t1; diff --git a/mysql-test/t/heap.test b/mysql-test/t/heap.test index 37fc5a43227..e1776245d9e 100644 --- a/mysql-test/t/heap.test +++ b/mysql-test/t/heap.test @@ -164,3 +164,13 @@ CREATE TABLE `job_titles` ( SELECT MAX(job_title_id) FROM job_titles; DROP TABLE job_titles; + +# +# Test of delete with NOT NULL +# (Bug #6082) +# + +CREATE TABLE t1 (a INT NOT NULL, B INT, KEY(B)) ENGINE=HEAP; +INSERT INTO t1 VALUES(1,1), (1,NULL); +SELECT * FROM t1 WHERE B is not null; +DROP TABLE t1; diff --git a/mysql-test/t/key.test b/mysql-test/t/key.test index 620b8e415b8..662baa5ea9d 100644 --- a/mysql-test/t/key.test +++ b/mysql-test/t/key.test @@ -272,5 +272,16 @@ select c1 from t1 where c2='\Z\Z\Z\Z'; DELETE FROM t1 WHERE (c1 = 3); check table t1; select c1 from t1 where c2='\Z\Z\Z\Z'; + +# +# test delete of keys in a different order +# +truncate table t1; +insert into t1 values(1,"aaaa"),(2,"aaab"),(3,"aaac"),(4,"aaccc"); +delete from t1 where c1=3; +delete from t1 where c1=1; +delete from t1 where c1=4; +check table t1; + drop table t1; diff --git a/mysql-test/t/ps.test b/mysql-test/t/ps.test index 76da86dc6df..978ce2bc2c3 100644 --- a/mysql-test/t/ps.test +++ b/mysql-test/t/ps.test @@ -449,3 +449,16 @@ execute stmt; select found_rows(); deallocate prepare stmt; drop table t1; + +# +# Bug#6047 "permission problem when executing mysql_stmt_execute with derived +# table" +# + +CREATE TABLE t1 (N int, M tinyint); +INSERT INTO t1 VALUES (1,0),(1,0),(2,0),(2,0),(3,0); +PREPARE stmt FROM 'UPDATE t1 AS P1 INNER JOIN (SELECT N FROM t1 GROUP BY N HAVING COUNT(M) > 1) AS P2 ON P1.N = P2.N SET P1.M = 2'; +EXECUTE stmt; +DEALLOCATE PREPARE stmt; +DROP TABLE t1; + diff --git a/sql/ha_heap.cc b/sql/ha_heap.cc index 9344bfc0c8c..19b15c6fbcc 100644 --- a/sql/ha_heap.cc +++ b/sql/ha_heap.cc @@ -378,7 +378,8 @@ ha_rows ha_heap::records_in_range(uint inx, key_range *min_key, if (key->algorithm == HA_KEY_ALG_BTREE) return hp_rb_records_in_range(file, inx, min_key, max_key); - if (min_key->length != max_key->length || + if (!min_key || !max_key || + min_key->length != max_key->length || min_key->length != key->key_length || min_key->flag != HA_READ_KEY_EXACT || max_key->flag != HA_READ_AFTER_KEY) |