mirror of
https://github.com/MariaDB/server.git
synced 2025-08-01 03:47:19 +03:00
Merge rurik.mysql.com:/home/igor/mysql-4.1-opt
into rurik.mysql.com:/home/igor/mysql-5.0-opt
This commit is contained in:
@ -1112,6 +1112,46 @@ check table t1;
|
|||||||
Table Op Msg_type Msg_text
|
Table Op Msg_type Msg_text
|
||||||
test.t1 check status OK
|
test.t1 check status OK
|
||||||
drop table t1;
|
drop table t1;
|
||||||
|
SET NAMES utf8;
|
||||||
|
CREATE TABLE t1 (id int PRIMARY KEY,
|
||||||
|
a varchar(16) collate utf8_unicode_ci NOT NULL default '',
|
||||||
|
b int,
|
||||||
|
f varchar(128) default 'XXX',
|
||||||
|
INDEX (a(4))
|
||||||
|
) ENGINE=MyISAM DEFAULT CHARSET=utf8 COLLATE=utf8_unicode_ci;
|
||||||
|
INSERT INTO t1(id, a, b) VALUES
|
||||||
|
(1, 'cccc', 50), (2, 'cccc', 70), (3, 'cccc', 30),
|
||||||
|
(4, 'cccc', 30), (5, 'cccc', 20), (6, 'bbbbbb', 40),
|
||||||
|
(7, 'dddd', 30), (8, 'aaaa', 10), (9, 'aaaa', 50),
|
||||||
|
(10, 'eeeee', 40), (11, 'bbbbbb', 60);
|
||||||
|
SELECT id, a, b FROM t1;
|
||||||
|
id a b
|
||||||
|
1 cccc 50
|
||||||
|
2 cccc 70
|
||||||
|
3 cccc 30
|
||||||
|
4 cccc 30
|
||||||
|
5 cccc 20
|
||||||
|
6 bbbbbb 40
|
||||||
|
7 dddd 30
|
||||||
|
8 aaaa 10
|
||||||
|
9 aaaa 50
|
||||||
|
10 eeeee 40
|
||||||
|
11 bbbbbb 60
|
||||||
|
SELECT id, a, b FROM t1 WHERE a BETWEEN 'aaaa' AND 'bbbbbb';
|
||||||
|
id a b
|
||||||
|
8 aaaa 10
|
||||||
|
9 aaaa 50
|
||||||
|
6 bbbbbb 40
|
||||||
|
11 bbbbbb 60
|
||||||
|
SELECT id, a FROM t1 WHERE a='bbbbbb';
|
||||||
|
id a
|
||||||
|
6 bbbbbb
|
||||||
|
11 bbbbbb
|
||||||
|
SELECT id, a FROM t1 WHERE a='bbbbbb' ORDER BY b;
|
||||||
|
id a
|
||||||
|
6 bbbbbb
|
||||||
|
11 bbbbbb
|
||||||
|
DROP TABLE t1;
|
||||||
CREATE TABLE t1(id varchar(20) NOT NULL) DEFAULT CHARSET=utf8;
|
CREATE TABLE t1(id varchar(20) NOT NULL) DEFAULT CHARSET=utf8;
|
||||||
INSERT INTO t1 VALUES ('xxx'), ('aa'), ('yyy'), ('aa');
|
INSERT INTO t1 VALUES ('xxx'), ('aa'), ('yyy'), ('aa');
|
||||||
SELECT id FROM t1;
|
SELECT id FROM t1;
|
||||||
|
@ -912,6 +912,32 @@ INSERT INTO t1 VALUES('uUABCDEFGHIGKLMNOPRSTUVWXYZ̈bbbbbbbbbbbbbbbbbbbbbbbbbbbb
|
|||||||
check table t1;
|
check table t1;
|
||||||
drop table t1;
|
drop table t1;
|
||||||
|
|
||||||
|
#
|
||||||
|
# Bug#14896: Comparison with a key in a partial index over mb chararacter field
|
||||||
|
#
|
||||||
|
|
||||||
|
SET NAMES utf8;
|
||||||
|
CREATE TABLE t1 (id int PRIMARY KEY,
|
||||||
|
a varchar(16) collate utf8_unicode_ci NOT NULL default '',
|
||||||
|
b int,
|
||||||
|
f varchar(128) default 'XXX',
|
||||||
|
INDEX (a(4))
|
||||||
|
) ENGINE=MyISAM DEFAULT CHARSET=utf8 COLLATE=utf8_unicode_ci;
|
||||||
|
INSERT INTO t1(id, a, b) VALUES
|
||||||
|
(1, 'cccc', 50), (2, 'cccc', 70), (3, 'cccc', 30),
|
||||||
|
(4, 'cccc', 30), (5, 'cccc', 20), (6, 'bbbbbb', 40),
|
||||||
|
(7, 'dddd', 30), (8, 'aaaa', 10), (9, 'aaaa', 50),
|
||||||
|
(10, 'eeeee', 40), (11, 'bbbbbb', 60);
|
||||||
|
|
||||||
|
SELECT id, a, b FROM t1;
|
||||||
|
|
||||||
|
SELECT id, a, b FROM t1 WHERE a BETWEEN 'aaaa' AND 'bbbbbb';
|
||||||
|
|
||||||
|
SELECT id, a FROM t1 WHERE a='bbbbbb';
|
||||||
|
SELECT id, a FROM t1 WHERE a='bbbbbb' ORDER BY b;
|
||||||
|
|
||||||
|
DROP TABLE t1;
|
||||||
|
|
||||||
# End of 4.1 tests
|
# End of 4.1 tests
|
||||||
|
|
||||||
#
|
#
|
||||||
|
21
sql/field.cc
21
sql/field.cc
@ -6044,17 +6044,6 @@ int Field_string::cmp(const char *a_ptr, const char *b_ptr)
|
|||||||
{
|
{
|
||||||
uint a_len, b_len;
|
uint a_len, b_len;
|
||||||
|
|
||||||
if (field_charset->strxfrm_multiply > 1)
|
|
||||||
{
|
|
||||||
/*
|
|
||||||
We have to remove end space to be able to compare multi-byte-characters
|
|
||||||
like in latin_de 'ae' and 0xe4
|
|
||||||
*/
|
|
||||||
return field_charset->coll->strnncollsp(field_charset,
|
|
||||||
(const uchar*) a_ptr, field_length,
|
|
||||||
(const uchar*) b_ptr,
|
|
||||||
field_length, 0);
|
|
||||||
}
|
|
||||||
if (field_charset->mbmaxlen != 1)
|
if (field_charset->mbmaxlen != 1)
|
||||||
{
|
{
|
||||||
uint char_len= field_length/field_charset->mbmaxlen;
|
uint char_len= field_length/field_charset->mbmaxlen;
|
||||||
@ -6063,8 +6052,14 @@ int Field_string::cmp(const char *a_ptr, const char *b_ptr)
|
|||||||
}
|
}
|
||||||
else
|
else
|
||||||
a_len= b_len= field_length;
|
a_len= b_len= field_length;
|
||||||
return my_strnncoll(field_charset,(const uchar*) a_ptr, a_len,
|
/*
|
||||||
(const uchar*) b_ptr, b_len);
|
We have to remove end space to be able to compare multi-byte-characters
|
||||||
|
like in latin_de 'ae' and 0xe4
|
||||||
|
*/
|
||||||
|
return field_charset->coll->strnncollsp(field_charset,
|
||||||
|
(const uchar*) a_ptr, a_len,
|
||||||
|
(const uchar*) b_ptr, b_len,
|
||||||
|
0);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
@ -569,10 +569,6 @@ static bool matching_cond(bool max_fl, TABLE_REF *ref, KEY *keyinfo,
|
|||||||
break; // Found a part od the key for the field
|
break; // Found a part od the key for the field
|
||||||
}
|
}
|
||||||
|
|
||||||
#if 0
|
|
||||||
if (part->length != (((Item_field*) args[0])->field)->field_length)
|
|
||||||
return 0;
|
|
||||||
#endif
|
|
||||||
bool is_field_part= part == field_part;
|
bool is_field_part= part == field_part;
|
||||||
if (!(is_field_part || eq_type))
|
if (!(is_field_part || eq_type))
|
||||||
return 0;
|
return 0;
|
||||||
|
Reference in New Issue
Block a user