summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorunknown <istruewing@stella.local>2008-01-15 12:51:51 +0100
committerunknown <istruewing@stella.local>2008-01-15 12:51:51 +0100
commit543cee3ea4119f9b00f38dd20adf2bad66e0f445 (patch)
tree68123483c78de9214bf60e7b6a71571d0be97b8c
parent99e49a34d4eab1d110645edeafbb04044a15812b (diff)
parent18a7ec307977df75160e071b57355404a09e8e96 (diff)
downloadmariadb-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.result10
-rw-r--r--mysql-test/t/myisam.test13
-rw-r--r--storage/myisam/mi_open.c11
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;