Loading myisam/mi_key.c +8 −7 Original line number Diff line number Diff line Loading @@ -52,7 +52,7 @@ static int _mi_put_key_in_record(MI_INFO *info,uint keynr,byte *record); uint _mi_make_key(register MI_INFO *info, uint keynr, uchar *key, const byte *record, my_off_t filepos) { byte *pos,*end; byte *pos; uchar *start; reg1 HA_KEYSEG *keyseg; my_bool is_ft= info->s->keyinfo[keynr].flag & HA_FULLTEXT; Loading Loading @@ -107,18 +107,17 @@ uint _mi_make_key(register MI_INFO *info, uint keynr, uchar *key, } if (keyseg->flag & HA_SPACE_PACK) { end= pos + length; if (type != HA_KEYTYPE_NUM) { while (end > pos && end[-1] == ' ') end--; length= cs->cset->lengthsp(cs, pos, length); } else { byte *end= pos + length; while (pos < end && pos[0] == ' ') pos++; } length=(uint) (end-pos); } FIX_LENGTH(cs, pos, length, char_length); store_key_length_inc(key,char_length); memcpy((byte*) key,(byte*) pos,(size_t) char_length); Loading Loading @@ -404,7 +403,9 @@ static int _mi_put_key_in_record(register MI_INFO *info, uint keynr, if (keyseg->type != (int) HA_KEYTYPE_NUM) { memcpy(pos,key,(size_t) length); bfill(pos+length,keyseg->length-length,' '); keyseg->charset->cset->fill(keyseg->charset, pos + length, keyseg->length - length, ' '); } else { Loading myisam/mi_open.c +2 −0 Original line number Diff line number Diff line Loading @@ -336,6 +336,8 @@ MI_INFO *mi_open(const char *name, int mode, uint open_flags) goto err; } } else if (pos->type == HA_KEYTYPE_BINARY) pos->charset= &my_charset_bin; } if (share->keyinfo[i].flag & HA_SPATIAL) { Loading mysql-test/r/ctype_ucs.result +22 −0 Original line number Diff line number Diff line Loading @@ -723,6 +723,28 @@ lily river drop table t1; deallocate prepare stmt; create table t1 ( a char(10) unicode not null, index a (a) ) engine=myisam; insert into t1 values (repeat(0x201f, 10)); insert into t1 values (repeat(0x2020, 10)); insert into t1 values (repeat(0x2021, 10)); explain select hex(a) from t1 order by a; id select_type table type possible_keys key key_len ref rows Extra 1 SIMPLE t1 index NULL a 20 NULL 3 Using index select hex(a) from t1 order by a; hex(a) 201F201F201F201F201F201F201F201F201F201F 2020202020202020202020202020202020202020 2021202120212021202120212021202120212021 alter table t1 drop index a; select hex(a) from t1 order by a; hex(a) 201F201F201F201F201F201F201F201F201F201F 2020202020202020202020202020202020202020 2021202120212021202120212021202120212021 drop table t1; CREATE TABLE t1 (id int, s char(5) CHARACTER SET ucs2 COLLATE ucs2_unicode_ci); INSERT INTO t1 VALUES (1, 'ZZZZZ'), (1, 'ZZZ'), (2, 'ZZZ'), (2, 'ZZZZZ'); SELECT id, MIN(s) FROM t1 GROUP BY id; Loading mysql-test/r/rpl_deadlock.result +23 −15 Original line number Diff line number Diff line Loading @@ -6,7 +6,7 @@ drop table if exists t1,t2,t3,t4,t5,t6,t7,t8,t9; start slave; create table t1 (a int not null, key(a)) engine=innodb; create table t2 (a int not null, key(a)) engine=innodb; create table t3 (a int) engine=innodb; create table t3 (a int unique) engine=innodb; create table t4 (a int) engine=innodb; show variables like 'slave_transaction_retries'; Variable_name Value Loading Loading @@ -35,14 +35,14 @@ begin; select * from t1 for update; a start slave; insert into t2 values(22); insert into t2 values(201); commit; select * from t1; a 1 select * from t2; a 22 201 show slave status; Slave_IO_State # Master_Host 127.0.0.1 Loading @@ -50,7 +50,7 @@ Master_User root Master_Port MASTER_MYPORT Connect_Retry 1 Master_Log_File master-bin.000001 Read_Master_Log_Pos 18911 Read_Master_Log_Pos 18918 Relay_Log_File # Relay_Log_Pos # Relay_Master_Log_File master-bin.000001 Loading @@ -65,7 +65,7 @@ Replicate_Wild_Ignore_Table Last_Errno 0 Last_Error Skip_Counter 0 Exec_Master_Log_Pos 18911 Exec_Master_Log_Pos 18918 Relay_Log_Space # Until_Condition None Until_Log_File Loading @@ -78,12 +78,16 @@ Master_SSL_Cipher Master_SSL_Key Seconds_Behind_Master # stop slave; change master to master_log_pos=532; delete from t3; change master to master_log_pos=539; begin; select * from t2 for update; a 22 201 start slave; select count(*) from t3 /* must be zero */; count(*) 0 commit; select * from t1; a Loading @@ -91,7 +95,7 @@ a 1 select * from t2; a 22 201 show slave status; Slave_IO_State # Master_Host 127.0.0.1 Loading @@ -99,7 +103,7 @@ Master_User root Master_Port MASTER_MYPORT Connect_Retry 1 Master_Log_File master-bin.000001 Read_Master_Log_Pos 18911 Read_Master_Log_Pos 18918 Relay_Log_File # Relay_Log_Pos # Relay_Master_Log_File master-bin.000001 Loading @@ -114,7 +118,7 @@ Replicate_Wild_Ignore_Table Last_Errno 0 Last_Error Skip_Counter 0 Exec_Master_Log_Pos 18911 Exec_Master_Log_Pos 18918 Relay_Log_Space # Until_Condition None Until_Log_File Loading @@ -128,12 +132,16 @@ Master_SSL_Key Seconds_Behind_Master # set global max_relay_log_size=0; stop slave; change master to master_log_pos=532; delete from t3; change master to master_log_pos=539; begin; select * from t2 for update; a 22 201 start slave; select count(*) from t3 /* must be zero */; count(*) 0 commit; select * from t1; a Loading @@ -142,7 +150,7 @@ a 1 select * from t2; a 22 201 show slave status; Slave_IO_State # Master_Host 127.0.0.1 Loading @@ -150,7 +158,7 @@ Master_User root Master_Port MASTER_MYPORT Connect_Retry 1 Master_Log_File master-bin.000001 Read_Master_Log_Pos 18911 Read_Master_Log_Pos 18918 Relay_Log_File # Relay_Log_Pos # Relay_Master_Log_File master-bin.000001 Loading @@ -165,7 +173,7 @@ Replicate_Wild_Ignore_Table Last_Errno 0 Last_Error Skip_Counter 0 Exec_Master_Log_Pos 18911 Exec_Master_Log_Pos 18918 Relay_Log_Space # Until_Condition None Until_Log_File Loading mysql-test/t/ctype_ucs.test +17 −0 Original line number Diff line number Diff line Loading @@ -454,6 +454,23 @@ select utext from t1 where utext like '%%'; drop table t1; deallocate prepare stmt; # # Bug#22052 Trailing spaces are not removed from UNICODE fields in an index # create table t1 ( a char(10) unicode not null, index a (a) ) engine=myisam; insert into t1 values (repeat(0x201f, 10)); insert into t1 values (repeat(0x2020, 10)); insert into t1 values (repeat(0x2021, 10)); # make sure "index read" is used explain select hex(a) from t1 order by a; select hex(a) from t1 order by a; alter table t1 drop index a; select hex(a) from t1 order by a; drop table t1; # # Bug #20076: server crashes for a query with GROUP BY if MIN/MAX aggregation # over a 'ucs2' field uses a temporary table Loading Loading
myisam/mi_key.c +8 −7 Original line number Diff line number Diff line Loading @@ -52,7 +52,7 @@ static int _mi_put_key_in_record(MI_INFO *info,uint keynr,byte *record); uint _mi_make_key(register MI_INFO *info, uint keynr, uchar *key, const byte *record, my_off_t filepos) { byte *pos,*end; byte *pos; uchar *start; reg1 HA_KEYSEG *keyseg; my_bool is_ft= info->s->keyinfo[keynr].flag & HA_FULLTEXT; Loading Loading @@ -107,18 +107,17 @@ uint _mi_make_key(register MI_INFO *info, uint keynr, uchar *key, } if (keyseg->flag & HA_SPACE_PACK) { end= pos + length; if (type != HA_KEYTYPE_NUM) { while (end > pos && end[-1] == ' ') end--; length= cs->cset->lengthsp(cs, pos, length); } else { byte *end= pos + length; while (pos < end && pos[0] == ' ') pos++; } length=(uint) (end-pos); } FIX_LENGTH(cs, pos, length, char_length); store_key_length_inc(key,char_length); memcpy((byte*) key,(byte*) pos,(size_t) char_length); Loading Loading @@ -404,7 +403,9 @@ static int _mi_put_key_in_record(register MI_INFO *info, uint keynr, if (keyseg->type != (int) HA_KEYTYPE_NUM) { memcpy(pos,key,(size_t) length); bfill(pos+length,keyseg->length-length,' '); keyseg->charset->cset->fill(keyseg->charset, pos + length, keyseg->length - length, ' '); } else { Loading
myisam/mi_open.c +2 −0 Original line number Diff line number Diff line Loading @@ -336,6 +336,8 @@ MI_INFO *mi_open(const char *name, int mode, uint open_flags) goto err; } } else if (pos->type == HA_KEYTYPE_BINARY) pos->charset= &my_charset_bin; } if (share->keyinfo[i].flag & HA_SPATIAL) { Loading
mysql-test/r/ctype_ucs.result +22 −0 Original line number Diff line number Diff line Loading @@ -723,6 +723,28 @@ lily river drop table t1; deallocate prepare stmt; create table t1 ( a char(10) unicode not null, index a (a) ) engine=myisam; insert into t1 values (repeat(0x201f, 10)); insert into t1 values (repeat(0x2020, 10)); insert into t1 values (repeat(0x2021, 10)); explain select hex(a) from t1 order by a; id select_type table type possible_keys key key_len ref rows Extra 1 SIMPLE t1 index NULL a 20 NULL 3 Using index select hex(a) from t1 order by a; hex(a) 201F201F201F201F201F201F201F201F201F201F 2020202020202020202020202020202020202020 2021202120212021202120212021202120212021 alter table t1 drop index a; select hex(a) from t1 order by a; hex(a) 201F201F201F201F201F201F201F201F201F201F 2020202020202020202020202020202020202020 2021202120212021202120212021202120212021 drop table t1; CREATE TABLE t1 (id int, s char(5) CHARACTER SET ucs2 COLLATE ucs2_unicode_ci); INSERT INTO t1 VALUES (1, 'ZZZZZ'), (1, 'ZZZ'), (2, 'ZZZ'), (2, 'ZZZZZ'); SELECT id, MIN(s) FROM t1 GROUP BY id; Loading
mysql-test/r/rpl_deadlock.result +23 −15 Original line number Diff line number Diff line Loading @@ -6,7 +6,7 @@ drop table if exists t1,t2,t3,t4,t5,t6,t7,t8,t9; start slave; create table t1 (a int not null, key(a)) engine=innodb; create table t2 (a int not null, key(a)) engine=innodb; create table t3 (a int) engine=innodb; create table t3 (a int unique) engine=innodb; create table t4 (a int) engine=innodb; show variables like 'slave_transaction_retries'; Variable_name Value Loading Loading @@ -35,14 +35,14 @@ begin; select * from t1 for update; a start slave; insert into t2 values(22); insert into t2 values(201); commit; select * from t1; a 1 select * from t2; a 22 201 show slave status; Slave_IO_State # Master_Host 127.0.0.1 Loading @@ -50,7 +50,7 @@ Master_User root Master_Port MASTER_MYPORT Connect_Retry 1 Master_Log_File master-bin.000001 Read_Master_Log_Pos 18911 Read_Master_Log_Pos 18918 Relay_Log_File # Relay_Log_Pos # Relay_Master_Log_File master-bin.000001 Loading @@ -65,7 +65,7 @@ Replicate_Wild_Ignore_Table Last_Errno 0 Last_Error Skip_Counter 0 Exec_Master_Log_Pos 18911 Exec_Master_Log_Pos 18918 Relay_Log_Space # Until_Condition None Until_Log_File Loading @@ -78,12 +78,16 @@ Master_SSL_Cipher Master_SSL_Key Seconds_Behind_Master # stop slave; change master to master_log_pos=532; delete from t3; change master to master_log_pos=539; begin; select * from t2 for update; a 22 201 start slave; select count(*) from t3 /* must be zero */; count(*) 0 commit; select * from t1; a Loading @@ -91,7 +95,7 @@ a 1 select * from t2; a 22 201 show slave status; Slave_IO_State # Master_Host 127.0.0.1 Loading @@ -99,7 +103,7 @@ Master_User root Master_Port MASTER_MYPORT Connect_Retry 1 Master_Log_File master-bin.000001 Read_Master_Log_Pos 18911 Read_Master_Log_Pos 18918 Relay_Log_File # Relay_Log_Pos # Relay_Master_Log_File master-bin.000001 Loading @@ -114,7 +118,7 @@ Replicate_Wild_Ignore_Table Last_Errno 0 Last_Error Skip_Counter 0 Exec_Master_Log_Pos 18911 Exec_Master_Log_Pos 18918 Relay_Log_Space # Until_Condition None Until_Log_File Loading @@ -128,12 +132,16 @@ Master_SSL_Key Seconds_Behind_Master # set global max_relay_log_size=0; stop slave; change master to master_log_pos=532; delete from t3; change master to master_log_pos=539; begin; select * from t2 for update; a 22 201 start slave; select count(*) from t3 /* must be zero */; count(*) 0 commit; select * from t1; a Loading @@ -142,7 +150,7 @@ a 1 select * from t2; a 22 201 show slave status; Slave_IO_State # Master_Host 127.0.0.1 Loading @@ -150,7 +158,7 @@ Master_User root Master_Port MASTER_MYPORT Connect_Retry 1 Master_Log_File master-bin.000001 Read_Master_Log_Pos 18911 Read_Master_Log_Pos 18918 Relay_Log_File # Relay_Log_Pos # Relay_Master_Log_File master-bin.000001 Loading @@ -165,7 +173,7 @@ Replicate_Wild_Ignore_Table Last_Errno 0 Last_Error Skip_Counter 0 Exec_Master_Log_Pos 18911 Exec_Master_Log_Pos 18918 Relay_Log_Space # Until_Condition None Until_Log_File Loading
mysql-test/t/ctype_ucs.test +17 −0 Original line number Diff line number Diff line Loading @@ -454,6 +454,23 @@ select utext from t1 where utext like '%%'; drop table t1; deallocate prepare stmt; # # Bug#22052 Trailing spaces are not removed from UNICODE fields in an index # create table t1 ( a char(10) unicode not null, index a (a) ) engine=myisam; insert into t1 values (repeat(0x201f, 10)); insert into t1 values (repeat(0x2020, 10)); insert into t1 values (repeat(0x2021, 10)); # make sure "index read" is used explain select hex(a) from t1 order by a; select hex(a) from t1 order by a; alter table t1 drop index a; select hex(a) from t1 order by a; drop table t1; # # Bug #20076: server crashes for a query with GROUP BY if MIN/MAX aggregation # over a 'ucs2' field uses a temporary table Loading