mirror of
https://github.com/MariaDB/server.git
synced 2025-01-29 02:05:57 +01:00
Bug #7878 with utf_general_ci, equals (=) has problem with accent insensitivity
Backporting Monty's fix for 5.0 into 4.1.
This commit is contained in:
parent
5b91c5a73c
commit
cfa78c2645
4 changed files with 35 additions and 2 deletions
|
@ -340,6 +340,7 @@ enum ha_base_keytype {
|
|||
#define HA_STATE_BUFF_SAVED 512 /* If current keybuff is info->buff */
|
||||
#define HA_STATE_ROW_CHANGED 1024 /* To invalide ROW cache */
|
||||
#define HA_STATE_EXTEND_BLOCK 2048
|
||||
#define HA_STATE_RNEXT_SAME 4096 /* rnext_same was called */
|
||||
|
||||
enum en_fieldtype {
|
||||
FIELD_LAST=-1,FIELD_NORMAL,FIELD_SKIP_ENDSPACE,FIELD_SKIP_PRESPACE,
|
||||
|
|
|
@ -57,7 +57,11 @@ int mi_rnext_same(MI_INFO *info, byte *buf)
|
|||
#endif
|
||||
case HA_KEY_ALG_BTREE:
|
||||
default:
|
||||
memcpy(info->lastkey2,info->lastkey,info->last_rkey_length);
|
||||
if (!(info->update & HA_STATE_RNEXT_SAME))
|
||||
{
|
||||
/* First rnext_same; Store old key */
|
||||
memcpy(info->lastkey2,info->lastkey,info->last_rkey_length);
|
||||
}
|
||||
for (;;)
|
||||
{
|
||||
if ((error=_mi_search_next(info,keyinfo,info->lastkey,
|
||||
|
@ -81,7 +85,7 @@ int mi_rnext_same(MI_INFO *info, byte *buf)
|
|||
rw_unlock(&info->s->key_root_lock[inx]);
|
||||
/* Don't clear if database-changed */
|
||||
info->update&= (HA_STATE_CHANGED | HA_STATE_ROW_CHANGED);
|
||||
info->update|= HA_STATE_NEXT_FOUND;
|
||||
info->update|= HA_STATE_NEXT_FOUND | HA_STATE_RNEXT_SAME;
|
||||
|
||||
if (error)
|
||||
{
|
||||
|
|
|
@ -326,3 +326,15 @@ latin1_german2_ci 6109
|
|||
latin1_german2_ci 61
|
||||
latin1_german2_ci 6120
|
||||
drop table t1;
|
||||
SET NAMES latin1;
|
||||
CREATE TABLE t1 (
|
||||
col1 varchar(255) NOT NULL default ''
|
||||
) ENGINE=MyISAM DEFAULT CHARSET=latin1 collate latin1_german2_ci;
|
||||
INSERT INTO t1 VALUES ('ß'),('ss'),('ss');
|
||||
ALTER TABLE t1 ADD KEY ifword(col1);
|
||||
SELECT * FROM t1 WHERE col1='ß' ORDER BY col1, BINARY col1;
|
||||
col1
|
||||
ss
|
||||
ss
|
||||
ß
|
||||
DROP TABLE t1;
|
||||
|
|
|
@ -116,3 +116,19 @@ SELECT FIELD('ue',s1), FIELD('
|
|||
DROP TABLE t1;
|
||||
|
||||
-- source include/ctype_filesort.inc
|
||||
|
||||
#
|
||||
# Bug#7878 with utf8_general_ci, equals (=) has problem with
|
||||
# accent insensitivity.
|
||||
# Although originally this problem was found with UTF8 character set,
|
||||
# '=' behaved wrong for latin1_german2_ci as well.
|
||||
# Let's check it does not work incorrect anymore.
|
||||
#
|
||||
SET NAMES latin1;
|
||||
CREATE TABLE t1 (
|
||||
col1 varchar(255) NOT NULL default ''
|
||||
) ENGINE=MyISAM DEFAULT CHARSET=latin1 collate latin1_german2_ci;
|
||||
INSERT INTO t1 VALUES ('ß'),('ss'),('ss');
|
||||
ALTER TABLE t1 ADD KEY ifword(col1);
|
||||
SELECT * FROM t1 WHERE col1='ß' ORDER BY col1, BINARY col1;
|
||||
DROP TABLE t1;
|
||||
|
|
Loading…
Add table
Reference in a new issue