summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--mysql-test/r/heap.result6
-rw-r--r--mysql-test/r/key.result8
-rw-r--r--mysql-test/r/ps.result6
-rw-r--r--mysql-test/t/heap.test10
-rw-r--r--mysql-test/t/key.test11
-rw-r--r--mysql-test/t/ps.test13
-rw-r--r--sql/ha_heap.cc3
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)