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
CI / CD
CI / CD
Pipelines
Jobs
Schedules
Analytics
Analytics
CI / CD
Repository
Value Stream
Wiki
Wiki
Snippets
Snippets
Members
Members
Collapse sidebar
Close sidebar
Activity
Graph
Create a new issue
Jobs
Commits
Issue Boards
Open sidebar
nexedi
MariaDB
Commits
ba924c0a
Commit
ba924c0a
authored
Aug 19, 2004
by
mskold@mysql.com
Browse files
Options
Browse Files
Download
Plain Diff
Merge mskold@build.mysql.com:/home/bk/mysql-4.1
into mysql.com:/usr/local/home/marty/MySQL/mysql-4.1-ndb
parents
99eef36f
2d7f4c30
Changes
17
Show whitespace changes
Inline
Side-by-side
Showing
17 changed files
with
454 additions
and
61 deletions
+454
-61
VC++Files/winmysqladmin/mysql_com.h
VC++Files/winmysqladmin/mysql_com.h
+11
-15
include/mysql.h
include/mysql.h
+1
-1
include/mysql_com.h
include/mysql_com.h
+11
-15
libmysql/libmysql.c
libmysql/libmysql.c
+1
-1
myisam/mi_search.c
myisam/mi_search.c
+12
-3
mysql-test/r/binary.result
mysql-test/r/binary.result
+2
-0
mysql-test/r/ctype_utf8.result
mysql-test/r/ctype_utf8.result
+143
-0
mysql-test/r/endspace.result
mysql-test/r/endspace.result
+1
-1
mysql-test/r/myisam.result
mysql-test/r/myisam.result
+1
-0
mysql-test/t/ctype_utf8.test
mysql-test/t/ctype_utf8.test
+111
-2
sql/field.h
sql/field.h
+1
-1
sql/ha_berkeley.cc
sql/ha_berkeley.cc
+4
-2
sql/ha_heap.cc
sql/ha_heap.cc
+1
-1
sql/item_cmpfunc.cc
sql/item_cmpfunc.cc
+2
-2
sql/sql_parse.cc
sql/sql_parse.cc
+2
-2
strings/ctype-bin.c
strings/ctype-bin.c
+96
-12
strings/ctype-mb.c
strings/ctype-mb.c
+54
-3
No files found.
VC++Files/winmysqladmin/mysql_com.h
View file @
ba924c0a
...
@@ -159,28 +159,28 @@ enum enum_field_types { FIELD_TYPE_DECIMAL, FIELD_TYPE_TINY,
...
@@ -159,28 +159,28 @@ enum enum_field_types { FIELD_TYPE_DECIMAL, FIELD_TYPE_TINY,
/* Shutdown/kill enums and constants */
/* Shutdown/kill enums and constants */
/* Bits for THD::killable. */
/* Bits for THD::killable. */
#define KILLABLE_CONNECT (unsigned char)(1 << 0)
#define
MYSQL_SHUTDOWN_
KILLABLE_CONNECT (unsigned char)(1 << 0)
#define KILLABLE_TRANS (unsigned char)(1 << 1)
#define
MYSQL_SHUTDOWN_
KILLABLE_TRANS (unsigned char)(1 << 1)
#define KILLABLE_LOCK_TABLE (unsigned char)(1 << 2)
#define
MYSQL_SHUTDOWN_
KILLABLE_LOCK_TABLE (unsigned char)(1 << 2)
#define KILLABLE_UPDATE (unsigned char)(1 << 3)
#define
MYSQL_SHUTDOWN_
KILLABLE_UPDATE (unsigned char)(1 << 3)
enum
enum_shutdown_level
{
enum
mysql_
enum_shutdown_level
{
/*
/*
We want levels to be in growing order of hardness (because we use number
We want levels to be in growing order of hardness (because we use number
comparisons). Note that DEFAULT does not respect the growing property, but
comparisons). Note that DEFAULT does not respect the growing property, but
it's ok.
it's ok.
*/
*/
SHUTDOWN_
DEFAULT
=
0
,
DEFAULT
=
0
,
/* wait for existing connections to finish */
/* wait for existing connections to finish */
SHUTDOWN_WAIT_CONNECTIONS
=
KILLABLE_CONNECT
,
WAIT_CONNECTIONS
=
MYSQL_SHUTDOWN_
KILLABLE_CONNECT
,
/* wait for existing trans to finish */
/* wait for existing trans to finish */
SHUTDOWN_WAIT_TRANSACTIONS
=
KILLABLE_TRANS
,
WAIT_TRANSACTIONS
=
MYSQL_SHUTDOWN_
KILLABLE_TRANS
,
/* wait for existing updates to finish (=> no partial MyISAM update) */
/* wait for existing updates to finish (=> no partial MyISAM update) */
SHUTDOWN_WAIT_UPDATES
=
KILLABLE_UPDATE
,
WAIT_UPDATES
=
MYSQL_SHUTDOWN_
KILLABLE_UPDATE
,
/* flush InnoDB buffers and other storage engines' buffers*/
/* flush InnoDB buffers and other storage engines' buffers*/
SHUTDOWN_WAIT_ALL_BUFFERS
=
(
KILLABLE_UPDATE
<<
1
),
WAIT_ALL_BUFFERS
=
(
MYSQL_SHUTDOWN_
KILLABLE_UPDATE
<<
1
),
/* don't flush InnoDB buffers, flush other storage engines' buffers*/
/* don't flush InnoDB buffers, flush other storage engines' buffers*/
SHUTDOWN_WAIT_CRITICAL_BUFFERS
=
(
KILLABLE_UPDATE
<<
1
)
+
1
,
WAIT_CRITICAL_BUFFERS
=
(
MYSQL_SHUTDOWN_
KILLABLE_UPDATE
<<
1
)
+
1
,
/* Now the 2 levels of the KILL command */
/* Now the 2 levels of the KILL command */
#if MYSQL_VERSION_ID >= 50000
#if MYSQL_VERSION_ID >= 50000
KILL_QUERY
=
254
,
KILL_QUERY
=
254
,
...
@@ -188,10 +188,6 @@ enum enum_shutdown_level {
...
@@ -188,10 +188,6 @@ enum enum_shutdown_level {
KILL_CONNECTION
=
255
KILL_CONNECTION
=
255
};
};
/* Same value and type (0, enum_shutdown_level) but not same meaning */
#define NOT_KILLED SHUTDOWN_DEFAULT
extern
unsigned
long
max_allowed_packet
;
extern
unsigned
long
max_allowed_packet
;
extern
unsigned
long
net_buffer_length
;
extern
unsigned
long
net_buffer_length
;
...
...
include/mysql.h
View file @
ba924c0a
...
@@ -454,7 +454,7 @@ int STDCALL mysql_add_slave(MYSQL* mysql, const char* host,
...
@@ -454,7 +454,7 @@ int STDCALL mysql_add_slave(MYSQL* mysql, const char* host,
const
char
*
passwd
);
const
char
*
passwd
);
int
STDCALL
mysql_shutdown
(
MYSQL
*
mysql
,
int
STDCALL
mysql_shutdown
(
MYSQL
*
mysql
,
enum
enum_shutdown_level
enum
mysql_
enum_shutdown_level
shutdown_level
);
shutdown_level
);
int
STDCALL
mysql_dump_debug_info
(
MYSQL
*
mysql
);
int
STDCALL
mysql_dump_debug_info
(
MYSQL
*
mysql
);
int
STDCALL
mysql_refresh
(
MYSQL
*
mysql
,
int
STDCALL
mysql_refresh
(
MYSQL
*
mysql
,
...
...
include/mysql_com.h
View file @
ba924c0a
...
@@ -227,28 +227,28 @@ enum enum_field_types { MYSQL_TYPE_DECIMAL, MYSQL_TYPE_TINY,
...
@@ -227,28 +227,28 @@ enum enum_field_types { MYSQL_TYPE_DECIMAL, MYSQL_TYPE_TINY,
/* Shutdown/kill enums and constants */
/* Shutdown/kill enums and constants */
/* Bits for THD::killable. */
/* Bits for THD::killable. */
#define KILLABLE_CONNECT (unsigned char)(1 << 0)
#define
MYSQL_SHUTDOWN_
KILLABLE_CONNECT (unsigned char)(1 << 0)
#define KILLABLE_TRANS (unsigned char)(1 << 1)
#define
MYSQL_SHUTDOWN_
KILLABLE_TRANS (unsigned char)(1 << 1)
#define KILLABLE_LOCK_TABLE (unsigned char)(1 << 2)
#define
MYSQL_SHUTDOWN_
KILLABLE_LOCK_TABLE (unsigned char)(1 << 2)
#define KILLABLE_UPDATE (unsigned char)(1 << 3)
#define
MYSQL_SHUTDOWN_
KILLABLE_UPDATE (unsigned char)(1 << 3)
enum
enum_shutdown_level
{
enum
mysql_
enum_shutdown_level
{
/*
/*
We want levels to be in growing order of hardness (because we use number
We want levels to be in growing order of hardness (because we use number
comparisons). Note that DEFAULT does not respect the growing property, but
comparisons). Note that DEFAULT does not respect the growing property, but
it's ok.
it's ok.
*/
*/
SHUTDOWN_DEFAULT
=
0
,
SHUTDOWN_DEFAULT
=
0
,
/* wait for existing connections to finish */
/* wait for existing connections to finish */
SHUTDOWN_WAIT_CONNECTIONS
=
KILLABLE_CONNECT
,
SHUTDOWN_WAIT_CONNECTIONS
=
MYSQL_SHUTDOWN_
KILLABLE_CONNECT
,
/* wait for existing trans to finish */
/* wait for existing trans to finish */
SHUTDOWN_WAIT_TRANSACTIONS
=
KILLABLE_TRANS
,
SHUTDOWN_WAIT_TRANSACTIONS
=
MYSQL_SHUTDOWN_
KILLABLE_TRANS
,
/* wait for existing updates to finish (=> no partial MyISAM update) */
/* wait for existing updates to finish (=> no partial MyISAM update) */
SHUTDOWN_WAIT_UPDATES
=
KILLABLE_UPDATE
,
SHUTDOWN_WAIT_UPDATES
=
MYSQL_SHUTDOWN_
KILLABLE_UPDATE
,
/* flush InnoDB buffers and other storage engines' buffers*/
/* flush InnoDB buffers and other storage engines' buffers*/
SHUTDOWN_WAIT_ALL_BUFFERS
=
(
KILLABLE_UPDATE
<<
1
),
SHUTDOWN_WAIT_ALL_BUFFERS
=
(
MYSQL_SHUTDOWN_
KILLABLE_UPDATE
<<
1
),
/* don't flush InnoDB buffers, flush other storage engines' buffers*/
/* don't flush InnoDB buffers, flush other storage engines' buffers*/
SHUTDOWN_WAIT_CRITICAL_BUFFERS
=
(
KILLABLE_UPDATE
<<
1
)
+
1
,
SHUTDOWN_WAIT_CRITICAL_BUFFERS
=
(
MYSQL_SHUTDOWN_
KILLABLE_UPDATE
<<
1
)
+
1
,
/* Now the 2 levels of the KILL command */
/* Now the 2 levels of the KILL command */
#if MYSQL_VERSION_ID >= 50000
#if MYSQL_VERSION_ID >= 50000
KILL_QUERY
=
254
,
KILL_QUERY
=
254
,
...
@@ -256,10 +256,6 @@ enum enum_shutdown_level {
...
@@ -256,10 +256,6 @@ enum enum_shutdown_level {
KILL_CONNECTION
=
255
KILL_CONNECTION
=
255
};
};
/* Same value and type (0, enum_shutdown_level) but not same meaning */
#define NOT_KILLED SHUTDOWN_DEFAULT
/* options for mysql_set_option */
/* options for mysql_set_option */
enum
enum_mysql_set_option
enum
enum_mysql_set_option
{
{
...
...
libmysql/libmysql.c
View file @
ba924c0a
...
@@ -1291,7 +1291,7 @@ mysql_drop_db(MYSQL *mysql, const char *db)
...
@@ -1291,7 +1291,7 @@ mysql_drop_db(MYSQL *mysql, const char *db)
int
STDCALL
int
STDCALL
mysql_shutdown
(
MYSQL
*
mysql
,
enum
enum_shutdown_level
shutdown_level
)
mysql_shutdown
(
MYSQL
*
mysql
,
enum
mysql_
enum_shutdown_level
shutdown_level
)
{
{
uchar
level
[
1
];
uchar
level
[
1
];
DBUG_ENTER
(
"mysql_shutdown"
);
DBUG_ENTER
(
"mysql_shutdown"
);
...
...
myisam/mi_search.c
View file @
ba924c0a
...
@@ -396,9 +396,18 @@ int _mi_prefix_search(MI_INFO *info, register MI_KEYDEF *keyinfo, uchar *page,
...
@@ -396,9 +396,18 @@ int _mi_prefix_search(MI_INFO *info, register MI_KEYDEF *keyinfo, uchar *page,
matched
=
prefix_len
+
left
;
matched
=
prefix_len
+
left
;
if
(
sort_order
)
{
for
(
my_flag
=
0
;
left
;
left
--
)
for
(
my_flag
=
0
;
left
;
left
--
)
if
((
my_flag
=
(
int
)
sort_order
[
*
vseg
++
]
-
(
int
)
sort_order
[
*
k
++
]))
if
((
my_flag
=
(
int
)
sort_order
[
*
vseg
++
]
-
(
int
)
sort_order
[
*
k
++
]))
break
;
break
;
}
else
{
for
(
my_flag
=
0
;
left
;
left
--
)
if
((
my_flag
=
(
int
)
*
vseg
++
-
(
int
)
*
k
++
))
break
;
}
if
(
my_flag
>
0
)
/* mismatch */
if
(
my_flag
>
0
)
/* mismatch */
break
;
break
;
...
...
mysql-test/r/binary.result
View file @
ba924c0a
...
@@ -59,8 +59,10 @@ concat("-",a,"-",b,"-")
...
@@ -59,8 +59,10 @@ concat("-",a,"-",b,"-")
-hello-hello-
-hello-hello-
select concat("-",a,"-",b,"-") from t1 where b="hello ";
select concat("-",a,"-",b,"-") from t1 where b="hello ";
concat("-",a,"-",b,"-")
concat("-",a,"-",b,"-")
-hello-hello-
select concat("-",a,"-",b,"-") from t1 ignore index (b) where b="hello ";
select concat("-",a,"-",b,"-") from t1 ignore index (b) where b="hello ";
concat("-",a,"-",b,"-")
concat("-",a,"-",b,"-")
-hello-hello-
alter table t1 modify b tinytext not null, drop key b, add key (b(100));
alter table t1 modify b tinytext not null, drop key b, add key (b(100));
select concat("-",a,"-",b,"-") from t1;
select concat("-",a,"-",b,"-") from t1;
concat("-",a,"-",b,"-")
concat("-",a,"-",b,"-")
...
...
mysql-test/r/ctype_utf8.result
View file @
ba924c0a
...
@@ -79,6 +79,21 @@ SELECT 'a\t' < 'a';
...
@@ -79,6 +79,21 @@ SELECT 'a\t' < 'a';
SELECT 'a\t' < 'a ';
SELECT 'a\t' < 'a ';
'a\t' < 'a '
'a\t' < 'a '
1
1
SELECT 'a' = 'a ' collate utf8_bin;
'a' = 'a ' collate utf8_bin
1
SELECT 'a\0' < 'a' collate utf8_bin;
'a\0' < 'a' collate utf8_bin
1
SELECT 'a\0' < 'a ' collate utf8_bin;
'a\0' < 'a ' collate utf8_bin
1
SELECT 'a\t' < 'a' collate utf8_bin;
'a\t' < 'a' collate utf8_bin
1
SELECT 'a\t' < 'a ' collate utf8_bin;
'a\t' < 'a ' collate utf8_bin
1
CREATE TABLE t1 (a char(10) character set utf8 not null);
CREATE TABLE t1 (a char(10) character set utf8 not null);
INSERT INTO t1 VALUES ('a'),('a\0'),('a\t'),('a ');
INSERT INTO t1 VALUES ('a'),('a\0'),('a\t'),('a ');
SELECT hex(a),STRCMP(a,'a'), STRCMP(a,'a ') FROM t1;
SELECT hex(a),STRCMP(a,'a'), STRCMP(a,'a ') FROM t1;
...
@@ -362,6 +377,134 @@ c_a
...
@@ -362,6 +377,134 @@ c_a
б
б
drop table t1;
drop table t1;
create table t1 (
create table t1 (
c char(10) character set utf8,
unique key a using btree (c(1))
) engine=heap;
show create table t1;
Table Create Table
t1 CREATE TABLE `t1` (
`c` char(10) character set utf8 default NULL,
UNIQUE KEY `a` TYPE BTREE (`c`(1))
) ENGINE=HEAP DEFAULT CHARSET=latin1
insert into t1 values ('a'),('b'),('c'),('d'),('e'),('f');
insert into t1 values ('aa');
ERROR 23000: Duplicate entry 'aa' for key 1
insert into t1 values ('aaa');
ERROR 23000: Duplicate entry 'aaa' for key 1
insert into t1 values ('б');
insert into t1 values ('бб');
ERROR 23000: Duplicate entry 'б' for key 1
insert into t1 values ('ббб');
ERROR 23000: Duplicate entry 'б' for key 1
select c as c_all from t1 order by c;
c_all
a
b
c
d
e
f
б
select c as c_a from t1 where c='a';
c_a
a
select c as c_a from t1 where c='б';
c_a
б
drop table t1;
create table t1 (c varchar(30) character set utf8 collate utf8_bin, unique(c(10)));
insert into t1 values ('1'),('2'),('3'),('x'),('y'),('z');
insert into t1 values ('aaaaaaaaaa');
insert into t1 values ('aaaaaaaaaaa');
ERROR 23000: Duplicate entry 'aaaaaaaaaaa' for key 1
insert into t1 values ('aaaaaaaaaaaa');
ERROR 23000: Duplicate entry 'aaaaaaaaaaaa' for key 1
insert into t1 values (repeat('b',20));
select c c1 from t1 where c='1';
c1
1
select c c2 from t1 where c='2';
c2
2
select c c3 from t1 where c='3';
c3
3
select c cx from t1 where c='x';
cx
x
select c cy from t1 where c='y';
cy
y
select c cz from t1 where c='z';
cz
z
select c ca10 from t1 where c='aaaaaaaaaa';
ca10
aaaaaaaaaa
select c cb20 from t1 where c=repeat('b',20);
cb20
bbbbbbbbbbbbbbbbbbbb
drop table t1;
create table t1 (c char(3) character set utf8 collate utf8_bin, unique (c(2)));
insert into t1 values ('1'),('2'),('3'),('4'),('x'),('y'),('z');
insert into t1 values ('a');
insert into t1 values ('aa');
insert into t1 values ('aaa');
ERROR 23000: Duplicate entry 'aaa' for key 1
insert into t1 values ('b');
insert into t1 values ('bb');
insert into t1 values ('bbb');
ERROR 23000: Duplicate entry 'bbb' for key 1
insert into t1 values ('а');
insert into t1 values ('аа');
insert into t1 values ('ааа');
ERROR 23000: Duplicate entry 'ааа' for key 1
insert into t1 values ('б');
insert into t1 values ('бб');
insert into t1 values ('ббб');
ERROR 23000: Duplicate entry 'ббб' for key 1
insert into t1 values ('ꪪ');
insert into t1 values ('ꪪꪪ');
insert into t1 values ('ꪪꪪꪪ');
ERROR 23000: Duplicate entry 'ꪪꪪ' for key 1
drop table t1;
create table t1 (
c char(10) character set utf8 collate utf8_bin,
unique key a using hash (c(1))
) engine=heap;
show create table t1;
Table Create Table
t1 CREATE TABLE `t1` (
`c` char(10) character set utf8 collate utf8_bin default NULL,
UNIQUE KEY `a` (`c`(1))
) ENGINE=HEAP DEFAULT CHARSET=latin1
insert into t1 values ('a'),('b'),('c'),('d'),('e'),('f');
insert into t1 values ('aa');
ERROR 23000: Duplicate entry 'aa' for key 1
insert into t1 values ('aaa');
ERROR 23000: Duplicate entry 'aaa' for key 1
insert into t1 values ('б');
insert into t1 values ('бб');
ERROR 23000: Duplicate entry 'б' for key 1
insert into t1 values ('ббб');
ERROR 23000: Duplicate entry 'б' for key 1
select c as c_all from t1 order by c;
c_all
a
b
c
d
e
f
б
select c as c_a from t1 where c='a';
c_a
a
select c as c_a from t1 where c='б';
c_a
б
drop table t1;
create table t1 (
c char(10) character set utf8 collate utf8_bin,
c char(10) character set utf8 collate utf8_bin,
unique key a using btree (c(1))
unique key a using btree (c(1))
) engine=heap;
) engine=heap;
...
...
mysql-test/r/endspace.result
View file @
ba924c0a
...
@@ -19,7 +19,7 @@ select 'a a' > 'a', 'a \0' < 'a';
...
@@ -19,7 +19,7 @@ select 'a a' > 'a', 'a \0' < 'a';
1 1
1 1
select binary 'a a' > 'a', binary 'a \0' > 'a', binary 'a\0' > 'a';
select binary 'a a' > 'a', binary 'a \0' > 'a', binary 'a\0' > 'a';
binary 'a a' > 'a' binary 'a \0' > 'a' binary 'a\0' > 'a'
binary 'a a' > 'a' binary 'a \0' > 'a' binary 'a\0' > 'a'
1
1 1
1
0 0
create table t1 (text1 varchar(32) not NULL, KEY key1 (text1));
create table t1 (text1 varchar(32) not NULL, KEY key1 (text1));
insert into t1 values ('teststring'), ('nothing'), ('teststring\t');
insert into t1 values ('teststring'), ('nothing'), ('teststring\t');
check table t1;
check table t1;
...
...
mysql-test/r/myisam.result
View file @
ba924c0a
...
@@ -412,6 +412,7 @@ aaa.
...
@@ -412,6 +412,7 @@ aaa.
aaa .
aaa .
select concat(a,'.') from t1 where binary a='aaa';
select concat(a,'.') from t1 where binary a='aaa';
concat(a,'.')
concat(a,'.')
aaa .
aaa.
aaa.
update t1 set a='bbb' where a='aaa';
update t1 set a='bbb' where a='aaa';
select concat(a,'.') from t1;
select concat(a,'.') from t1;
...
...
mysql-test/t/ctype_utf8.test
View file @
ba924c0a
...
@@ -46,6 +46,15 @@ SELECT 'a\0' < 'a ';
...
@@ -46,6 +46,15 @@ SELECT 'a\0' < 'a ';
SELECT
'a\t'
<
'a'
;
SELECT
'a\t'
<
'a'
;
SELECT
'a\t'
<
'a '
;
SELECT
'a\t'
<
'a '
;
#
# The same for binary collation
#
SELECT
'a'
=
'a '
collate
utf8_bin
;
SELECT
'a\0'
<
'a'
collate
utf8_bin
;
SELECT
'a\0'
<
'a '
collate
utf8_bin
;
SELECT
'a\t'
<
'a'
collate
utf8_bin
;
SELECT
'a\t'
<
'a '
collate
utf8_bin
;
CREATE
TABLE
t1
(
a
char
(
10
)
character
set
utf8
not
null
);
CREATE
TABLE
t1
(
a
char
(
10
)
character
set
utf8
not
null
);
INSERT
INTO
t1
VALUES
(
'a'
),(
'a\0'
),(
'a\t'
),(
'a '
);
INSERT
INTO
t1
VALUES
(
'a'
),(
'a\0'
),(
'a\t'
),(
'a '
);
SELECT
hex
(
a
),
STRCMP
(
a
,
'a'
),
STRCMP
(
a
,
'a '
)
FROM
t1
;
SELECT
hex
(
a
),
STRCMP
(
a
,
'a'
),
STRCMP
(
a
,
'a '
)
FROM
t1
;
...
@@ -189,7 +198,7 @@ drop table t2;
...
@@ -189,7 +198,7 @@ drop table t2;
#
#
# Bug 4521: unique key prefix interacts poorly with utf8
# Bug 4521: unique key prefix interacts poorly with utf8
#
Check keys with prefix compression
#
MYISAM: keys with prefix compression, case insensitive collation.
#
#
create
table
t1
(
c
varchar
(
30
)
character
set
utf8
,
unique
(
c
(
10
)));
create
table
t1
(
c
varchar
(
30
)
character
set
utf8
,
unique
(
c
(
10
)));
insert
into
t1
values
(
'1'
),(
'2'
),(
'3'
),(
'x'
),(
'y'
),(
'z'
);
insert
into
t1
values
(
'1'
),(
'2'
),(
'3'
),(
'x'
),(
'y'
),(
'z'
);
...
@@ -211,7 +220,8 @@ drop table t1;
...
@@ -211,7 +220,8 @@ drop table t1;
#
#
# Bug 4521: unique key prefix interacts poorly with utf8
# Bug 4521: unique key prefix interacts poorly with utf8
# Check fixed length keys
# MYISAM: fixed length keys, case insensitive collation
#
create
table
t1
(
c
char
(
3
)
character
set
utf8
,
unique
(
c
(
2
)));
create
table
t1
(
c
char
(
3
)
character
set
utf8
,
unique
(
c
(
2
)));
insert
into
t1
values
(
'1'
),(
'2'
),(
'3'
),(
'4'
),(
'x'
),(
'y'
),(
'z'
);
insert
into
t1
values
(
'1'
),(
'2'
),(
'3'
),(
'4'
),(
'x'
),(
'y'
),(
'z'
);
insert
into
t1
values
(
'a'
);
insert
into
t1
values
(
'a'
);
...
@@ -265,6 +275,105 @@ drop table t1;
...
@@ -265,6 +275,105 @@ drop table t1;
# Check HEAP+BTREE, case insensitive collation
# Check HEAP+BTREE, case insensitive collation
#
#
create
table
t1
(
create
table
t1
(
c
char
(
10
)
character
set
utf8
,
unique
key
a
using
btree
(
c
(
1
))
)
engine
=
heap
;
show
create
table
t1
;
insert
into
t1
values
(
'a'
),(
'b'
),(
'c'
),(
'd'
),(
'e'
),(
'f'
);
--
error
1062
insert
into
t1
values
(
'aa'
);
--
error
1062
insert
into
t1
values
(
'aaa'
);
insert
into
t1
values
(
'б'
);
--
error
1062
insert
into
t1
values
(
'бб'
);
--
error
1062
insert
into
t1
values
(
'ббб'
);
select
c
as
c_all
from
t1
order
by
c
;
select
c
as
c_a
from
t1
where
c
=
'a'
;
select
c
as
c_a
from
t1
where
c
=
'б'
;
drop
table
t1
;
#
# Bug 4521: unique key prefix interacts poorly with utf8
# MYISAM: keys with prefix compression, binary collation.
#
create
table
t1
(
c
varchar
(
30
)
character
set
utf8
collate
utf8_bin
,
unique
(
c
(
10
)));
insert
into
t1
values
(
'1'
),(
'2'
),(
'3'
),(
'x'
),(
'y'
),(
'z'
);
insert
into
t1
values
(
'aaaaaaaaaa'
);
--
error
1062
insert
into
t1
values
(
'aaaaaaaaaaa'
);
--
error
1062
insert
into
t1
values
(
'aaaaaaaaaaaa'
);
insert
into
t1
values
(
repeat
(
'b'
,
20
));
select
c
c1
from
t1
where
c
=
'1'
;
select
c
c2
from
t1
where
c
=
'2'
;
select
c
c3
from
t1
where
c
=
'3'
;
select
c
cx
from
t1
where
c
=
'x'
;
select
c
cy
from
t1
where
c
=
'y'
;
select
c
cz
from
t1
where
c
=
'z'
;
select
c
ca10
from
t1
where
c
=
'aaaaaaaaaa'
;
select
c
cb20
from
t1
where
c
=
repeat
(
'b'
,
20
);
drop
table
t1
;
#
# Bug 4521: unique key prefix interacts poorly with utf8
# MYISAM: fixed length keys, binary collation
#
create
table
t1
(
c
char
(
3
)
character
set
utf8
collate
utf8_bin
,
unique
(
c
(
2
)));
insert
into
t1
values
(
'1'
),(
'2'
),(
'3'
),(
'4'
),(
'x'
),(
'y'
),(
'z'
);
insert
into
t1
values
(
'a'
);
insert
into
t1
values
(
'aa'
);
--
error
1062
insert
into
t1
values
(
'aaa'
);
insert
into
t1
values
(
'b'
);
insert
into
t1
values
(
'bb'
);
--
error
1062
insert
into
t1
values
(
'bbb'
);
insert
into
t1
values
(
'а'
);
insert
into
t1
values
(
'аа'
);
--
error
1062
insert
into
t1
values
(
'ааа'
);
insert
into
t1
values
(
'б'
);
insert
into
t1
values
(
'бб'
);
--
error
1062
insert
into
t1
values
(
'ббб'
);
insert
into
t1
values
(
'ꪪ'
);
insert
into
t1
values
(
'ꪪꪪ'
);
--
error
1062
insert
into
t1
values
(
'ꪪꪪꪪ'
);
drop
table
t1
;
#
# Bug 4531: unique key prefix interacts poorly with utf8
# Check HEAP+HASH, binary collation
#
create
table
t1
(
c
char
(
10
)
character
set
utf8
collate
utf8_bin
,
unique
key
a
using
hash
(
c
(
1
))
)
engine
=
heap
;
show
create
table
t1
;
insert
into
t1
values
(
'a'
),(
'b'
),(
'c'
),(
'd'
),(
'e'
),(
'f'
);
--
error
1062
insert
into
t1
values
(
'aa'
);
--
error
1062
insert
into
t1
values
(
'aaa'
);
insert
into
t1
values
(
'б'
);
--
error
1062
insert
into
t1
values
(
'бб'
);
--
error
1062
insert
into
t1
values
(
'ббб'
);
select
c
as
c_all
from
t1
order
by
c
;
select
c
as
c_a
from
t1
where
c
=
'a'
;
select
c
as
c_a
from
t1
where
c
=
'б'
;
drop
table
t1
;
#
# Bug 4531: unique key prefix interacts poorly with utf8
# Check HEAP+BTREE, binary collation
#
create
table
t1
(
c
char
(
10
)
character
set
utf8
collate
utf8_bin
,
c
char
(
10
)
character
set
utf8
collate
utf8_bin
,
unique
key
a
using
btree
(
c
(
1
))
unique
key
a
using
btree
(
c
(
1
))
)
engine
=
heap
;
)
engine
=
heap
;
...
...
sql/field.h
View file @
ba924c0a
...
@@ -357,7 +357,7 @@ class Field_str :public Field {
...
@@ -357,7 +357,7 @@ class Field_str :public Field {
uint
size_of
()
const
{
return
sizeof
(
*
this
);
}
uint
size_of
()
const
{
return
sizeof
(
*
this
);
}
CHARSET_INFO
*
charset
(
void
)
const
{
return
field_charset
;
}
CHARSET_INFO
*
charset
(
void
)
const
{
return
field_charset
;
}
void
set_charset
(
CHARSET_INFO
*
charset
)
{
field_charset
=
charset
;
}
void
set_charset
(
CHARSET_INFO
*
charset
)
{
field_charset
=
charset
;
}
bool
binary
()
const
{
return
field_charset
->
state
&
MY_CS_BINSORT
?
1
:
0
;
}
bool
binary
()
const
{
return
field_charset
==
&
my_charset_bin
;
}
uint32
max_length
()
{
return
field_length
;
}
uint32
max_length
()
{
return
field_length
;
}
friend
class
create_field
;
friend
class
create_field
;
};
};
...
...
sql/ha_berkeley.cc
View file @
ba924c0a
...
@@ -357,8 +357,10 @@ ulong ha_berkeley::index_flags(uint idx, uint part, bool all_parts) const
...
@@ -357,8 +357,10 @@ ulong ha_berkeley::index_flags(uint idx, uint part, bool all_parts) const
case
HA_KEYTYPE_VARTEXT
:
case
HA_KEYTYPE_VARTEXT
:
/*
/*
As BDB stores only one copy of equal strings, we can't use key read
As BDB stores only one copy of equal strings, we can't use key read
on these
on these
. Binary collations do support key read though.
*/
*/
if
(
!
(
table
->
key_info
[
idx
].
key_part
[
i
].
field
->
charset
()
->
state
&
MY_CS_BINSORT
))
flags
&=
~
HA_KEYREAD_ONLY
;
flags
&=
~
HA_KEYREAD_ONLY
;
break
;
break
;
default:
// Keep compiler happy
default:
// Keep compiler happy
...
...
sql/ha_heap.cc
View file @
ba924c0a
...
@@ -430,7 +430,7 @@ int ha_heap::create(const char *name, TABLE *table_arg,
...
@@ -430,7 +430,7 @@ int ha_heap::create(const char *name, TABLE *table_arg,
{
{
if
(
!
f_is_packed
(
flag
)
&&
if
(
!
f_is_packed
(
flag
)
&&
f_packtype
(
flag
)
==
(
int
)
FIELD_TYPE_DECIMAL
&&
f_packtype
(
flag
)
==
(
int
)
FIELD_TYPE_DECIMAL
&&
!
(
f
lag
&
FIELDFLAG_BINARY
))
!
(
f
ield
->
charset
()
==
&
my_charset_bin
))
seg
->
type
=
(
int
)
HA_KEYTYPE_TEXT
;
seg
->
type
=
(
int
)
HA_KEYTYPE_TEXT
;
else
else
seg
->
type
=
(
int
)
HA_KEYTYPE_BINARY
;
seg
->
type
=
(
int
)
HA_KEYTYPE_BINARY
;
...
...
sql/item_cmpfunc.cc
View file @
ba924c0a
...
@@ -303,10 +303,10 @@ int Arg_comparator::set_compare_func(Item_bool_func2 *item, Item_result type)
...
@@ -303,10 +303,10 @@ int Arg_comparator::set_compare_func(Item_bool_func2 *item, Item_result type)
my_coll_agg_error
((
*
a
)
->
collation
,
(
*
b
)
->
collation
,
owner
->
func_name
());
my_coll_agg_error
((
*
a
)
->
collation
,
(
*
b
)
->
collation
,
owner
->
func_name
());
return
1
;
return
1
;
}
}
if
(
my_binary_compare
(
cmp_collation
.
collation
)
)
if
(
cmp_collation
.
collation
==
&
my_charset_bin
)
{
{
/*
/*
We are using
binary collation
, change to compare byte by byte,
We are using
BLOB/BINARY/VARBINARY
, change to compare byte by byte,
without removing end space
without removing end space
*/
*/
if
(
func
==
&
Arg_comparator
::
compare_string
)
if
(
func
==
&
Arg_comparator
::
compare_string
)
...
...
sql/sql_parse.cc
View file @
ba924c0a
...
@@ -1643,8 +1643,8 @@ bool dispatch_command(enum enum_server_command command, THD *thd,
...
@@ -1643,8 +1643,8 @@ bool dispatch_command(enum enum_server_command command, THD *thd,
SHUTDOWN_DEFAULT is 0. If client is >= 4.1.3, the shutdown level is in
SHUTDOWN_DEFAULT is 0. If client is >= 4.1.3, the shutdown level is in
packet[0].
packet[0].
*/
*/
enum
enum_shutdown_level
level
=
enum
mysql_
enum_shutdown_level
level
=
(
enum
enum_shutdown_level
)
(
uchar
)
packet
[
0
];
(
enum
mysql_
enum_shutdown_level
)
(
uchar
)
packet
[
0
];
DBUG_PRINT
(
"quit"
,(
"Got shutdown command for level %u"
,
level
));
DBUG_PRINT
(
"quit"
,(
"Got shutdown command for level %u"
,
level
));
if
(
level
==
SHUTDOWN_DEFAULT
)
if
(
level
==
SHUTDOWN_DEFAULT
)
level
=
SHUTDOWN_WAIT_ALL_BUFFERS
;
// soon default will be configurable
level
=
SHUTDOWN_WAIT_ALL_BUFFERS
;
// soon default will be configurable
...
...
strings/ctype-bin.c
View file @
ba924c0a
...
@@ -68,11 +68,22 @@ static uchar bin_char_array[] =
...
@@ -68,11 +68,22 @@ static uchar bin_char_array[] =
static
int
my_strnncoll_binary
(
CHARSET_INFO
*
cs
__attribute__
((
unused
)),
const
uchar
*
s
,
uint
slen
,
const
uchar
*
t
,
uint
tlen
,
my_bool
t_is_prefix
)
{
uint
len
=
min
(
slen
,
tlen
);
int
cmp
=
memcmp
(
s
,
t
,
len
);
return
cmp
?
cmp
:
(
int
)((
t_is_prefix
?
len
:
slen
)
-
tlen
);
}
/*
/*
Compare two strings. Result is sign(first_argument - second_argument)
Compare two strings. Result is sign(first_argument - second_argument)
SYNOPSIS
SYNOPSIS
my_strnncoll_binary()
my_strnncoll
sp
_binary()
cs Chararacter set
cs Chararacter set
s String to compare
s String to compare
slen Length of 's'
slen Length of 's'
...
@@ -80,8 +91,9 @@ static uchar bin_char_array[] =
...
@@ -80,8 +91,9 @@ static uchar bin_char_array[] =
tlen Length of 't'
tlen Length of 't'
NOTE
NOTE
This is used also when comparing with end space removal, as end space
This function is used for real binary strings, i.e. for
is significant for binary strings
BLOB, BINARY(N) and VARBINARY(N).
It does not ignore trailing spaces.
RETURN
RETURN
< 0 s < t
< 0 s < t
...
@@ -89,7 +101,15 @@ static uchar bin_char_array[] =
...
@@ -89,7 +101,15 @@ static uchar bin_char_array[] =
> 0 s > t
> 0 s > t
*/
*/
static
int
my_strnncoll_binary
(
CHARSET_INFO
*
cs
__attribute__
((
unused
)),
static
int
my_strnncollsp_binary
(
CHARSET_INFO
*
cs
__attribute__
((
unused
)),
const
uchar
*
s
,
uint
slen
,
const
uchar
*
t
,
uint
tlen
)
{
return
my_strnncoll_binary
(
cs
,
s
,
slen
,
t
,
tlen
,
0
);
}
static
int
my_strnncoll_8bit_bin
(
CHARSET_INFO
*
cs
__attribute__
((
unused
)),
const
uchar
*
s
,
uint
slen
,
const
uchar
*
s
,
uint
slen
,
const
uchar
*
t
,
uint
tlen
,
const
uchar
*
t
,
uint
tlen
,
my_bool
t_is_prefix
)
my_bool
t_is_prefix
)
...
@@ -100,11 +120,61 @@ static int my_strnncoll_binary(CHARSET_INFO * cs __attribute__((unused)),
...
@@ -100,11 +120,61 @@ static int my_strnncoll_binary(CHARSET_INFO * cs __attribute__((unused)),
}
}
static
int
my_strnncollsp_binary
(
CHARSET_INFO
*
cs
__attribute__
((
unused
)),
/*
const
uchar
*
s
,
uint
slen
,
Compare two strings. Result is sign(first_argument - second_argument)
const
uchar
*
t
,
uint
tlen
)
SYNOPSIS
my_strnncollsp_8bit_bin()
cs Chararacter set
s String to compare
slen Length of 's'
t String to compare
tlen Length of 't'
NOTE
This function is used for character strings with binary collations.
It ignores trailing spaces.
RETURN
< 0 s < t
0 s == t
> 0 s > t
*/
static
int
my_strnncollsp_8bit_bin
(
CHARSET_INFO
*
cs
__attribute__
((
unused
)),
const
uchar
*
a
,
uint
a_length
,
const
uchar
*
b
,
uint
b_length
)
{
{
return
my_strnncoll_binary
(
cs
,
s
,
slen
,
t
,
tlen
,
0
);
const
uchar
*
end
;
uint
length
;
end
=
a
+
(
length
=
min
(
a_length
,
b_length
));
while
(
a
<
end
)
{
if
(
*
a
++
!=
*
b
++
)
return
((
int
)
a
[
-
1
]
-
(
int
)
b
[
-
1
]);
}
if
(
a_length
!=
b_length
)
{
int
swap
=
0
;
/*
Check the next not space character of the longer key. If it's < ' ',
then it's smaller than the other key.
*/
if
(
a_length
<
b_length
)
{
/* put shorter key in s */
a_length
=
b_length
;
a
=
b
;
swap
=
-
1
;
/* swap sign of result */
}
for
(
end
=
a
+
a_length
-
length
;
a
<
end
;
a
++
)
{
if
(
*
a
!=
' '
)
return
((
int
)
*
a
-
(
int
)
' '
)
^
swap
;
}
}
return
0
;
}
}
...
@@ -342,6 +412,20 @@ uint my_instr_bin(CHARSET_INFO *cs __attribute__((unused)),
...
@@ -342,6 +412,20 @@ uint my_instr_bin(CHARSET_INFO *cs __attribute__((unused)),
MY_COLLATION_HANDLER
my_collation_8bit_bin_handler
=
MY_COLLATION_HANDLER
my_collation_8bit_bin_handler
=
{
NULL
,
/* init */
my_strnncoll_8bit_bin
,
my_strnncollsp_8bit_bin
,
my_strnxfrm_bin
,
my_like_range_simple
,
my_wildcmp_bin
,
my_strcasecmp_bin
,
my_instr_bin
,
my_hash_sort_bin
};
static
MY_COLLATION_HANDLER
my_collation_binary_handler
=
{
{
NULL
,
/* init */
NULL
,
/* init */
my_strnncoll_binary
,
my_strnncoll_binary
,
...
@@ -407,5 +491,5 @@ CHARSET_INFO my_charset_bin =
...
@@ -407,5 +491,5 @@ CHARSET_INFO my_charset_bin =
0
,
/* min_sort_char */
0
,
/* min_sort_char */
255
,
/* max_sort_char */
255
,
/* max_sort_char */
&
my_charset_handler
,
&
my_charset_handler
,
&
my_collation_
8bit_bin
_handler
&
my_collation_
binary
_handler
};
};
strings/ctype-mb.c
View file @
ba924c0a
...
@@ -360,11 +360,62 @@ static int my_strnncoll_mb_bin(CHARSET_INFO * cs __attribute__((unused)),
...
@@ -360,11 +360,62 @@ static int my_strnncoll_mb_bin(CHARSET_INFO * cs __attribute__((unused)),
return
cmp
?
cmp
:
(
int
)
((
t_is_prefix
?
len
:
slen
)
-
tlen
);
return
cmp
?
cmp
:
(
int
)
((
t_is_prefix
?
len
:
slen
)
-
tlen
);
}
}
/*
Compare two strings.
SYNOPSIS
my_strnncollsp_mb_bin()
cs Chararacter set
s String to compare
slen Length of 's'
t String to compare
tlen Length of 't'
NOTE
This function is used for character strings with binary collations.
It ignores trailing spaces.
RETURN
A negative number if s < t
A positive number if s > t
0 if strings are equal
*/
static
int
my_strnncollsp_mb_bin
(
CHARSET_INFO
*
cs
__attribute__
((
unused
)),
static
int
my_strnncollsp_mb_bin
(
CHARSET_INFO
*
cs
__attribute__
((
unused
)),
const
uchar
*
s
,
uint
slen
,
const
uchar
*
a
,
uint
a_length
,
const
uchar
*
t
,
uint
tlen
)
const
uchar
*
b
,
uint
b_length
)
{
{
return
my_strnncoll_mb_bin
(
cs
,
s
,
slen
,
t
,
tlen
,
0
);
const
uchar
*
end
;
uint
length
;
end
=
a
+
(
length
=
min
(
a_length
,
b_length
));
while
(
a
<
end
)
{
if
(
*
a
++
!=
*
b
++
)
return
((
int
)
a
[
-
1
]
-
(
int
)
b
[
-
1
]);
}
if
(
a_length
!=
b_length
)
{
int
swap
=
0
;
/*
Check the next not space character of the longer key. If it's < ' ',
then it's smaller than the other key.
*/
if
(
a_length
<
b_length
)
{
/* put shorter key in s */
a_length
=
b_length
;
a
=
b
;
swap
=
-
1
;
/* swap sign of result */
}
for
(
end
=
a
+
a_length
-
length
;
a
<
end
;
a
++
)
{
if
(
*
a
!=
' '
)
return
((
int
)
*
a
-
(
int
)
' '
)
^
swap
;
}
}
return
0
;
}
}
...
...
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