diff options
author | unknown <istruewing@stella.local> | 2008-01-15 12:51:51 +0100 |
---|---|---|
committer | unknown <istruewing@stella.local> | 2008-01-15 12:51:51 +0100 |
commit | 543cee3ea4119f9b00f38dd20adf2bad66e0f445 (patch) | |
tree | 68123483c78de9214bf60e7b6a71571d0be97b8c | |
parent | 99e49a34d4eab1d110645edeafbb04044a15812b (diff) | |
parent | 18a7ec307977df75160e071b57355404a09e8e96 (diff) | |
download | mariadb-git-543cee3ea4119f9b00f38dd20adf2bad66e0f445.tar.gz |
Merge stella.local:/home2/mydev/mysql-5.0-axmrg
into stella.local:/home2/mydev/mysql-5.1-axmrg
mysql-test/t/myisam.test:
Auto merged
storage/myisam/mi_open.c:
Auto merged
mysql-test/r/myisam.result:
Manual merge from 5.0
-rw-r--r-- | mysql-test/r/myisam.result | 10 | ||||
-rw-r--r-- | mysql-test/t/myisam.test | 13 | ||||
-rw-r--r-- | storage/myisam/mi_open.c | 11 |
3 files changed, 33 insertions, 1 deletions
diff --git a/mysql-test/r/myisam.result b/mysql-test/r/myisam.result index a18018657e0..6863259aa9a 100644 --- a/mysql-test/r/myisam.result +++ b/mysql-test/r/myisam.result @@ -1809,6 +1809,16 @@ CHECK TABLE t1 EXTENDED; Table Op Msg_type Msg_text test.t1 check status OK DROP TABLE t1; +CREATE TABLE t1 ( +c1 CHAR(255) CHARACTER SET UCS2 COLLATE UCS2_BIN NOT NULL, +KEY(c1) +) ENGINE=MyISAM; +INSERT INTO t1 VALUES ('marshall\'s'); +INSERT INTO t1 VALUES ('marsh'); +CHECK TABLE t1 EXTENDED; +Table Op Msg_type Msg_text +test.t1 check status OK +DROP TABLE t1; CREATE TABLE t1 (id int NOT NULL, ref int NOT NULL, INDEX (id)) ENGINE=MyISAM; CREATE TABLE t2 LIKE t1; INSERT INTO t2 (id, ref) VALUES (1,3), (2,1), (3,2), (4,5), (4,4); diff --git a/mysql-test/t/myisam.test b/mysql-test/t/myisam.test index bb2c295eac2..5d08293853e 100644 --- a/mysql-test/t/myisam.test +++ b/mysql-test/t/myisam.test @@ -1153,6 +1153,19 @@ CHECK TABLE t1 EXTENDED; DROP TABLE t1; # +# Bug#32705 - myisam corruption: Key in wrong position +# at page 1024 with ucs2_bin +# +CREATE TABLE t1 ( + c1 CHAR(255) CHARACTER SET UCS2 COLLATE UCS2_BIN NOT NULL, + KEY(c1) + ) ENGINE=MyISAM; +INSERT INTO t1 VALUES ('marshall\'s'); +INSERT INTO t1 VALUES ('marsh'); +CHECK TABLE t1 EXTENDED; +DROP TABLE t1; + +# # Bug#28837: MyISAM storage engine error (134) doing delete with self-join # diff --git a/storage/myisam/mi_open.c b/storage/myisam/mi_open.c index a4f6e1291db..de42bdcd53d 100644 --- a/storage/myisam/mi_open.c +++ b/storage/myisam/mi_open.c @@ -815,8 +815,17 @@ static void setup_key_functions(register MI_KEYDEF *keyinfo) keyinfo->get_key= _mi_get_pack_key; if (keyinfo->seg[0].flag & HA_PACK_KEY) { /* Prefix compression */ + /* + _mi_prefix_search() compares end-space against ASCII blank (' '). + It cannot be used for character sets, that do not encode the + blank character like ASCII does. UCS2 is an example. All + character sets with a fixed width > 1 or a mimimum width > 1 + cannot represent blank like ASCII does. In these cases we have + to use _mi_seq_search() for the search. + */ if (!keyinfo->seg->charset || use_strnxfrm(keyinfo->seg->charset) || - (keyinfo->seg->flag & HA_NULL_PART)) + (keyinfo->seg->flag & HA_NULL_PART) || + (keyinfo->seg->charset->mbminlen > 1)) keyinfo->bin_search=_mi_seq_search; else keyinfo->bin_search=_mi_prefix_search; |