diff options
-rw-r--r-- | heap/hp_open.c | 9 | ||||
-rw-r--r-- | mysql-test/r/heap.result | 14 | ||||
-rw-r--r-- | mysql-test/t/heap.test | 9 |
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 # |