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
f8bfae6b
Commit
f8bfae6b
authored
Oct 19, 2005
by
unknown
Browse files
Options
Browse Files
Download
Plain Diff
Merge mysql.com:/home/emurphy/src/bk-innodb/mysql-5.0
into mysql.com:/home/emurphy/src/bk-clean/mysql-5.0
parents
33c972e4
6979c0dd
Changes
3
Hide whitespace changes
Inline
Side-by-side
Showing
3 changed files
with
290 additions
and
7 deletions
+290
-7
mysql-test/r/innodb.result
mysql-test/r/innodb.result
+109
-0
mysql-test/t/innodb.test
mysql-test/t/innodb.test
+116
-0
sql/ha_innodb.cc
sql/ha_innodb.cc
+65
-7
No files found.
mysql-test/r/innodb.result
View file @
f8bfae6b
...
@@ -2663,3 +2663,112 @@ rollback;
...
@@ -2663,3 +2663,112 @@ rollback;
rollback;
rollback;
drop table t1;
drop table t1;
drop function f1;
drop function f1;
create table t1 (
a int, b char(10), c char(10), filler char(10), primary key(a, b(2)), unique key (a, c(2))
)
character set utf8 engine = innodb;
create table t2 (
a int, b char(10), c char(10), filler char(10), primary key(a, b(2)), unique key (a, c(2))
)
character set ucs2 engine = innodb;
insert into t1 values (1,'abcdefg','abcdefg','one');
insert into t1 values (2,'ijkilmn','ijkilmn','two');
insert into t1 values (3,'qrstuvw','qrstuvw','three');
insert into t1 values (4,_utf8 0xe880bd,_utf8 0xe880bd,'four');
insert into t1 values (4,_utf8 0x5b,_utf8 0x5b,'five');
insert into t1 values (4,_utf8 0xe880bde880bd,_utf8 0xe880bde880bd,'six');
insert into t1 values (4,_utf8 0xe880bdD0B1e880bd,_utf8 0xe880bdD0B1e880bd,'seven');
insert into t1 values (4,_utf8 0xD0B1,_utf8 0xD0B1,'eight');
insert into t2 values (1,'abcdefg','abcdefg','one');
insert into t2 values (2,'ijkilmn','ijkilmn','two');
insert into t2 values (3,'qrstuvw','qrstuvw','three');
insert into t2 values (4,_ucs2 0x00e400,_ucs2 0x00e400,'four');
insert into t2 values (4,_ucs2 0x00640065,_ucs2 0x00640065,'five');
insert into t2 values (4,_ucs2 0x00e400e50068,_ucs2 0x00e400e50068,'six');
insert into t2 values (4,_ucs2 0x01fc,_ucs2 0x01fc,'seven');
insert into t2 values (4,_ucs2 0x0120,_ucs2 0x0120,'eight');
insert into t2 values (4,_ucs2 0x0563,_ucs2 0x0563,'ten');
insert into t2 values (4,_ucs2 0x05630563,_ucs2 0x05630563,'eleven');
insert into t2 values (4,_ucs2 0x0563001fc0563,_ucs2 0x0563001fc0563,'point');
insert into t2 values (4,_ucs2 0x05612020,_ucs2 0x05612020,'taken');
drop table t1;
drop table t2;
create table t1 (
a int, b varchar(10), c varchar(10), filler varchar(10), primary key(a, b(2)), unique key (a, c(2))
)
character set utf8 engine = innodb;
create table t2 (
a int, b varchar(10), c varchar(10), filler varchar(10), primary key(a, b(2)), unique key (a, c(2))
)
character set ucs2 engine = innodb;
insert into t1 values (1,'abcdefg','abcdefg','one');
insert into t1 values (2,'ijkilmn','ijkilmn','two');
insert into t1 values (3,'qrstuvw','qrstuvw','three');
insert into t1 values (4,_utf8 0xe880bd,_utf8 0xe880bd,'four');
insert into t1 values (4,_utf8 0x5b,_utf8 0x5b,'five');
insert into t1 values (4,_utf8 0xe880bde880bd,_utf8 0xe880bde880bd,'six');
insert into t1 values (4,_utf8 0xe880bdD0B1e880bd,_utf8 0xe880bdD0B1e880bd,'seven');
insert into t1 values (4,_utf8 0xD0B1,_utf8 0xD0B1,'eight');
insert into t2 values (1,'abcdefg','abcdefg','one');
insert into t2 values (2,'ijkilmn','ijkilmn','two');
insert into t2 values (3,'qrstuvw','qrstuvw','three');
insert into t2 values (4,_ucs2 0x00e400,_ucs2 0x00e400,'four');
insert into t2 values (4,_ucs2 0x00640065,_ucs2 0x00640065,'five');
insert into t2 values (4,_ucs2 0x00e400e50068,_ucs2 0x00e400e50068,'six');
insert into t2 values (4,_ucs2 0x01fc,_ucs2 0x01fc,'seven');
insert into t2 values (4,_ucs2 0x0120,_ucs2 0x0120,'eight');
insert into t2 values (4,_ucs2 0x0563,_ucs2 0x0563,'ten');
insert into t2 values (4,_ucs2 0x05630563,_ucs2 0x05630563,'eleven');
insert into t2 values (4,_ucs2 0x0563001fc0563,_ucs2 0x0563001fc0563,'point');
insert into t2 values (4,_ucs2 0x05612020,_ucs2 0x05612020,'taken');
drop table t1;
drop table t2;
create table t1 (
a int, b text(10), c text(10), filler text(10), primary key(a, b(2)), unique key (a, c(2))
)
character set utf8 engine = innodb;
create table t2 (
a int, b text(10), c text(10), filler text(10), primary key(a, b(2)), unique key (a, c(2))
)
character set ucs2 engine = innodb;
insert into t1 values (1,'abcdefg','abcdefg','one');
insert into t1 values (2,'ijkilmn','ijkilmn','two');
insert into t1 values (3,'qrstuvw','qrstuvw','three');
insert into t1 values (4,_utf8 0xe880bd,_utf8 0xe880bd,'four');
insert into t1 values (4,_utf8 0x5b,_utf8 0x5b,'five');
insert into t1 values (4,_utf8 0xe880bde880bd,_utf8 0xe880bde880bd,'six');
insert into t1 values (4,_utf8 0xe880bdD0B1e880bd,_utf8 0xe880bdD0B1e880bd,'seven');
insert into t1 values (4,_utf8 0xD0B1,_utf8 0xD0B1,'eight');
insert into t2 values (1,'abcdefg','abcdefg','one');
insert into t2 values (2,'ijkilmn','ijkilmn','two');
insert into t2 values (3,'qrstuvw','qrstuvw','three');
insert into t2 values (4,_ucs2 0x00e400,_ucs2 0x00e400,'four');
insert into t2 values (4,_ucs2 0x00640065,_ucs2 0x00640065,'five');
insert into t2 values (4,_ucs2 0x00e400e50068,_ucs2 0x00e400e50068,'six');
insert into t2 values (4,_ucs2 0x01fc,_ucs2 0x01fc,'seven');
insert into t2 values (4,_ucs2 0x0120,_ucs2 0x0120,'eight');
insert into t2 values (4,_ucs2 0x0563,_ucs2 0x0563,'ten');
insert into t2 values (4,_ucs2 0x05630563,_ucs2 0x05630563,'eleven');
insert into t2 values (4,_ucs2 0x0563001fc0563,_ucs2 0x0563001fc0563,'point');
insert into t2 values (4,_ucs2 0x05612020,_ucs2 0x05612020,'taken');
drop table t1;
drop table t2;
create table t1 (
a int, b blob(10), c blob(10), filler blob(10), primary key(a, b(2)), unique key (a, c(2))
)
character set utf8 engine = innodb;
create table t2 (
a int, b blob(10), c blob(10), filler blob(10), primary key(a, b(2)), unique key (a, c(2))
)
character set ucs2 engine = innodb;
insert into t1 values (1,'abcdefg','abcdefg','one');
insert into t1 values (2,'ijkilmn','ijkilmn','two');
insert into t1 values (3,'qrstuvw','qrstuvw','three');
insert into t1 values (4,_utf8 0xe880bd,_utf8 0xe880bd,'four');
insert into t1 values (4,_utf8 0x5b,_utf8 0x5b,'five');
insert into t1 values (4,_utf8 0xD0B1,_utf8 0xD0B1,'eight');
insert into t2 values (1,'abcdefg','abcdefg','one');
insert into t2 values (2,'ijkilmn','ijkilmn','two');
insert into t2 values (3,'qrstuvw','qrstuvw','three');
insert into t2 values (4,_ucs2 0x00e400,_ucs2 0x00e400,'four');
insert into t2 values (4,_ucs2 0x00640065,_ucs2 0x00640065,'five');
insert into t2 values (4,_ucs2 0x00e400e50068,_ucs2 0x00e400e50068,'six');
insert into t2 values (4,_ucs2 0x01fc,_ucs2 0x01fc,'seven');
insert into t2 values (4,_ucs2 0x0120,_ucs2 0x0120,'eight');
insert into t2 values (4,_ucs2 0x0563,_ucs2 0x0563,'ten');
insert into t2 values (4,_ucs2 0x05612020,_ucs2 0x05612020,'taken');
drop table t1;
drop table t2;
commit;
mysql-test/t/innodb.test
View file @
f8bfae6b
...
@@ -1635,3 +1635,119 @@ drop function f1;
...
@@ -1635,3 +1635,119 @@ drop function f1;
disconnect
a
;
disconnect
a
;
disconnect
b
;
disconnect
b
;
#
# BUG 14056 Column prefix index on UTF-8 primary key column causes: Can't find record..
#
create
table
t1
(
a
int
,
b
char
(
10
),
c
char
(
10
),
filler
char
(
10
),
primary
key
(
a
,
b
(
2
)),
unique
key
(
a
,
c
(
2
))
)
character
set
utf8
engine
=
innodb
;
create
table
t2
(
a
int
,
b
char
(
10
),
c
char
(
10
),
filler
char
(
10
),
primary
key
(
a
,
b
(
2
)),
unique
key
(
a
,
c
(
2
))
)
character
set
ucs2
engine
=
innodb
;
insert
into
t1
values
(
1
,
'abcdefg'
,
'abcdefg'
,
'one'
);
insert
into
t1
values
(
2
,
'ijkilmn'
,
'ijkilmn'
,
'two'
);
insert
into
t1
values
(
3
,
'qrstuvw'
,
'qrstuvw'
,
'three'
);
insert
into
t1
values
(
4
,
_utf8
0xe880bd
,
_utf8
0xe880bd
,
'four'
);
insert
into
t1
values
(
4
,
_utf8
0x5b
,
_utf8
0x5b
,
'five'
);
insert
into
t1
values
(
4
,
_utf8
0xe880bde880bd
,
_utf8
0xe880bde880bd
,
'six'
);
insert
into
t1
values
(
4
,
_utf8
0xe880bdD0B1e880bd
,
_utf8
0xe880bdD0B1e880bd
,
'seven'
);
insert
into
t1
values
(
4
,
_utf8
0xD0B1
,
_utf8
0xD0B1
,
'eight'
);
insert
into
t2
values
(
1
,
'abcdefg'
,
'abcdefg'
,
'one'
);
insert
into
t2
values
(
2
,
'ijkilmn'
,
'ijkilmn'
,
'two'
);
insert
into
t2
values
(
3
,
'qrstuvw'
,
'qrstuvw'
,
'three'
);
insert
into
t2
values
(
4
,
_ucs2
0x00e400
,
_ucs2
0x00e400
,
'four'
);
insert
into
t2
values
(
4
,
_ucs2
0x00640065
,
_ucs2
0x00640065
,
'five'
);
insert
into
t2
values
(
4
,
_ucs2
0x00e400e50068
,
_ucs2
0x00e400e50068
,
'six'
);
insert
into
t2
values
(
4
,
_ucs2
0x01fc
,
_ucs2
0x01fc
,
'seven'
);
insert
into
t2
values
(
4
,
_ucs2
0x0120
,
_ucs2
0x0120
,
'eight'
);
insert
into
t2
values
(
4
,
_ucs2
0x0563
,
_ucs2
0x0563
,
'ten'
);
insert
into
t2
values
(
4
,
_ucs2
0x05630563
,
_ucs2
0x05630563
,
'eleven'
);
insert
into
t2
values
(
4
,
_ucs2
0x0563001fc0563
,
_ucs2
0x0563001fc0563
,
'point'
);
insert
into
t2
values
(
4
,
_ucs2
0x05612020
,
_ucs2
0x05612020
,
'taken'
);
drop
table
t1
;
drop
table
t2
;
create
table
t1
(
a
int
,
b
varchar
(
10
),
c
varchar
(
10
),
filler
varchar
(
10
),
primary
key
(
a
,
b
(
2
)),
unique
key
(
a
,
c
(
2
))
)
character
set
utf8
engine
=
innodb
;
create
table
t2
(
a
int
,
b
varchar
(
10
),
c
varchar
(
10
),
filler
varchar
(
10
),
primary
key
(
a
,
b
(
2
)),
unique
key
(
a
,
c
(
2
))
)
character
set
ucs2
engine
=
innodb
;
insert
into
t1
values
(
1
,
'abcdefg'
,
'abcdefg'
,
'one'
);
insert
into
t1
values
(
2
,
'ijkilmn'
,
'ijkilmn'
,
'two'
);
insert
into
t1
values
(
3
,
'qrstuvw'
,
'qrstuvw'
,
'three'
);
insert
into
t1
values
(
4
,
_utf8
0xe880bd
,
_utf8
0xe880bd
,
'four'
);
insert
into
t1
values
(
4
,
_utf8
0x5b
,
_utf8
0x5b
,
'five'
);
insert
into
t1
values
(
4
,
_utf8
0xe880bde880bd
,
_utf8
0xe880bde880bd
,
'six'
);
insert
into
t1
values
(
4
,
_utf8
0xe880bdD0B1e880bd
,
_utf8
0xe880bdD0B1e880bd
,
'seven'
);
insert
into
t1
values
(
4
,
_utf8
0xD0B1
,
_utf8
0xD0B1
,
'eight'
);
insert
into
t2
values
(
1
,
'abcdefg'
,
'abcdefg'
,
'one'
);
insert
into
t2
values
(
2
,
'ijkilmn'
,
'ijkilmn'
,
'two'
);
insert
into
t2
values
(
3
,
'qrstuvw'
,
'qrstuvw'
,
'three'
);
insert
into
t2
values
(
4
,
_ucs2
0x00e400
,
_ucs2
0x00e400
,
'four'
);
insert
into
t2
values
(
4
,
_ucs2
0x00640065
,
_ucs2
0x00640065
,
'five'
);
insert
into
t2
values
(
4
,
_ucs2
0x00e400e50068
,
_ucs2
0x00e400e50068
,
'six'
);
insert
into
t2
values
(
4
,
_ucs2
0x01fc
,
_ucs2
0x01fc
,
'seven'
);
insert
into
t2
values
(
4
,
_ucs2
0x0120
,
_ucs2
0x0120
,
'eight'
);
insert
into
t2
values
(
4
,
_ucs2
0x0563
,
_ucs2
0x0563
,
'ten'
);
insert
into
t2
values
(
4
,
_ucs2
0x05630563
,
_ucs2
0x05630563
,
'eleven'
);
insert
into
t2
values
(
4
,
_ucs2
0x0563001fc0563
,
_ucs2
0x0563001fc0563
,
'point'
);
insert
into
t2
values
(
4
,
_ucs2
0x05612020
,
_ucs2
0x05612020
,
'taken'
);
drop
table
t1
;
drop
table
t2
;
create
table
t1
(
a
int
,
b
text
(
10
),
c
text
(
10
),
filler
text
(
10
),
primary
key
(
a
,
b
(
2
)),
unique
key
(
a
,
c
(
2
))
)
character
set
utf8
engine
=
innodb
;
create
table
t2
(
a
int
,
b
text
(
10
),
c
text
(
10
),
filler
text
(
10
),
primary
key
(
a
,
b
(
2
)),
unique
key
(
a
,
c
(
2
))
)
character
set
ucs2
engine
=
innodb
;
insert
into
t1
values
(
1
,
'abcdefg'
,
'abcdefg'
,
'one'
);
insert
into
t1
values
(
2
,
'ijkilmn'
,
'ijkilmn'
,
'two'
);
insert
into
t1
values
(
3
,
'qrstuvw'
,
'qrstuvw'
,
'three'
);
insert
into
t1
values
(
4
,
_utf8
0xe880bd
,
_utf8
0xe880bd
,
'four'
);
insert
into
t1
values
(
4
,
_utf8
0x5b
,
_utf8
0x5b
,
'five'
);
insert
into
t1
values
(
4
,
_utf8
0xe880bde880bd
,
_utf8
0xe880bde880bd
,
'six'
);
insert
into
t1
values
(
4
,
_utf8
0xe880bdD0B1e880bd
,
_utf8
0xe880bdD0B1e880bd
,
'seven'
);
insert
into
t1
values
(
4
,
_utf8
0xD0B1
,
_utf8
0xD0B1
,
'eight'
);
insert
into
t2
values
(
1
,
'abcdefg'
,
'abcdefg'
,
'one'
);
insert
into
t2
values
(
2
,
'ijkilmn'
,
'ijkilmn'
,
'two'
);
insert
into
t2
values
(
3
,
'qrstuvw'
,
'qrstuvw'
,
'three'
);
insert
into
t2
values
(
4
,
_ucs2
0x00e400
,
_ucs2
0x00e400
,
'four'
);
insert
into
t2
values
(
4
,
_ucs2
0x00640065
,
_ucs2
0x00640065
,
'five'
);
insert
into
t2
values
(
4
,
_ucs2
0x00e400e50068
,
_ucs2
0x00e400e50068
,
'six'
);
insert
into
t2
values
(
4
,
_ucs2
0x01fc
,
_ucs2
0x01fc
,
'seven'
);
insert
into
t2
values
(
4
,
_ucs2
0x0120
,
_ucs2
0x0120
,
'eight'
);
insert
into
t2
values
(
4
,
_ucs2
0x0563
,
_ucs2
0x0563
,
'ten'
);
insert
into
t2
values
(
4
,
_ucs2
0x05630563
,
_ucs2
0x05630563
,
'eleven'
);
insert
into
t2
values
(
4
,
_ucs2
0x0563001fc0563
,
_ucs2
0x0563001fc0563
,
'point'
);
insert
into
t2
values
(
4
,
_ucs2
0x05612020
,
_ucs2
0x05612020
,
'taken'
);
drop
table
t1
;
drop
table
t2
;
create
table
t1
(
a
int
,
b
blob
(
10
),
c
blob
(
10
),
filler
blob
(
10
),
primary
key
(
a
,
b
(
2
)),
unique
key
(
a
,
c
(
2
))
)
character
set
utf8
engine
=
innodb
;
create
table
t2
(
a
int
,
b
blob
(
10
),
c
blob
(
10
),
filler
blob
(
10
),
primary
key
(
a
,
b
(
2
)),
unique
key
(
a
,
c
(
2
))
)
character
set
ucs2
engine
=
innodb
;
insert
into
t1
values
(
1
,
'abcdefg'
,
'abcdefg'
,
'one'
);
insert
into
t1
values
(
2
,
'ijkilmn'
,
'ijkilmn'
,
'two'
);
insert
into
t1
values
(
3
,
'qrstuvw'
,
'qrstuvw'
,
'three'
);
insert
into
t1
values
(
4
,
_utf8
0xe880bd
,
_utf8
0xe880bd
,
'four'
);
insert
into
t1
values
(
4
,
_utf8
0x5b
,
_utf8
0x5b
,
'five'
);
insert
into
t1
values
(
4
,
_utf8
0xD0B1
,
_utf8
0xD0B1
,
'eight'
);
insert
into
t2
values
(
1
,
'abcdefg'
,
'abcdefg'
,
'one'
);
insert
into
t2
values
(
2
,
'ijkilmn'
,
'ijkilmn'
,
'two'
);
insert
into
t2
values
(
3
,
'qrstuvw'
,
'qrstuvw'
,
'three'
);
insert
into
t2
values
(
4
,
_ucs2
0x00e400
,
_ucs2
0x00e400
,
'four'
);
insert
into
t2
values
(
4
,
_ucs2
0x00640065
,
_ucs2
0x00640065
,
'five'
);
insert
into
t2
values
(
4
,
_ucs2
0x00e400e50068
,
_ucs2
0x00e400e50068
,
'six'
);
insert
into
t2
values
(
4
,
_ucs2
0x01fc
,
_ucs2
0x01fc
,
'seven'
);
insert
into
t2
values
(
4
,
_ucs2
0x0120
,
_ucs2
0x0120
,
'eight'
);
insert
into
t2
values
(
4
,
_ucs2
0x0563
,
_ucs2
0x0563
,
'ten'
);
insert
into
t2
values
(
4
,
_ucs2
0x05612020
,
_ucs2
0x05612020
,
'taken'
);
drop
table
t1
;
drop
table
t2
;
commit
;
sql/ha_innodb.cc
View file @
f8bfae6b
...
@@ -2872,6 +2872,9 @@ ha_innobase::store_key_val_for_row(
...
@@ -2872,6 +2872,9 @@ ha_innobase::store_key_val_for_row(
ulint
lenlen
;
ulint
lenlen
;
ulint
len
;
ulint
len
;
byte
*
data
;
byte
*
data
;
ulint
key_len
;
CHARSET_INFO
*
cs
;
int
error
=
0
;
if
(
is_null
)
{
if
(
is_null
)
{
buff
+=
key_part
->
length
+
2
;
buff
+=
key_part
->
length
+
2
;
...
@@ -2890,8 +2893,20 @@ ha_innobase::store_key_val_for_row(
...
@@ -2890,8 +2893,20 @@ ha_innobase::store_key_val_for_row(
/* In a column prefix index, we may need to truncate
/* In a column prefix index, we may need to truncate
the stored value: */
the stored value: */
if
(
len
>
key_part
->
length
)
{
cs
=
key_part
->
field
->
charset
();
len
=
key_part
->
length
;
if
(
cs
->
mbmaxlen
>
1
&&
key_part
->
length
>
0
)
{
key_len
=
(
ulint
)
cs
->
cset
->
well_formed_len
(
cs
,
(
const
char
*
)
data
,
(
const
char
*
)
data
+
key_part
->
length
,
key_part
->
length
/
cs
->
mbmaxlen
,
&
error
);
}
else
{
key_len
=
key_part
->
length
;
}
if
(
len
>
key_len
)
{
len
=
key_len
;
}
}
/* The length in a key value is always stored in 2
/* The length in a key value is always stored in 2
...
@@ -2915,6 +2930,11 @@ ha_innobase::store_key_val_for_row(
...
@@ -2915,6 +2930,11 @@ ha_innobase::store_key_val_for_row(
||
mysql_type
==
FIELD_TYPE_BLOB
||
mysql_type
==
FIELD_TYPE_BLOB
||
mysql_type
==
FIELD_TYPE_LONG_BLOB
)
{
||
mysql_type
==
FIELD_TYPE_LONG_BLOB
)
{
CHARSET_INFO
*
cs
;
ulint
key_len
;
ulint
len
;
int
error
=
0
;
ut_a
(
key_part
->
key_part_flag
&
HA_PART_KEY_SEG
);
ut_a
(
key_part
->
key_part_flag
&
HA_PART_KEY_SEG
);
if
(
is_null
)
{
if
(
is_null
)
{
...
@@ -2935,8 +2955,21 @@ ha_innobase::store_key_val_for_row(
...
@@ -2935,8 +2955,21 @@ ha_innobase::store_key_val_for_row(
indexes, and we may need to truncate the data to be
indexes, and we may need to truncate the data to be
stored in the key value: */
stored in the key value: */
if
(
blob_len
>
key_part
->
length
)
{
cs
=
key_part
->
field
->
charset
();
blob_len
=
key_part
->
length
;
if
(
cs
->
mbmaxlen
>
1
&&
key_part
->
length
>
0
)
{
key_len
=
(
ulint
)
cs
->
cset
->
well_formed_len
(
cs
,
(
const
char
*
)
blob_data
,
(
const
char
*
)
blob_data
+
key_part
->
length
,
key_part
->
length
/
cs
->
mbmaxlen
,
&
error
);
}
else
{
key_len
=
key_part
->
length
;
}
if
(
blob_len
>
key_len
)
{
blob_len
=
key_len
;
}
}
/* MySQL reserves 2 bytes for the length and the
/* MySQL reserves 2 bytes for the length and the
...
@@ -2958,15 +2991,40 @@ ha_innobase::store_key_val_for_row(
...
@@ -2958,15 +2991,40 @@ ha_innobase::store_key_val_for_row(
value we store may be also in a column prefix
value we store may be also in a column prefix
index. */
index. */
CHARSET_INFO
*
cs
;
ulint
len
;
const
mysql_byte
*
src_start
;
int
error
=
0
;
if
(
is_null
)
{
if
(
is_null
)
{
buff
+=
key_part
->
length
;
buff
+=
key_part
->
length
;
continue
;
continue
;
}
}
memcpy
(
buff
,
record
+
key_part
->
offset
,
cs
=
key_part
->
field
->
charset
();
key_part
->
length
);
src_start
=
record
+
key_part
->
offset
;
buff
+=
key_part
->
length
;
if
(
key_part
->
length
>
0
&&
cs
->
mbmaxlen
>
1
)
{
len
=
(
ulint
)
cs
->
cset
->
well_formed_len
(
cs
,
src_start
,
src_start
+
key_part
->
length
,
key_part
->
length
/
cs
->
mbmaxlen
,
&
error
);
}
else
{
len
=
key_part
->
length
;
}
memcpy
(
buff
,
src_start
,
len
);
buff
+=
len
;
/* Pad the unused space with spaces */
if
(
len
<
key_part
->
length
)
{
len
=
key_part
->
length
-
len
;
memset
(
buff
,
' '
,
len
);
buff
+=
len
;
}
}
}
}
}
...
...
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