Skip to content
Projects
Groups
Snippets
Help
Loading...
Help
Support
Keyboard shortcuts
?
Submit feedback
Contribute to GitLab
Sign in / Register
Toggle navigation
M
mariadb
Project overview
Project overview
Details
Activity
Releases
Repository
Repository
Files
Commits
Branches
Tags
Contributors
Graph
Compare
Issues
0
Issues
0
List
Boards
Labels
Milestones
Merge Requests
0
Merge Requests
0
Analytics
Analytics
Repository
Value Stream
Wiki
Wiki
Snippets
Snippets
Members
Members
Collapse sidebar
Close sidebar
Activity
Graph
Create a new issue
Commits
Issue Boards
Open sidebar
Kirill Smelkov
mariadb
Commits
edc90268
Commit
edc90268
authored
Oct 12, 2006
by
holyfoot/hf@mysql.com/deer.(none)
Browse files
Options
Browse Files
Download
Plain Diff
Merge bk@192.168.21.1:mysql-4.1
into mysql.com:/home/hf/mysql-5.0.mrg
parents
2c7ef3eb
5dded174
Changes
10
Hide whitespace changes
Inline
Side-by-side
Showing
10 changed files
with
234 additions
and
10 deletions
+234
-10
include/m_ctype.h
include/m_ctype.h
+4
-0
mysql-test/r/ctype_utf8.result
mysql-test/r/ctype_utf8.result
+75
-0
mysql-test/r/type_enum.result
mysql-test/r/type_enum.result
+9
-0
mysql-test/t/ctype_utf8.test
mysql-test/t/ctype_utf8.test
+70
-0
mysql-test/t/type_enum.test
mysql-test/t/type_enum.test
+9
-0
sql/table.cc
sql/table.cc
+15
-1
sql/unireg.cc
sql/unireg.cc
+15
-0
strings/CHARSET_INFO.txt
strings/CHARSET_INFO.txt
+10
-2
strings/ctype-mb.c
strings/ctype-mb.c
+26
-6
strings/ctype-utf8.c
strings/ctype-utf8.c
+1
-1
No files found.
include/m_ctype.h
View file @
edc90268
...
@@ -112,6 +112,8 @@ enum my_lex_states
...
@@ -112,6 +112,8 @@ enum my_lex_states
struct
charset_info_st
;
struct
charset_info_st
;
/* See strings/CHARSET_INFO.txt for information about this structure */
typedef
struct
my_collation_handler_st
typedef
struct
my_collation_handler_st
{
{
my_bool
(
*
init
)(
struct
charset_info_st
*
,
void
*
(
*
alloc
)(
uint
));
my_bool
(
*
init
)(
struct
charset_info_st
*
,
void
*
(
*
alloc
)(
uint
));
...
@@ -154,6 +156,7 @@ extern MY_COLLATION_HANDLER my_collation_8bit_simple_ci_handler;
...
@@ -154,6 +156,7 @@ extern MY_COLLATION_HANDLER my_collation_8bit_simple_ci_handler;
extern
MY_COLLATION_HANDLER
my_collation_ucs2_uca_handler
;
extern
MY_COLLATION_HANDLER
my_collation_ucs2_uca_handler
;
/* See strings/CHARSET_INFO.txt about information on this structure */
typedef
struct
my_charset_handler_st
typedef
struct
my_charset_handler_st
{
{
my_bool
(
*
init
)(
struct
charset_info_st
*
,
void
*
(
*
alloc
)(
uint
));
my_bool
(
*
init
)(
struct
charset_info_st
*
,
void
*
(
*
alloc
)(
uint
));
...
@@ -216,6 +219,7 @@ extern MY_CHARSET_HANDLER my_charset_8bit_handler;
...
@@ -216,6 +219,7 @@ extern MY_CHARSET_HANDLER my_charset_8bit_handler;
extern
MY_CHARSET_HANDLER
my_charset_ucs2_handler
;
extern
MY_CHARSET_HANDLER
my_charset_ucs2_handler
;
/* See strings/CHARSET_INFO.txt about information on this structure */
typedef
struct
charset_info_st
typedef
struct
charset_info_st
{
{
uint
number
;
uint
number
;
...
...
mysql-test/r/ctype_utf8.result
View file @
edc90268
...
@@ -1155,6 +1155,81 @@ check table t1;
...
@@ -1155,6 +1155,81 @@ 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 (s1 char(5) character set utf8);
insert into t1 values
('a'),('b'),(null),('ペテルグル'),('ü'),('Y');
create index it1 on t1 (s1);
select s1 as before_delete_general_ci from t1 where s1 like 'ペテ%';
before_delete_general_ci
ペテルグル
delete from t1 where s1 = 'Y';
select s1 as after_delete_general_ci from t1 where s1 like 'ペテ%';
after_delete_general_ci
ペテルグル
drop table t1;
set names utf8;
create table t1 (s1 char(5) character set utf8 collate utf8_unicode_ci);
insert into t1 values
('a'),('b'),(null),('ペテルグル'),('ü'),('Y');
create index it1 on t1 (s1);
select s1 as before_delete_unicode_ci from t1 where s1 like 'ペテ%';
before_delete_unicode_ci
ペテルグル
delete from t1 where s1 = 'Y';
select s1 as after_delete_unicode_ci from t1 where s1 like 'ペテ%';
after_delete_unicode_ci
ペテルグル
drop table t1;
set names utf8;
create table t1 (s1 char(5) character set utf8 collate utf8_bin);
insert into t1 values
('a'),('b'),(null),('ペテルグル'),('ü'),('Y');
create index it1 on t1 (s1);
select s1 as before_delete_bin from t1 where s1 like 'ペテ%';
before_delete_bin
ペテルグル
delete from t1 where s1 = 'Y';
select s1 as after_delete_bin from t1 where s1 like 'ペテ%';
after_delete_bin
ペテルグル
drop table t1;
set names utf8;
create table t1 (a varchar(30) not null primary key)
engine=innodb default character set utf8 collate utf8_general_ci;
insert into t1 values ('あいうえおかきくけこさしすせそ');
insert into t1 values ('さしすせそかきくけこあいうえお');
select a as gci1 from t1 where a like 'さしすせそかきくけこあいうえお%';
gci1
さしすせそかきくけこあいうえお
select a as gci2 from t1 where a like 'あいうえおかきくけこさしすせそ';
gci2
あいうえおかきくけこさしすせそ
drop table t1;
set names utf8;
create table t1 (a varchar(30) not null primary key)
engine=innodb default character set utf8 collate utf8_unicode_ci;
insert into t1 values ('あいうえおかきくけこさしすせそ');
insert into t1 values ('さしすせそかきくけこあいうえお');
select a as uci1 from t1 where a like 'さしすせそかきくけこあいうえお%';
uci1
さしすせそかきくけこあいうえお
select a as uci2 from t1 where a like 'あいうえおかきくけこさしすせそ';
uci2
あいうえおかきくけこさしすせそ
drop table t1;
set names utf8;
create table t1 (a varchar(30) not null primary key)
engine=innodb default character set utf8 collate utf8_bin;
insert into t1 values ('あいうえおかきくけこさしすせそ');
insert into t1 values ('さしすせそかきくけこあいうえお');
select a as bin1 from t1 where a like 'さしすせそかきくけこあいうえお%';
bin1
さしすせそかきくけこあいうえお
select a as bin2 from t1 where a like 'あいうえおかきくけこさしすせそ';
bin2
あいうえおかきくけこさしすせそ
drop table t1;
SET NAMES utf8;
SET NAMES utf8;
CREATE TABLE t1 (id int PRIMARY KEY,
CREATE TABLE t1 (id int PRIMARY KEY,
a varchar(16) collate utf8_unicode_ci NOT NULL default '',
a varchar(16) collate utf8_unicode_ci NOT NULL default '',
...
...
mysql-test/r/type_enum.result
View file @
edc90268
...
@@ -1745,3 +1745,12 @@ create table t1 (a set('x','y') default 'x');
...
@@ -1745,3 +1745,12 @@ create table t1 (a set('x','y') default 'x');
alter table t1 alter a set default 'z';
alter table t1 alter a set default 'z';
ERROR 42000: Invalid default value for 'a'
ERROR 42000: Invalid default value for 'a'
drop table t1;
drop table t1;
create table t1 (f1 int);
alter table t1 add f2 enum(0xFFFF);
show create table t1;
Table Create Table
t1 CREATE TABLE `t1` (
`f1` int(11) default NULL,
`f2` enum('') default NULL
) ENGINE=MyISAM DEFAULT CHARSET=latin1
drop table t1;
mysql-test/t/ctype_utf8.test
View file @
edc90268
...
@@ -941,6 +941,76 @@ INSERT INTO t1 VALUES('uUABCDEFGHIGKLMNOPRSTUVWXYZ̈bbbbbbbbbbbbbbbbbbbbbbbbbbbb
...
@@ -941,6 +941,76 @@ INSERT INTO t1 VALUES('uUABCDEFGHIGKLMNOPRSTUVWXYZ̈bbbbbbbbbbbbbbbbbbbbbbbbbbbb
check
table
t1
;
check
table
t1
;
drop
table
t1
;
drop
table
t1
;
#
# Bug#20471 LIKE search fails with indexed utf8 char column
#
set
names
utf8
;
create
table
t1
(
s1
char
(
5
)
character
set
utf8
);
insert
into
t1
values
(
'a'
),(
'b'
),(
null
),(
'ペテルグル'
),(
'ü'
),(
'Y'
);
create
index
it1
on
t1
(
s1
);
select
s1
as
before_delete_general_ci
from
t1
where
s1
like
'ペテ%'
;
delete
from
t1
where
s1
=
'Y'
;
select
s1
as
after_delete_general_ci
from
t1
where
s1
like
'ペテ%'
;
drop
table
t1
;
set
names
utf8
;
create
table
t1
(
s1
char
(
5
)
character
set
utf8
collate
utf8_unicode_ci
);
insert
into
t1
values
(
'a'
),(
'b'
),(
null
),(
'ペテルグル'
),(
'ü'
),(
'Y'
);
create
index
it1
on
t1
(
s1
);
select
s1
as
before_delete_unicode_ci
from
t1
where
s1
like
'ペテ%'
;
delete
from
t1
where
s1
=
'Y'
;
select
s1
as
after_delete_unicode_ci
from
t1
where
s1
like
'ペテ%'
;
drop
table
t1
;
set
names
utf8
;
create
table
t1
(
s1
char
(
5
)
character
set
utf8
collate
utf8_bin
);
insert
into
t1
values
(
'a'
),(
'b'
),(
null
),(
'ペテルグル'
),(
'ü'
),(
'Y'
);
create
index
it1
on
t1
(
s1
);
select
s1
as
before_delete_bin
from
t1
where
s1
like
'ペテ%'
;
delete
from
t1
where
s1
=
'Y'
;
select
s1
as
after_delete_bin
from
t1
where
s1
like
'ペテ%'
;
drop
table
t1
;
# additional tests from duplicate bug#20744 MySQL return no result
set
names
utf8
;
--
disable_warnings
create
table
t1
(
a
varchar
(
30
)
not
null
primary
key
)
engine
=
innodb
default
character
set
utf8
collate
utf8_general_ci
;
--
enable_warnings
insert
into
t1
values
(
'あいうえおかきくけこさしすせそ'
);
insert
into
t1
values
(
'さしすせそかきくけこあいうえお'
);
select
a
as
gci1
from
t1
where
a
like
'さしすせそかきくけこあいうえお%'
;
select
a
as
gci2
from
t1
where
a
like
'あいうえおかきくけこさしすせそ'
;
drop
table
t1
;
set
names
utf8
;
--
disable_warnings
create
table
t1
(
a
varchar
(
30
)
not
null
primary
key
)
engine
=
innodb
default
character
set
utf8
collate
utf8_unicode_ci
;
--
enable_warnings
insert
into
t1
values
(
'あいうえおかきくけこさしすせそ'
);
insert
into
t1
values
(
'さしすせそかきくけこあいうえお'
);
select
a
as
uci1
from
t1
where
a
like
'さしすせそかきくけこあいうえお%'
;
select
a
as
uci2
from
t1
where
a
like
'あいうえおかきくけこさしすせそ'
;
drop
table
t1
;
set
names
utf8
;
--
disable_warnings
create
table
t1
(
a
varchar
(
30
)
not
null
primary
key
)
engine
=
innodb
default
character
set
utf8
collate
utf8_bin
;
--
enable_warnings
insert
into
t1
values
(
'あいうえおかきくけこさしすせそ'
);
insert
into
t1
values
(
'さしすせそかきくけこあいうえお'
);
select
a
as
bin1
from
t1
where
a
like
'さしすせそかきくけこあいうえお%'
;
select
a
as
bin2
from
t1
where
a
like
'あいうえおかきくけこさしすせそ'
;
drop
table
t1
;
#
#
# Bug#14896: Comparison with a key in a partial index over mb chararacter field
# Bug#14896: Comparison with a key in a partial index over mb chararacter field
#
#
...
...
mysql-test/t/type_enum.test
View file @
edc90268
...
@@ -127,4 +127,13 @@ create table t1 (a set('x','y') default 'x');
...
@@ -127,4 +127,13 @@ create table t1 (a set('x','y') default 'x');
alter
table
t1
alter
a
set
default
'z'
;
alter
table
t1
alter
a
set
default
'z'
;
drop
table
t1
;
drop
table
t1
;
#
# Bug#20922 mysql removes a name of first column in a table
#
create
table
t1
(
f1
int
);
alter
table
t1
add
f2
enum
(
0xFFFF
);
show
create
table
t1
;
drop
table
t1
;
# End of 4.1 tests
# End of 4.1 tests
sql/table.cc
View file @
edc90268
...
@@ -468,7 +468,21 @@ int openfrm(THD *thd, const char *name, const char *alias, uint db_stat,
...
@@ -468,7 +468,21 @@ int openfrm(THD *thd, const char *name, const char *alias, uint db_stat,
count
)))
count
)))
goto
err
;
goto
err
;
for
(
count
=
0
;
count
<
interval
->
count
;
count
++
)
for
(
count
=
0
;
count
<
interval
->
count
;
count
++
)
interval
->
type_lengths
[
count
]
=
strlen
(
interval
->
type_names
[
count
]);
{
char
*
val
=
(
char
*
)
interval
->
type_names
[
count
];
interval
->
type_lengths
[
count
]
=
strlen
(
val
);
/*
Replace all ',' symbols with NAMES_SEP_CHAR.
See the comment in unireg.cc, pack_fields() function
for details.
*/
for
(
uint
cnt
=
0
;
cnt
<
interval
->
type_lengths
[
count
]
;
cnt
++
)
{
char
c
=
val
[
cnt
];
if
(
c
==
','
)
val
[
cnt
]
=
NAMES_SEP_CHAR
;
}
}
interval
->
type_lengths
[
count
]
=
0
;
interval
->
type_lengths
[
count
]
=
0
;
}
}
}
}
...
...
sql/unireg.cc
View file @
edc90268
...
@@ -718,6 +718,21 @@ static bool pack_fields(File file, List<create_field> &create_fields,
...
@@ -718,6 +718,21 @@ static bool pack_fields(File file, List<create_field> &create_fields,
tmp
.
append
(
NAMES_SEP_CHAR
);
tmp
.
append
(
NAMES_SEP_CHAR
);
for
(
const
char
**
pos
=
field
->
interval
->
type_names
;
*
pos
;
pos
++
)
for
(
const
char
**
pos
=
field
->
interval
->
type_names
;
*
pos
;
pos
++
)
{
{
char
*
val
=
(
char
*
)
*
pos
;
uint
str_len
=
strlen
(
val
);
/*
Note, hack: in old frm NAMES_SEP_CHAR is used to separate
names in the interval (ENUM/SET). To allow names to contain
NAMES_SEP_CHAR, we replace it with a comma before writing frm.
Backward conversion is done during frm file opening,
See table.cc, openfrm() function
*/
for
(
uint
cnt
=
0
;
cnt
<
str_len
;
cnt
++
)
{
char
c
=
val
[
cnt
];
if
(
c
==
NAMES_SEP_CHAR
)
val
[
cnt
]
=
','
;
}
tmp
.
append
(
*
pos
);
tmp
.
append
(
*
pos
);
tmp
.
append
(
NAMES_SEP_CHAR
);
tmp
.
append
(
NAMES_SEP_CHAR
);
}
}
...
...
strings/CHARSET_INFO.txt
View file @
edc90268
...
@@ -33,7 +33,7 @@ typedef struct charset_info_st
...
@@ -33,7 +33,7 @@ typedef struct charset_info_st
uint strxfrm_multiply;
uint strxfrm_multiply;
uint mbminlen;
uint mbminlen;
uint mbmaxlen;
uint mbmaxlen;
char
max_sort_char; /* For LIKE optimization */
uint16
max_sort_char; /* For LIKE optimization */
MY_CHARSET_HANDLER *cset;
MY_CHARSET_HANDLER *cset;
MY_COLLATION_HANDLER *coll;
MY_COLLATION_HANDLER *coll;
...
@@ -134,7 +134,15 @@ Misc fields
...
@@ -134,7 +134,15 @@ Misc fields
mbmaxlen - maximum multibyte sequence length.
mbmaxlen - maximum multibyte sequence length.
1 for 8bit charsets. Can be also 2 or 3.
1 for 8bit charsets. Can be also 2 or 3.
max_sort_char - for LIKE range
in case of 8bit character sets - native code
of maximum character (max_str pad byte);
in case of UTF8 and UCS2 - Unicode code of the maximum
possible character (usually U+FFFF). This code is
converted to multibyte representation (usually 0xEFBFBF)
and then used as a pad sequence for max_str.
in case of other multibyte character sets -
max_str pad byte (usually 0xFF).
MY_CHARSET_HANDLER
MY_CHARSET_HANDLER
==================
==================
...
...
strings/ctype-mb.c
View file @
edc90268
...
@@ -474,15 +474,35 @@ static void my_hash_sort_mb_bin(CHARSET_INFO *cs __attribute__((unused)),
...
@@ -474,15 +474,35 @@ static void my_hash_sort_mb_bin(CHARSET_INFO *cs __attribute__((unused)),
/*
/*
Write max key: create a buffer with multibyte
Fill the given buffer with 'maximum character' for given charset
representation of the max_sort_char character,
SYNOPSIS
and copy it into max_str in a loop.
pad_max_char()
cs Character set
str Start of buffer to fill
end End of buffer to fill
DESCRIPTION
Write max key:
- for non-Unicode character sets:
just set to 255.
- for Unicode character set (utf-8):
create a buffer with multibyte representation of the max_sort_char
character, and copy it into max_str in a loop.
*/
*/
static
void
pad_max_char
(
CHARSET_INFO
*
cs
,
char
*
str
,
char
*
end
)
static
void
pad_max_char
(
CHARSET_INFO
*
cs
,
char
*
str
,
char
*
end
)
{
{
char
buf
[
10
];
char
buf
[
10
];
char
buflen
=
cs
->
cset
->
wc_mb
(
cs
,
cs
->
max_sort_char
,
(
uchar
*
)
buf
,
char
buflen
;
(
uchar
*
)
buf
+
sizeof
(
buf
));
if
(
!
(
cs
->
state
&
MY_CS_UNICODE
))
{
bfill
(
str
,
end
-
str
,
255
);
return
;
}
buflen
=
cs
->
cset
->
wc_mb
(
cs
,
cs
->
max_sort_char
,
(
uchar
*
)
buf
,
(
uchar
*
)
buf
+
sizeof
(
buf
));
DBUG_ASSERT
(
buflen
>
0
);
DBUG_ASSERT
(
buflen
>
0
);
do
do
{
{
...
@@ -927,7 +947,7 @@ MY_COLLATION_HANDLER my_collation_mb_bin_handler =
...
@@ -927,7 +947,7 @@ MY_COLLATION_HANDLER my_collation_mb_bin_handler =
my_strnncollsp_mb_bin
,
my_strnncollsp_mb_bin
,
my_strnxfrm_mb_bin
,
my_strnxfrm_mb_bin
,
my_strnxfrmlen_simple
,
my_strnxfrmlen_simple
,
my_like_range_
simple
,
my_like_range_
mb
,
my_wildcmp_mb_bin
,
my_wildcmp_mb_bin
,
my_strcasecmp_mb_bin
,
my_strcasecmp_mb_bin
,
my_instr_mb
,
my_instr_mb
,
...
...
strings/ctype-utf8.c
View file @
edc90268
...
@@ -2612,7 +2612,7 @@ CHARSET_INFO my_charset_utf8_bin=
...
@@ -2612,7 +2612,7 @@ CHARSET_INFO my_charset_utf8_bin=
1
,
/* mbminlen */
1
,
/* mbminlen */
3
,
/* mbmaxlen */
3
,
/* mbmaxlen */
0
,
/* min_sort_char */
0
,
/* min_sort_char */
255
,
/* max_sort_char */
0xFFFF
,
/* max_sort_char */
' '
,
/* pad char */
' '
,
/* pad char */
0
,
/* escape_with_backslash_is_dangerous */
0
,
/* escape_with_backslash_is_dangerous */
&
my_charset_utf8_handler
,
&
my_charset_utf8_handler
,
...
...
Write
Preview
Markdown
is supported
0%
Try again
or
attach a new file
Attach a file
Cancel
You are about to add
0
people
to the discussion. Proceed with caution.
Finish editing this message first!
Cancel
Please
register
or
sign in
to comment