summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--heap/hp_open.c9
-rw-r--r--mysql-test/r/heap.result14
-rw-r--r--mysql-test/t/heap.test9
3 files changed, 29 insertions, 3 deletions
diff --git a/heap/hp_open.c b/heap/hp_open.c
index 1bb28e5ffdf..ec8b5fea904 100644
--- a/heap/hp_open.c
+++ b/heap/hp_open.c
@@ -46,9 +46,12 @@ HP_INFO *heap_open(const char *name, int mode, uint keys, HP_KEYDEF *keydef,
for (j=length=0 ; j < keydef[i].keysegs; j++)
{
length+=keydef[i].seg[j].length;
- if (keydef[i].seg[j].null_bit &&
- !(keydef[i].flag & HA_NULL_ARE_EQUAL))
- keydef[i].flag |= HA_NULL_PART_KEY;
+ if (keydef[i].seg[j].null_bit)
+ {
+ length++;
+ if (!(keydef[i].flag & HA_NULL_ARE_EQUAL))
+ keydef[i].flag |= HA_NULL_PART_KEY;
+ }
}
keydef[i].length=length;
if (length > max_length)
diff --git a/mysql-test/r/heap.result b/mysql-test/r/heap.result
index a04ddf3f302..bdf7dc225f3 100644
--- a/mysql-test/r/heap.result
+++ b/mysql-test/r/heap.result
@@ -197,6 +197,20 @@ a b
INSERT INTO t1 VALUES (1,3);
Duplicate entry '3' for key 1
DROP TABLE t1;
+CREATE TABLE t1 (
+a int default NULL,
+key a (a)
+) TYPE=HEAP;
+INSERT INTO t1 VALUES (10), (10), (10);
+EXPLAIN SELECT * FROM t1 WHERE a=10;
+table type possible_keys key key_len ref rows Extra
+t1 ref a a 5 const 10 Using where
+SELECT * FROM t1 WHERE a=10;
+a
+10
+10
+10
+DROP TABLE t1;
CREATE TABLE t1 (a int not null, primary key(a)) type=heap;
INSERT into t1 values (1),(2),(3),(4),(5),(6),(7),(8),(9),(10),(11);
DELETE from t1 where a < 100;
diff --git a/mysql-test/t/heap.test b/mysql-test/t/heap.test
index d1e647ae182..b2de58ca083 100644
--- a/mysql-test/t/heap.test
+++ b/mysql-test/t/heap.test
@@ -129,6 +129,15 @@ SELECT * FROM t1 WHERE b<=>NULL;
INSERT INTO t1 VALUES (1,3);
DROP TABLE t1;
+CREATE TABLE t1 (
+ a int default NULL,
+ key a (a)
+) TYPE=HEAP;
+INSERT INTO t1 VALUES (10), (10), (10);
+EXPLAIN SELECT * FROM t1 WHERE a=10;
+SELECT * FROM t1 WHERE a=10;
+DROP TABLE t1;
+
#
# Test when deleting all rows
#