Below is the list of changes that have just been committed into a local
5.1 repository of kaa. When kaa does a push these changes will
be propagated to the main repository and, within 24 hours after the
push, to the public repository.
For information on how to access the public repository
see http://dev.mysql.com/doc/mysql/en/installing-source-tree.html
ChangeSet@stripped, 2007-05-31 14:58:22+04:00, kaa@stripped +8 -0
Merge polly.local:/home/kaa/src/maint/bug27643/my50-bug27643
into polly.local:/home/kaa/src/maint/bug27643/my51-bug27643
MERGE: 1.1810.2901.3
mysql-test/r/ctype_ucs2_def.result@stripped, 2007-05-31 14:58:16+04:00, kaa@stripped +0 -0
Auto merged
MERGE: 1.3.1.1
mysql-test/r/heap_hash.result@stripped, 2007-05-31 14:58:16+04:00, kaa@stripped +0 -0
Auto merged
MERGE: 1.17.1.4
mysql-test/t/ctype_ucs2_def.test@stripped, 2007-05-31 14:58:16+04:00, kaa@stripped +0 -0
Auto merged
MERGE: 1.3.1.2
mysql-test/t/heap_hash.test@stripped, 2007-05-31 14:58:16+04:00, kaa@stripped +0 -0
Auto merged
MERGE: 1.11.1.1
sql/sql_select.cc@stripped, 2007-05-31 14:58:16+04:00, kaa@stripped +0 -0
Auto merged
MERGE: 1.312.1.204
strings/ctype-bin.c@stripped, 2007-05-31 14:58:16+04:00, kaa@stripped +0 -0
Auto merged
MERGE: 1.66.1.9
strings/ctype-mb.c@stripped, 2007-05-31 14:58:17+04:00, kaa@stripped +0 -0
Auto merged
MERGE: 1.47.1.9
strings/ctype-ucs2.c@stripped, 2007-05-31 14:58:17+04:00, kaa@stripped +0 -0
Auto merged
MERGE: 1.50.1.16
# This is a BitKeeper patch. What follows are the unified diffs for the
# set of deltas contained in the patch. The rest of the patch, the part
# that BitKeeper cares about, is below these diffs.
# User: kaa
# Host: polly.local
# Root: /home/kaa/src/maint/bug27643/my51-bug27643/RESYNC
--- 1.517/sql/sql_select.cc 2007-05-01 12:38:56 +04:00
+++ 1.518/sql/sql_select.cc 2007-05-31 14:58:16 +04:00
@@ -10354,7 +10354,7 @@ bool create_myisam_from_heap(THD *thd, T
err:
DBUG_PRINT("error",("Got error: %d",write_err));
- table->file->print_error(error,MYF(0)); // Give table is full error
+ table->file->print_error(write_err, MYF(0));
(void) table->file->ha_rnd_end();
(void) new_table.file->close();
err1:
--- 1.75/strings/ctype-bin.c 2007-01-24 20:57:04 +03:00
+++ 1.76/strings/ctype-bin.c 2007-05-31 14:58:16 +04:00
@@ -271,6 +271,29 @@ static int my_wc_mb_bin(CHARSET_INFO *cs
}
+void my_hash_sort_8bit_bin(CHARSET_INFO *cs __attribute__((unused)),
+ const uchar *key, uint len,ulong *nr1, ulong *nr2)
+{
+ const uchar *pos = key;
+
+ key+= len;
+
+ /*
+ Remove trailing spaces. We have to do this to be able to compare
+ 'A ' and 'A' as identical
+ */
+ while (key > pos && key[-1] == ' ')
+ key--;
+
+ for (; pos < (uchar*) key ; pos++)
+ {
+ nr1[0]^=(ulong) ((((uint) nr1[0] & 63)+nr2[0]) *
+ ((uint)*pos)) + (nr1[0] << 8);
+ nr2[0]+=3;
+ }
+}
+
+
void my_hash_sort_bin(CHARSET_INFO *cs __attribute__((unused)),
const uchar *key, uint len,ulong *nr1, ulong *nr2)
{
@@ -471,7 +494,7 @@ MY_COLLATION_HANDLER my_collation_8bit_b
my_wildcmp_bin,
my_strcasecmp_bin,
my_instr_bin,
- my_hash_sort_bin,
+ my_hash_sort_8bit_bin,
my_propagate_simple
};
--- 1.68/strings/ctype-ucs2.c 2007-02-27 12:27:00 +03:00
+++ 1.69/strings/ctype-ucs2.c 2007-05-31 14:58:17 +04:00
@@ -1486,7 +1486,10 @@ void my_hash_sort_ucs2_bin(CHARSET_INFO
const uchar *pos = key;
key+= len;
-
+
+ while (key > pos+1 && key[-1] == ' ' && key[-2] == '\0')
+ key-= 2;
+
for (; pos < (uchar*) key ; pos++)
{
nr1[0]^=(ulong) ((((uint) nr1[0] & 63)+nr2[0]) *
--- 1.21/mysql-test/r/heap_hash.result 2006-09-18 14:44:35 +04:00
+++ 1.22/mysql-test/r/heap_hash.result 2007-05-31 14:58:16 +04:00
@@ -366,3 +366,19 @@ explain select a from t1 where a in (1,3
id select_type table type possible_keys key key_len ref rows Extra
1 SIMPLE t1 range a a 5 NULL 4 Using where
drop table t1;
+End of 4.1 tests
+CREATE TABLE t1(col1 VARCHAR(32) CHARACTER SET utf8 COLLATE utf8_bin NOT NULL,
+col2 VARCHAR(32) CHARACTER SET utf8 COLLATE utf8_bin NOT NULL,
+UNIQUE KEY key1 USING HASH (col1, col2)) ENGINE=MEMORY;
+INSERT INTO t1 VALUES('A', 'A');
+INSERT INTO t1 VALUES('A ', 'A ');
+ERROR 23000: Duplicate entry 'A -A ' for key 1
+DROP TABLE t1;
+CREATE TABLE t1(col1 VARCHAR(32) CHARACTER SET latin1 COLLATE latin1_bin NOT NULL,
+col2 VARCHAR(32) CHARACTER SET latin1 COLLATE latin1_bin NOT NULL,
+UNIQUE KEY key1 USING HASH (col1, col2)) ENGINE=MEMORY;
+INSERT INTO t1 VALUES('A', 'A');
+INSERT INTO t1 VALUES('A ', 'A ');
+ERROR 23000: Duplicate entry 'A -A ' for key 1
+DROP TABLE t1;
+End of 5.0 tests
--- 1.12/mysql-test/t/heap_hash.test 2007-01-22 19:42:49 +03:00
+++ 1.13/mysql-test/t/heap_hash.test 2007-05-31 14:58:16 +04:00
@@ -260,4 +260,27 @@ select a from t1 where a in (1,3);
explain select a from t1 where a in (1,3);
drop table t1;
-# End of 4.1 tests
+--echo End of 4.1 tests
+
+#
+# Bug #27643: query failed : 1114 (The table '' is full)
+#
+# Check that HASH indexes disregard trailing spaces when comparing
+# strings with binary collations
+
+CREATE TABLE t1(col1 VARCHAR(32) CHARACTER SET utf8 COLLATE utf8_bin NOT NULL,
+ col2 VARCHAR(32) CHARACTER SET utf8 COLLATE utf8_bin NOT NULL,
+ UNIQUE KEY key1 USING HASH (col1, col2)) ENGINE=MEMORY;
+INSERT INTO t1 VALUES('A', 'A');
+--error ER_DUP_ENTRY
+INSERT INTO t1 VALUES('A ', 'A ');
+DROP TABLE t1;
+CREATE TABLE t1(col1 VARCHAR(32) CHARACTER SET latin1 COLLATE latin1_bin NOT NULL,
+ col2 VARCHAR(32) CHARACTER SET latin1 COLLATE latin1_bin NOT NULL,
+ UNIQUE KEY key1 USING HASH (col1, col2)) ENGINE=MEMORY;
+INSERT INTO t1 VALUES('A', 'A');
+--error ER_DUP_ENTRY
+INSERT INTO t1 VALUES('A ', 'A ');
+DROP TABLE t1;
+
+--echo End of 5.0 tests
--- 1.56/strings/ctype-mb.c 2007-01-24 20:57:04 +03:00
+++ 1.57/strings/ctype-mb.c 2007-05-31 14:58:17 +04:00
@@ -467,6 +467,13 @@ static void my_hash_sort_mb_bin(CHARSET_
key+= len;
+ /*
+ Remove trailing spaces. We have to do this to be able to compare
+ 'A ' and 'A' as identical
+ */
+ while (key > pos && key[-1] == ' ')
+ key--;
+
for (; pos < (uchar*) key ; pos++)
{
nr1[0]^=(ulong) ((((uint) nr1[0] & 63)+nr2[0]) *
--- 1.4/mysql-test/r/ctype_ucs2_def.result 2006-09-05 19:24:59 +04:00
+++ 1.5/mysql-test/r/ctype_ucs2_def.result 2007-05-31 14:58:16 +04:00
@@ -7,3 +7,11 @@ character_set_server ucs2
DROP TABLE IF EXISTS t1;
create table t1 (a int);
drop table t1;
+CREATE TABLE t1(col1 VARCHAR(32) CHARACTER SET ucs2 COLLATE ucs2_bin NOT NULL,
+col2 VARCHAR(32) CHARACTER SET ucs2 COLLATE ucs2_bin NOT NULL,
+UNIQUE KEY key1 USING HASH (col1, col2)) ENGINE=MEMORY;
+INSERT INTO t1 VALUES('A', 'A'), ('B', 'B'), ('C', 'C');
+INSERT INTO t1 VALUES('A ', 'A ');
+ERROR 23000: Duplicate entry '' for key 1
+DROP TABLE t1;
+End of 5.0 tests
--- 1.5/mysql-test/t/ctype_ucs2_def.test 2007-02-19 13:58:13 +03:00
+++ 1.6/mysql-test/t/ctype_ucs2_def.test 2007-05-31 14:58:16 +04:00
@@ -14,3 +14,19 @@ DROP TABLE IF EXISTS t1;
--enable_warnings
create table t1 (a int);
drop table t1;
+
+#
+# Bug #27643: query failed : 1114 (The table '' is full)
+#
+# Check that HASH indexes ignore trailing spaces when comparing
+# strings with the ucs2_bin collation
+
+CREATE TABLE t1(col1 VARCHAR(32) CHARACTER SET ucs2 COLLATE ucs2_bin NOT NULL,
+ col2 VARCHAR(32) CHARACTER SET ucs2 COLLATE ucs2_bin NOT NULL,
+ UNIQUE KEY key1 USING HASH (col1, col2)) ENGINE=MEMORY;
+INSERT INTO t1 VALUES('A', 'A'), ('B', 'B'), ('C', 'C');
+--error ER_DUP_ENTRY
+INSERT INTO t1 VALUES('A ', 'A ');
+DROP TABLE t1;
+
+--echo End of 5.0 tests
| Thread |
|---|
| • bk commit into 5.1 tree (kaa:1.2486) | Alexey Kopytov | 31 May |