mirror of
https://github.com/MariaDB/server.git
synced 2025-08-01 03:47:19 +03:00
Merge ibabaev@bk-internal.mysql.com:/home/bk/mysql-4.1-opt
into rurik.mysql.com:/home/igor/mysql-4.1-opt mysql-test/r/ctype_utf8.result: SCCS merged mysql-test/t/ctype_utf8.test: SCCS merged
This commit is contained in:
@ -1164,3 +1164,70 @@ id a
|
||||
6 bbbbbb
|
||||
11 bbbbbb
|
||||
DROP TABLE t1;
|
||||
SET NAMES utf8;
|
||||
CREATE TABLE t1 (
|
||||
a CHAR(13) DEFAULT '',
|
||||
INDEX(a)
|
||||
) ENGINE=MyISAM DEFAULT CHARSET=utf8 COLLATE=utf8_general_ci;
|
||||
INSERT INTO t1 VALUES
|
||||
('Käli Käli 2-4'), ('Käli Käli 2-4'),
|
||||
('Käli Käli 2+4'), ('Käli Käli 2+4'),
|
||||
('Käli Käli 2-6'), ('Käli Käli 2-6');
|
||||
CREATE TABLE t2 (
|
||||
a CHAR(13) DEFAULT '',
|
||||
INDEX(a)
|
||||
) ENGINE=MyISAM DEFAULT CHARSET=latin1 COLLATE=latin1_general_ci;
|
||||
INSERT INTO t2 VALUES
|
||||
('Kali Kali 2-4'), ('Kali Kali 2-4'),
|
||||
('Kali Kali 2+4'), ('Kali Kali 2+4'),
|
||||
('Kali Kali 2-6'), ('Kali Kali 2-6');
|
||||
SELECT a FROM t1 WHERE a LIKE 'Käli Käli 2+4';
|
||||
a
|
||||
Käli Käli 2+4
|
||||
Käli Käli 2+4
|
||||
SELECT a FROM t2 WHERE a LIKE 'Kali Kali 2+4';
|
||||
a
|
||||
Kali Kali 2+4
|
||||
Kali Kali 2+4
|
||||
EXPLAIN SELECT a FROM t1 WHERE a LIKE 'Käli Käli 2+4';
|
||||
id select_type table type possible_keys key key_len ref rows Extra
|
||||
1 SIMPLE t1 range a a 40 NULL 2 Using where; Using index
|
||||
EXPLAIN SELECT a FROM t1 WHERE a = 'Käli Käli 2+4';
|
||||
id select_type table type possible_keys key key_len ref rows Extra
|
||||
1 SIMPLE t1 ref a a 40 const 2 Using where; Using index
|
||||
EXPLAIN SELECT a FROM t2 WHERE a LIKE 'Kali Kali 2+4';
|
||||
id select_type table type possible_keys key key_len ref rows Extra
|
||||
1 SIMPLE t2 range a a 14 NULL 2 Using where; Using index
|
||||
EXPLAIN SELECT a FROM t2 WHERE a = 'Kali Kali 2+4';
|
||||
id select_type table type possible_keys key key_len ref rows Extra
|
||||
1 SIMPLE t2 ref a a 14 const 2 Using where; Using index
|
||||
DROP TABLE t1,t2;
|
||||
CREATE TABLE t1 (
|
||||
a char(255) DEFAULT '',
|
||||
KEY(a(10))
|
||||
) ENGINE=MyISAM DEFAULT CHARSET=utf8 COLLATE=utf8_general_ci;
|
||||
INSERT INTO t1 VALUES ('Käli Käli 2-4');
|
||||
SELECT * FROM t1 WHERE a LIKE 'Käli Käli 2%';
|
||||
a
|
||||
Käli Käli 2-4
|
||||
INSERT INTO t1 VALUES ('Käli Käli 2-4');
|
||||
SELECT * FROM t1 WHERE a LIKE 'Käli Käli 2%';
|
||||
a
|
||||
Käli Käli 2-4
|
||||
Käli Käli 2-4
|
||||
DROP TABLE t1;
|
||||
CREATE TABLE t1 (
|
||||
a char(255) DEFAULT ''
|
||||
) ENGINE=MyISAM DEFAULT CHARSET=utf8 COLLATE=utf8_general_ci;
|
||||
INSERT INTO t1 VALUES ('Käli Käli 2-4');
|
||||
INSERT INTO t1 VALUES ('Käli Käli 2-4');
|
||||
SELECT * FROM t1 WHERE a LIKE 'Käli Käli 2%';
|
||||
a
|
||||
Käli Käli 2-4
|
||||
Käli Käli 2-4
|
||||
ALTER TABLE t1 ADD KEY (a(10));
|
||||
SELECT * FROM t1 WHERE a LIKE 'Käli Käli 2%';
|
||||
a
|
||||
Käli Käli 2-4
|
||||
Käli Käli 2-4
|
||||
DROP TABLE t1;
|
||||
|
@ -952,4 +952,59 @@ SELECT id, a FROM t1 WHERE a='bbbbbb' ORDER BY b;
|
||||
|
||||
DROP TABLE t1;
|
||||
|
||||
#
|
||||
# Bug#16674: LIKE predicate for a utf8 character set column
|
||||
#
|
||||
|
||||
SET NAMES utf8;
|
||||
|
||||
CREATE TABLE t1 (
|
||||
a CHAR(13) DEFAULT '',
|
||||
INDEX(a)
|
||||
) ENGINE=MyISAM DEFAULT CHARSET=utf8 COLLATE=utf8_general_ci;
|
||||
INSERT INTO t1 VALUES
|
||||
('Käli Käli 2-4'), ('Käli Käli 2-4'),
|
||||
('Käli Käli 2+4'), ('Käli Käli 2+4'),
|
||||
('Käli Käli 2-6'), ('Käli Käli 2-6');
|
||||
|
||||
CREATE TABLE t2 (
|
||||
a CHAR(13) DEFAULT '',
|
||||
INDEX(a)
|
||||
) ENGINE=MyISAM DEFAULT CHARSET=latin1 COLLATE=latin1_general_ci;
|
||||
|
||||
INSERT INTO t2 VALUES
|
||||
('Kali Kali 2-4'), ('Kali Kali 2-4'),
|
||||
('Kali Kali 2+4'), ('Kali Kali 2+4'),
|
||||
('Kali Kali 2-6'), ('Kali Kali 2-6');
|
||||
|
||||
SELECT a FROM t1 WHERE a LIKE 'Käli Käli 2+4';
|
||||
SELECT a FROM t2 WHERE a LIKE 'Kali Kali 2+4';
|
||||
|
||||
EXPLAIN SELECT a FROM t1 WHERE a LIKE 'Käli Käli 2+4';
|
||||
EXPLAIN SELECT a FROM t1 WHERE a = 'Käli Käli 2+4';
|
||||
EXPLAIN SELECT a FROM t2 WHERE a LIKE 'Kali Kali 2+4';
|
||||
EXPLAIN SELECT a FROM t2 WHERE a = 'Kali Kali 2+4';
|
||||
|
||||
DROP TABLE t1,t2;
|
||||
|
||||
CREATE TABLE t1 (
|
||||
a char(255) DEFAULT '',
|
||||
KEY(a(10))
|
||||
) ENGINE=MyISAM DEFAULT CHARSET=utf8 COLLATE=utf8_general_ci;
|
||||
INSERT INTO t1 VALUES ('Käli Käli 2-4');
|
||||
SELECT * FROM t1 WHERE a LIKE 'Käli Käli 2%';
|
||||
INSERT INTO t1 VALUES ('Käli Käli 2-4');
|
||||
SELECT * FROM t1 WHERE a LIKE 'Käli Käli 2%';
|
||||
DROP TABLE t1;
|
||||
|
||||
CREATE TABLE t1 (
|
||||
a char(255) DEFAULT ''
|
||||
) ENGINE=MyISAM DEFAULT CHARSET=utf8 COLLATE=utf8_general_ci;
|
||||
INSERT INTO t1 VALUES ('Käli Käli 2-4');
|
||||
INSERT INTO t1 VALUES ('Käli Käli 2-4');
|
||||
SELECT * FROM t1 WHERE a LIKE 'Käli Käli 2%';
|
||||
ALTER TABLE t1 ADD KEY (a(10));
|
||||
SELECT * FROM t1 WHERE a LIKE 'Käli Käli 2%';
|
||||
DROP TABLE t1;
|
||||
|
||||
# End of 4.1 tests
|
||||
|
@ -502,21 +502,19 @@ my_bool my_like_range_mb(CHARSET_INFO *cs,
|
||||
char *min_str,char *max_str,
|
||||
uint *min_length,uint *max_length)
|
||||
{
|
||||
uint mblen;
|
||||
const char *end= ptr + ptr_length;
|
||||
char *min_org= min_str;
|
||||
char *min_end= min_str + res_length;
|
||||
char *max_end= max_str + res_length;
|
||||
uint charlen= res_length / cs->mbmaxlen;
|
||||
uint maxcharlen= res_length / cs->mbmaxlen;
|
||||
|
||||
for (; ptr != end && min_str != min_end && charlen > 0 ; ptr++, charlen--)
|
||||
for (; ptr != end && min_str != min_end && maxcharlen ; maxcharlen--)
|
||||
{
|
||||
/* We assume here that escape, w_any, w_namy are one-byte characters */
|
||||
if (*ptr == escape && ptr+1 != end)
|
||||
{
|
||||
ptr++; /* Skip escape */
|
||||
*min_str++= *max_str++ = *ptr;
|
||||
continue;
|
||||
}
|
||||
if (*ptr == w_one || *ptr == w_many) /* '_' and '%' in SQL */
|
||||
else if (*ptr == w_one || *ptr == w_many) /* '_' and '%' in SQL */
|
||||
{
|
||||
/* Write min key */
|
||||
*min_length= (uint) (min_str - min_org);
|
||||
@ -534,7 +532,16 @@ my_bool my_like_range_mb(CHARSET_INFO *cs,
|
||||
pad_max_char(cs, max_str, max_end);
|
||||
return 0;
|
||||
}
|
||||
*min_str++= *max_str++ = *ptr;
|
||||
if ((mblen= my_ismbchar(cs, ptr, end)) > 1)
|
||||
{
|
||||
if (ptr+mblen > end || min_str+mblen > min_end)
|
||||
break;
|
||||
while (mblen--)
|
||||
*min_str++= *max_str++= *ptr++;
|
||||
}
|
||||
else
|
||||
*min_str++= *max_str++= *ptr++;
|
||||
|
||||
}
|
||||
*min_length= *max_length = (uint) (min_str - min_org);
|
||||
|
||||
|
Reference in New Issue
Block a user