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
0826127b
Commit
0826127b
authored
Jun 10, 2003
by
unknown
Browse files
Options
Browse Files
Download
Plain Diff
Merge cpedersen@bk-internal.mysql.com:/home/bk/mysql-4.1
into tsort.bitbybit.dk:/home/carsten/mysql/bk/mysql-4.1
parents
d04fe034
c07680f1
Changes
19
Hide whitespace changes
Inline
Side-by-side
Showing
19 changed files
with
266 additions
and
60 deletions
+266
-60
client/mysqldump.c
client/mysqldump.c
+4
-1
heap/hp_rkey.c
heap/hp_rkey.c
+2
-2
myisam/ft_update.c
myisam/ft_update.c
+45
-21
myisam/mi_delete.c
myisam/mi_delete.c
+14
-1
myisam/mi_page.c
myisam/mi_page.c
+10
-5
mysql-test/r/func_str.result
mysql-test/r/func_str.result
+32
-2
mysql-test/r/func_test.result
mysql-test/r/func_test.result
+57
-0
mysql-test/r/grant.result
mysql-test/r/grant.result
+2
-2
mysql-test/r/heap_btree.result
mysql-test/r/heap_btree.result
+2
-2
mysql-test/r/isam.result
mysql-test/r/isam.result
+8
-8
mysql-test/r/replace.result
mysql-test/r/replace.result
+2
-2
mysql-test/r/type_blob.result
mysql-test/r/type_blob.result
+11
-0
mysql-test/t/func_str.test
mysql-test/t/func_str.test
+14
-1
mysql-test/t/func_test.test
mysql-test/t/func_test.test
+35
-0
mysql-test/t/heap_btree.test
mysql-test/t/heap_btree.test
+2
-2
mysql-test/t/type_blob.test
mysql-test/t/type_blob.test
+7
-0
sql/item_cmpfunc.h
sql/item_cmpfunc.h
+0
-7
sql/item_strfunc.cc
sql/item_strfunc.cc
+12
-1
sql/item_strfunc.h
sql/item_strfunc.h
+7
-3
No files found.
client/mysqldump.c
View file @
0826127b
...
@@ -34,6 +34,7 @@
...
@@ -34,6 +34,7 @@
** XML by Gary Huntress <ghuntress@mediaone.net> 10/10/01, cleaned up
** XML by Gary Huntress <ghuntress@mediaone.net> 10/10/01, cleaned up
** and adapted to mysqldump 05/11/01 by Jani Tolonen
** and adapted to mysqldump 05/11/01 by Jani Tolonen
** Added --single-transaction option 06/06/2002 by Peter Zaitsev
** Added --single-transaction option 06/06/2002 by Peter Zaitsev
** 10 Jun 2003: SET NAMES and --no-set-names by Alexander Barkov
*/
*/
#define DUMP_VERSION "10.2"
#define DUMP_VERSION "10.2"
...
@@ -434,6 +435,7 @@ get_one_option(int optid, const struct my_option *opt __attribute__((unused)),
...
@@ -434,6 +435,7 @@ get_one_option(int optid, const struct my_option *opt __attribute__((unused)),
char
buff
[
255
];
char
buff
[
255
];
opt_quoted
=
1
;
opt_quoted
=
1
;
opt_set_names
=
1
;
opt_compatible_mode_str
=
argument
;
opt_compatible_mode_str
=
argument
;
opt_compatible_mode
=
find_set
(
&
compatible_mode_typelib
,
opt_compatible_mode
=
find_set
(
&
compatible_mode_typelib
,
argument
,
strlen
(
argument
),
argument
,
strlen
(
argument
),
...
@@ -563,7 +565,8 @@ static int dbConnect(char *host, char *user,char *passwd)
...
@@ -563,7 +565,8 @@ static int dbConnect(char *host, char *user,char *passwd)
if
(
shared_memory_base_name
)
if
(
shared_memory_base_name
)
mysql_options
(
&
mysql_connection
,
MYSQL_SHARED_MEMORY_BASE_NAME
,
shared_memory_base_name
);
mysql_options
(
&
mysql_connection
,
MYSQL_SHARED_MEMORY_BASE_NAME
,
shared_memory_base_name
);
#endif
#endif
mysql_options
(
&
mysql_connection
,
MYSQL_SET_CHARSET_NAME
,
default_charset
);
if
(
!
opt_set_names
)
mysql_options
(
&
mysql_connection
,
MYSQL_SET_CHARSET_NAME
,
default_charset
);
if
(
!
(
sock
=
mysql_real_connect
(
&
mysql_connection
,
host
,
user
,
passwd
,
if
(
!
(
sock
=
mysql_real_connect
(
&
mysql_connection
,
host
,
user
,
passwd
,
NULL
,
opt_mysql_port
,
opt_mysql_unix_port
,
NULL
,
opt_mysql_port
,
opt_mysql_unix_port
,
0
)))
0
)))
...
...
heap/hp_rkey.c
View file @
0826127b
...
@@ -38,7 +38,7 @@ int heap_rkey(HP_INFO *info, byte *record, int inx, const byte *key,
...
@@ -38,7 +38,7 @@ int heap_rkey(HP_INFO *info, byte *record, int inx, const byte *key,
custom_arg
.
keyseg
=
info
->
s
->
keydef
[
inx
].
seg
;
custom_arg
.
keyseg
=
info
->
s
->
keydef
[
inx
].
seg
;
custom_arg
.
key_length
=
info
->
lastkey_len
=
custom_arg
.
key_length
=
info
->
lastkey_len
=
hp_rb_pack_key
(
keyinfo
,
(
uchar
*
)
info
->
recbuf
,
hp_rb_pack_key
(
keyinfo
,
(
uchar
*
)
info
->
lastkey
,
(
uchar
*
)
key
,
key_len
);
(
uchar
*
)
key
,
key_len
);
custom_arg
.
search_flag
=
SEARCH_FIND
|
SEARCH_SAME
;
custom_arg
.
search_flag
=
SEARCH_FIND
|
SEARCH_SAME
;
/* for next rkey() after deletion */
/* for next rkey() after deletion */
...
@@ -48,7 +48,7 @@ int heap_rkey(HP_INFO *info, byte *record, int inx, const byte *key,
...
@@ -48,7 +48,7 @@ int heap_rkey(HP_INFO *info, byte *record, int inx, const byte *key,
info
->
last_find_flag
=
HA_READ_KEY_OR_PREV
;
info
->
last_find_flag
=
HA_READ_KEY_OR_PREV
;
else
else
info
->
last_find_flag
=
find_flag
;
info
->
last_find_flag
=
find_flag
;
if
(
!
(
pos
=
tree_search_key
(
&
keyinfo
->
rb_tree
,
info
->
recbuf
,
info
->
parents
,
if
(
!
(
pos
=
tree_search_key
(
&
keyinfo
->
rb_tree
,
info
->
lastkey
,
info
->
parents
,
&
info
->
last_pos
,
find_flag
,
&
custom_arg
)))
&
info
->
last_pos
,
find_flag
,
&
custom_arg
)))
{
{
info
->
update
=
0
;
info
->
update
=
0
;
...
...
myisam/ft_update.c
View file @
0826127b
...
@@ -31,18 +31,24 @@
...
@@ -31,18 +31,24 @@
void
_mi_ft_segiterator_init
(
MI_INFO
*
info
,
uint
keynr
,
const
byte
*
record
,
void
_mi_ft_segiterator_init
(
MI_INFO
*
info
,
uint
keynr
,
const
byte
*
record
,
FT_SEG_ITERATOR
*
ftsi
)
FT_SEG_ITERATOR
*
ftsi
)
{
{
DBUG_ENTER
(
"_mi_ft_segiterator_init"
);
ftsi
->
num
=
info
->
s
->
keyinfo
[
keynr
].
keysegs
;
ftsi
->
num
=
info
->
s
->
keyinfo
[
keynr
].
keysegs
;
ftsi
->
seg
=
info
->
s
->
keyinfo
[
keynr
].
seg
;
ftsi
->
seg
=
info
->
s
->
keyinfo
[
keynr
].
seg
;
ftsi
->
rec
=
record
;
ftsi
->
rec
=
record
;
DBUG_VOID_RETURN
;
}
}
void
_mi_ft_segiterator_dummy_init
(
const
byte
*
record
,
uint
len
,
void
_mi_ft_segiterator_dummy_init
(
const
byte
*
record
,
uint
len
,
FT_SEG_ITERATOR
*
ftsi
)
FT_SEG_ITERATOR
*
ftsi
)
{
{
DBUG_ENTER
(
"_mi_ft_segiterator_dummy_init"
);
ftsi
->
num
=
1
;
ftsi
->
num
=
1
;
ftsi
->
seg
=
0
;
ftsi
->
seg
=
0
;
ftsi
->
pos
=
record
;
ftsi
->
pos
=
record
;
ftsi
->
len
=
len
;
ftsi
->
len
=
len
;
DBUG_VOID_RETURN
;
}
}
/*
/*
...
@@ -56,14 +62,16 @@ void _mi_ft_segiterator_dummy_init(const byte *record, uint len,
...
@@ -56,14 +62,16 @@ void _mi_ft_segiterator_dummy_init(const byte *record, uint len,
uint
_mi_ft_segiterator
(
register
FT_SEG_ITERATOR
*
ftsi
)
uint
_mi_ft_segiterator
(
register
FT_SEG_ITERATOR
*
ftsi
)
{
{
if
(
!
ftsi
->
num
)
return
0
;
else
ftsi
->
num
--
;
DBUG_ENTER
(
"_mi_ft_segiterator"
);
if
(
!
ftsi
->
seg
)
return
1
;
else
ftsi
->
seg
--
;
if
(
!
ftsi
->
num
)
DBUG_RETURN
(
0
)
else
ftsi
->
num
--
;
if
(
!
ftsi
->
seg
)
DBUG_RETURN
(
1
)
else
ftsi
->
seg
--
;
if
(
ftsi
->
seg
->
null_bit
&&
if
(
ftsi
->
seg
->
null_bit
&&
(
ftsi
->
rec
[
ftsi
->
seg
->
null_pos
]
&
ftsi
->
seg
->
null_bit
))
(
ftsi
->
rec
[
ftsi
->
seg
->
null_pos
]
&
ftsi
->
seg
->
null_bit
))
{
{
ftsi
->
pos
=
0
;
ftsi
->
pos
=
0
;
return
1
;
DBUG_RETURN
(
1
)
;
}
}
ftsi
->
pos
=
ftsi
->
rec
+
ftsi
->
seg
->
start
;
ftsi
->
pos
=
ftsi
->
rec
+
ftsi
->
seg
->
start
;
if
(
ftsi
->
seg
->
flag
&
HA_VAR_LENGTH
)
if
(
ftsi
->
seg
->
flag
&
HA_VAR_LENGTH
)
...
@@ -71,7 +79,7 @@ uint _mi_ft_segiterator(register FT_SEG_ITERATOR *ftsi)
...
@@ -71,7 +79,7 @@ uint _mi_ft_segiterator(register FT_SEG_ITERATOR *ftsi)
ftsi
->
len
=
uint2korr
(
ftsi
->
pos
);
ftsi
->
len
=
uint2korr
(
ftsi
->
pos
);
ftsi
->
pos
+=
2
;
/* Skip VARCHAR length */
ftsi
->
pos
+=
2
;
/* Skip VARCHAR length */
set_if_smaller
(
ftsi
->
len
,
ftsi
->
seg
->
length
);
set_if_smaller
(
ftsi
->
len
,
ftsi
->
seg
->
length
);
return
1
;
DBUG_RETURN
(
1
)
;
}
}
if
(
ftsi
->
seg
->
flag
&
HA_BLOB_PART
)
if
(
ftsi
->
seg
->
flag
&
HA_BLOB_PART
)
{
{
...
@@ -79,10 +87,10 @@ uint _mi_ft_segiterator(register FT_SEG_ITERATOR *ftsi)
...
@@ -79,10 +87,10 @@ uint _mi_ft_segiterator(register FT_SEG_ITERATOR *ftsi)
memcpy_fixed
((
char
*
)
&
ftsi
->
pos
,
ftsi
->
pos
+
ftsi
->
seg
->
bit_start
,
memcpy_fixed
((
char
*
)
&
ftsi
->
pos
,
ftsi
->
pos
+
ftsi
->
seg
->
bit_start
,
sizeof
(
char
*
));
sizeof
(
char
*
));
set_if_smaller
(
ftsi
->
len
,
ftsi
->
seg
->
length
);
set_if_smaller
(
ftsi
->
len
,
ftsi
->
seg
->
length
);
return
1
;
DBUG_RETURN
(
1
)
;
}
}
ftsi
->
len
=
ftsi
->
seg
->
length
;
ftsi
->
len
=
ftsi
->
seg
->
length
;
return
1
;
DBUG_RETURN
(
1
)
;
}
}
...
@@ -91,6 +99,8 @@ uint _mi_ft_segiterator(register FT_SEG_ITERATOR *ftsi)
...
@@ -91,6 +99,8 @@ uint _mi_ft_segiterator(register FT_SEG_ITERATOR *ftsi)
uint
_mi_ft_parse
(
TREE
*
parsed
,
MI_INFO
*
info
,
uint
keynr
,
const
byte
*
record
)
uint
_mi_ft_parse
(
TREE
*
parsed
,
MI_INFO
*
info
,
uint
keynr
,
const
byte
*
record
)
{
{
FT_SEG_ITERATOR
ftsi
;
FT_SEG_ITERATOR
ftsi
;
DBUG_ENTER
(
"_mi_ft_parse"
);
_mi_ft_segiterator_init
(
info
,
keynr
,
record
,
&
ftsi
);
_mi_ft_segiterator_init
(
info
,
keynr
,
record
,
&
ftsi
);
ft_parse_init
(
parsed
,
info
->
s
->
keyinfo
[
keynr
].
seg
->
charset
);
ft_parse_init
(
parsed
,
info
->
s
->
keyinfo
[
keynr
].
seg
->
charset
);
...
@@ -98,9 +108,9 @@ uint _mi_ft_parse(TREE *parsed, MI_INFO *info, uint keynr, const byte *record)
...
@@ -98,9 +108,9 @@ uint _mi_ft_parse(TREE *parsed, MI_INFO *info, uint keynr, const byte *record)
{
{
if
(
ftsi
.
pos
)
if
(
ftsi
.
pos
)
if
(
ft_parse
(
parsed
,
(
byte
*
)
ftsi
.
pos
,
ftsi
.
len
))
if
(
ft_parse
(
parsed
,
(
byte
*
)
ftsi
.
pos
,
ftsi
.
len
))
return
1
;
DBUG_RETURN
(
1
)
;
}
}
return
0
;
DBUG_RETURN
(
0
)
;
}
}
FT_WORD
*
_mi_ft_parserecord
(
MI_INFO
*
info
,
uint
keynr
,
FT_WORD
*
_mi_ft_parserecord
(
MI_INFO
*
info
,
uint
keynr
,
...
@@ -108,32 +118,35 @@ FT_WORD * _mi_ft_parserecord(MI_INFO *info, uint keynr,
...
@@ -108,32 +118,35 @@ FT_WORD * _mi_ft_parserecord(MI_INFO *info, uint keynr,
const
byte
*
record
)
const
byte
*
record
)
{
{
TREE
ptree
;
TREE
ptree
;
DBUG_ENTER
(
"_mi_ft_parserecord"
);
bzero
((
char
*
)
&
ptree
,
sizeof
(
ptree
));
bzero
((
char
*
)
&
ptree
,
sizeof
(
ptree
));
if
(
_mi_ft_parse
(
&
ptree
,
info
,
keynr
,
record
))
if
(
_mi_ft_parse
(
&
ptree
,
info
,
keynr
,
record
))
return
NULL
;
DBUG_RETURN
(
NULL
)
;
return
ft_linearize
(
&
ptree
);
DBUG_RETURN
(
ft_linearize
(
&
ptree
)
);
}
}
static
int
_mi_ft_store
(
MI_INFO
*
info
,
uint
keynr
,
byte
*
keybuf
,
static
int
_mi_ft_store
(
MI_INFO
*
info
,
uint
keynr
,
byte
*
keybuf
,
FT_WORD
*
wlist
,
my_off_t
filepos
)
FT_WORD
*
wlist
,
my_off_t
filepos
)
{
{
uint
key_length
;
uint
key_length
;
DBUG_ENTER
(
"_mi_ft_store"
);
for
(;
wlist
->
pos
;
wlist
++
)
for
(;
wlist
->
pos
;
wlist
++
)
{
{
key_length
=
_ft_make_key
(
info
,
keynr
,
keybuf
,
wlist
,
filepos
);
key_length
=
_ft_make_key
(
info
,
keynr
,
keybuf
,
wlist
,
filepos
);
if
(
_mi_ck_write
(
info
,
keynr
,(
uchar
*
)
keybuf
,
key_length
))
if
(
_mi_ck_write
(
info
,
keynr
,(
uchar
*
)
keybuf
,
key_length
))
return
1
;
DBUG_RETURN
(
1
)
;
}
}
return
0
;
DBUG_RETURN
(
0
)
;
}
}
static
int
_mi_ft_erase
(
MI_INFO
*
info
,
uint
keynr
,
byte
*
keybuf
,
static
int
_mi_ft_erase
(
MI_INFO
*
info
,
uint
keynr
,
byte
*
keybuf
,
FT_WORD
*
wlist
,
my_off_t
filepos
)
FT_WORD
*
wlist
,
my_off_t
filepos
)
{
{
uint
key_length
,
err
=
0
;
uint
key_length
,
err
=
0
;
DBUG_ENTER
(
"_mi_ft_erase"
);
for
(;
wlist
->
pos
;
wlist
++
)
for
(;
wlist
->
pos
;
wlist
++
)
{
{
...
@@ -141,7 +154,7 @@ static int _mi_ft_erase(MI_INFO *info, uint keynr, byte *keybuf,
...
@@ -141,7 +154,7 @@ static int _mi_ft_erase(MI_INFO *info, uint keynr, byte *keybuf,
if
(
_mi_ck_delete
(
info
,
keynr
,(
uchar
*
)
keybuf
,
key_length
))
if
(
_mi_ck_delete
(
info
,
keynr
,(
uchar
*
)
keybuf
,
key_length
))
err
=
1
;
err
=
1
;
}
}
return
err
;
DBUG_RETURN
(
err
)
;
}
}
/*
/*
...
@@ -156,6 +169,8 @@ int _mi_ft_cmp(MI_INFO *info, uint keynr, const byte *rec1, const byte *rec2)
...
@@ -156,6 +169,8 @@ int _mi_ft_cmp(MI_INFO *info, uint keynr, const byte *rec1, const byte *rec2)
{
{
FT_SEG_ITERATOR
ftsi1
,
ftsi2
;
FT_SEG_ITERATOR
ftsi1
,
ftsi2
;
CHARSET_INFO
*
cs
=
info
->
s
->
keyinfo
[
keynr
].
seg
->
charset
;
CHARSET_INFO
*
cs
=
info
->
s
->
keyinfo
[
keynr
].
seg
->
charset
;
DBUG_ENTER
(
"_mi_ft_cmp"
);
_mi_ft_segiterator_init
(
info
,
keynr
,
rec1
,
&
ftsi1
);
_mi_ft_segiterator_init
(
info
,
keynr
,
rec1
,
&
ftsi1
);
_mi_ft_segiterator_init
(
info
,
keynr
,
rec2
,
&
ftsi2
);
_mi_ft_segiterator_init
(
info
,
keynr
,
rec2
,
&
ftsi2
);
...
@@ -165,9 +180,9 @@ int _mi_ft_cmp(MI_INFO *info, uint keynr, const byte *rec1, const byte *rec2)
...
@@ -165,9 +180,9 @@ int _mi_ft_cmp(MI_INFO *info, uint keynr, const byte *rec1, const byte *rec2)
(
!
ftsi1
.
pos
||
!
ftsi2
.
pos
||
(
!
ftsi1
.
pos
||
!
ftsi2
.
pos
||
mi_compare_text
(
cs
,
(
uchar
*
)
ftsi1
.
pos
,
ftsi1
.
len
,
mi_compare_text
(
cs
,
(
uchar
*
)
ftsi1
.
pos
,
ftsi1
.
len
,
(
uchar
*
)
ftsi2
.
pos
,
ftsi2
.
len
,
0
)))
(
uchar
*
)
ftsi2
.
pos
,
ftsi2
.
len
,
0
)))
return
THOSE_TWO_DAMN_KEYS_ARE_REALLY_DIFFERENT
;
DBUG_RETURN
(
THOSE_TWO_DAMN_KEYS_ARE_REALLY_DIFFERENT
)
;
}
}
return
GEE_THEY_ARE_ABSOLUTELY_IDENTICAL
;
DBUG_RETURN
(
GEE_THEY_ARE_ABSOLUTELY_IDENTICAL
)
;
}
}
...
@@ -181,6 +196,7 @@ int _mi_ft_update(MI_INFO *info, uint keynr, byte *keybuf,
...
@@ -181,6 +196,7 @@ int _mi_ft_update(MI_INFO *info, uint keynr, byte *keybuf,
CHARSET_INFO
*
cs
=
info
->
s
->
keyinfo
[
keynr
].
seg
->
charset
;
CHARSET_INFO
*
cs
=
info
->
s
->
keyinfo
[
keynr
].
seg
->
charset
;
uint
key_length
;
uint
key_length
;
int
cmp
,
cmp2
;
int
cmp
,
cmp2
;
DBUG_ENTER
(
"_mi_ft_update"
);
if
(
!
(
old_word
=
oldlist
=
_mi_ft_parserecord
(
info
,
keynr
,
keybuf
,
oldrec
)))
if
(
!
(
old_word
=
oldlist
=
_mi_ft_parserecord
(
info
,
keynr
,
keybuf
,
oldrec
)))
goto
err0
;
goto
err0
;
...
@@ -219,7 +235,7 @@ int _mi_ft_update(MI_INFO *info, uint keynr, byte *keybuf,
...
@@ -219,7 +235,7 @@ int _mi_ft_update(MI_INFO *info, uint keynr, byte *keybuf,
err1:
err1:
my_free
((
char
*
)
oldlist
,
MYF
(
0
));
my_free
((
char
*
)
oldlist
,
MYF
(
0
));
err0:
err0:
return
error
;
DBUG_RETURN
(
error
)
;
}
}
...
@@ -230,13 +246,14 @@ int _mi_ft_add(MI_INFO *info, uint keynr, byte *keybuf, const byte *record,
...
@@ -230,13 +246,14 @@ int _mi_ft_add(MI_INFO *info, uint keynr, byte *keybuf, const byte *record,
{
{
int
error
=
-
1
;
int
error
=
-
1
;
FT_WORD
*
wlist
;
FT_WORD
*
wlist
;
DBUG_ENTER
(
"_mi_ft_add"
);
if
((
wlist
=
_mi_ft_parserecord
(
info
,
keynr
,
keybuf
,
record
)))
if
((
wlist
=
_mi_ft_parserecord
(
info
,
keynr
,
keybuf
,
record
)))
{
{
error
=
_mi_ft_store
(
info
,
keynr
,
keybuf
,
wlist
,
pos
);
error
=
_mi_ft_store
(
info
,
keynr
,
keybuf
,
wlist
,
pos
);
my_free
((
char
*
)
wlist
,
MYF
(
0
));
my_free
((
char
*
)
wlist
,
MYF
(
0
));
}
}
return
error
;
DBUG_RETURN
(
error
)
;
}
}
...
@@ -247,27 +264,34 @@ int _mi_ft_del(MI_INFO *info, uint keynr, byte *keybuf, const byte *record,
...
@@ -247,27 +264,34 @@ int _mi_ft_del(MI_INFO *info, uint keynr, byte *keybuf, const byte *record,
{
{
int
error
=
-
1
;
int
error
=
-
1
;
FT_WORD
*
wlist
;
FT_WORD
*
wlist
;
DBUG_ENTER
(
"_mi_ft_del"
);
DBUG_PRINT
(
"enter"
,(
"keynr: %d"
,
keynr
));
if
((
wlist
=
_mi_ft_parserecord
(
info
,
keynr
,
keybuf
,
record
)))
if
((
wlist
=
_mi_ft_parserecord
(
info
,
keynr
,
keybuf
,
record
)))
{
{
error
=
_mi_ft_erase
(
info
,
keynr
,
keybuf
,
wlist
,
pos
);
error
=
_mi_ft_erase
(
info
,
keynr
,
keybuf
,
wlist
,
pos
);
my_free
((
char
*
)
wlist
,
MYF
(
0
));
my_free
((
char
*
)
wlist
,
MYF
(
0
));
}
}
return
error
;
DBUG_PRINT
(
"exit"
,(
"Return: %d"
,
error
));
DBUG_RETURN
(
error
);
}
}
uint
_ft_make_key
(
MI_INFO
*
info
,
uint
keynr
,
byte
*
keybuf
,
FT_WORD
*
wptr
,
uint
_ft_make_key
(
MI_INFO
*
info
,
uint
keynr
,
byte
*
keybuf
,
FT_WORD
*
wptr
,
my_off_t
filepos
)
my_off_t
filepos
)
{
{
byte
buf
[
HA_FT_MAXLEN
+
16
];
byte
buf
[
HA_FT_MAXLEN
+
16
];
DBUG_ENTER
(
"_ft_make_key"
);
#if HA_FT_WTYPE == HA_KEYTYPE_FLOAT
#if HA_FT_WTYPE == HA_KEYTYPE_FLOAT
float
weight
=
(
float
)
((
filepos
==
HA_OFFSET_ERROR
)
?
0
:
wptr
->
weight
);
{
mi_float4store
(
buf
,
weight
);
float
weight
=
(
float
)
((
filepos
==
HA_OFFSET_ERROR
)
?
0
:
wptr
->
weight
);
mi_float4store
(
buf
,
weight
);
}
#else
#else
#error
#error
#endif
#endif
int2store
(
buf
+
HA_FT_WLEN
,
wptr
->
len
);
int2store
(
buf
+
HA_FT_WLEN
,
wptr
->
len
);
memcpy
(
buf
+
HA_FT_WLEN
+
2
,
wptr
->
pos
,
wptr
->
len
);
memcpy
(
buf
+
HA_FT_WLEN
+
2
,
wptr
->
pos
,
wptr
->
len
);
return
_mi_make_key
(
info
,
keynr
,(
uchar
*
)
keybuf
,
buf
,
filepos
);
DBUG_RETURN
(
_mi_make_key
(
info
,
keynr
,(
uchar
*
)
keybuf
,
buf
,
filepos
)
);
}
}
myisam/mi_delete.c
View file @
0826127b
...
@@ -33,7 +33,7 @@ static int underflow(MI_INFO *info,MI_KEYDEF *keyinfo,uchar *anc_buff,
...
@@ -33,7 +33,7 @@ static int underflow(MI_INFO *info,MI_KEYDEF *keyinfo,uchar *anc_buff,
static
uint
remove_key
(
MI_KEYDEF
*
keyinfo
,
uint
nod_flag
,
uchar
*
keypos
,
static
uint
remove_key
(
MI_KEYDEF
*
keyinfo
,
uint
nod_flag
,
uchar
*
keypos
,
uchar
*
lastkey
,
uchar
*
page_end
,
uchar
*
lastkey
,
uchar
*
page_end
,
my_off_t
*
next_block
);
my_off_t
*
next_block
);
static
int
_mi_ck_real_delete
(
register
MI_INFO
*
info
,
MI_KEYDEF
*
keyinfo
,
static
int
_mi_ck_real_delete
(
register
MI_INFO
*
info
,
MI_KEYDEF
*
keyinfo
,
uchar
*
key
,
uint
key_length
,
my_off_t
*
root
);
uchar
*
key
,
uint
key_length
,
my_off_t
*
root
);
...
@@ -188,6 +188,7 @@ static int _mi_ck_real_delete(register MI_INFO *info, MI_KEYDEF *keyinfo,
...
@@ -188,6 +188,7 @@ static int _mi_ck_real_delete(register MI_INFO *info, MI_KEYDEF *keyinfo,
}
}
err:
err:
my_afree
((
gptr
)
root_buff
);
my_afree
((
gptr
)
root_buff
);
DBUG_PRINT
(
"exit"
,(
"Return: %d"
,
error
));
DBUG_RETURN
(
error
);
DBUG_RETURN
(
error
);
}
/* _mi_ck_real_delete */
}
/* _mi_ck_real_delete */
...
@@ -234,6 +235,7 @@ static int d_search(register MI_INFO *info, register MI_KEYDEF *keyinfo,
...
@@ -234,6 +235,7 @@ static int d_search(register MI_INFO *info, register MI_KEYDEF *keyinfo,
if
(
subkeys
>=
0
)
if
(
subkeys
>=
0
)
{
{
/* normal word, one-level tree structure */
/* normal word, one-level tree structure */
DBUG_PRINT
(
"info"
,(
"FT1"
));
flag
=
(
*
keyinfo
->
bin_search
)(
info
,
keyinfo
,
anc_buff
,
key
,
USE_WHOLE_KEY
,
flag
=
(
*
keyinfo
->
bin_search
)(
info
,
keyinfo
,
anc_buff
,
key
,
USE_WHOLE_KEY
,
comp_flag
,
&
keypos
,
lastkey
,
&
last_key
);
comp_flag
,
&
keypos
,
lastkey
,
&
last_key
);
/* fall through to normal delete */
/* fall through to normal delete */
...
@@ -250,11 +252,13 @@ static int d_search(register MI_INFO *info, register MI_KEYDEF *keyinfo,
...
@@ -250,11 +252,13 @@ static int d_search(register MI_INFO *info, register MI_KEYDEF *keyinfo,
if
(
subkeys
==
-
1
)
if
(
subkeys
==
-
1
)
{
{
/* the last entry in sub-tree */
/* the last entry in sub-tree */
DBUG_PRINT
(
"info"
,(
"FT2: the last entry"
));
_mi_dispose
(
info
,
keyinfo
,
root
);
_mi_dispose
(
info
,
keyinfo
,
root
);
/* fall through to normal delete */
/* fall through to normal delete */
}
}
else
else
{
{
DBUG_PRINT
(
"info"
,(
"FT2: going down"
));
keyinfo
=&
info
->
s
->
ft2_keyinfo
;
keyinfo
=&
info
->
s
->
ft2_keyinfo
;
kpos
-=
keyinfo
->
keylength
;
/* we'll modify key entry 'in vivo' */
kpos
-=
keyinfo
->
keylength
;
/* we'll modify key entry 'in vivo' */
key
+=
off
;
key
+=
off
;
...
@@ -265,6 +269,7 @@ static int d_search(register MI_INFO *info, register MI_KEYDEF *keyinfo,
...
@@ -265,6 +269,7 @@ static int d_search(register MI_INFO *info, register MI_KEYDEF *keyinfo,
ft_intXstore
(
kpos
,
subkeys
);
ft_intXstore
(
kpos
,
subkeys
);
if
(
!
ret_value
)
if
(
!
ret_value
)
ret_value
=
_mi_write_keypage
(
info
,
keyinfo
,
page
,
anc_buff
);
ret_value
=
_mi_write_keypage
(
info
,
keyinfo
,
page
,
anc_buff
);
DBUG_PRINT
(
"exit"
,(
"Return: %d"
,
ret_value
));
DBUG_RETURN
(
ret_value
);
DBUG_RETURN
(
ret_value
);
}
}
}
}
...
@@ -279,6 +284,7 @@ static int d_search(register MI_INFO *info, register MI_KEYDEF *keyinfo,
...
@@ -279,6 +284,7 @@ static int d_search(register MI_INFO *info, register MI_KEYDEF *keyinfo,
{
{
DBUG_PRINT
(
"error"
,(
"Couldn't allocate memory"
));
DBUG_PRINT
(
"error"
,(
"Couldn't allocate memory"
));
my_errno
=
ENOMEM
;
my_errno
=
ENOMEM
;
DBUG_PRINT
(
"exit"
,(
"Return: %d"
,
-
1
));
DBUG_RETURN
(
-
1
);
DBUG_RETURN
(
-
1
);
}
}
if
(
!
_mi_fetch_keypage
(
info
,
keyinfo
,
leaf_page
,
leaf_buff
,
0
))
if
(
!
_mi_fetch_keypage
(
info
,
keyinfo
,
leaf_page
,
leaf_buff
,
0
))
...
@@ -304,14 +310,20 @@ static int d_search(register MI_INFO *info, register MI_KEYDEF *keyinfo,
...
@@ -304,14 +310,20 @@ static int d_search(register MI_INFO *info, register MI_KEYDEF *keyinfo,
tmp
=
remove_key
(
keyinfo
,
nod_flag
,
keypos
,
lastkey
,
anc_buff
+
length
,
tmp
=
remove_key
(
keyinfo
,
nod_flag
,
keypos
,
lastkey
,
anc_buff
+
length
,
&
next_block
);
&
next_block
);
if
(
tmp
==
0
)
if
(
tmp
==
0
)
{
DBUG_PRINT
(
"exit"
,(
"Return: %d"
,
0
));
DBUG_RETURN
(
0
);
DBUG_RETURN
(
0
);
}
length
-=
tmp
;
length
-=
tmp
;
mi_putint
(
anc_buff
,
length
,
nod_flag
);
mi_putint
(
anc_buff
,
length
,
nod_flag
);
if
(
!
nod_flag
)
if
(
!
nod_flag
)
{
/* On leaf page */
{
/* On leaf page */
if
(
_mi_write_keypage
(
info
,
keyinfo
,
page
,
anc_buff
))
if
(
_mi_write_keypage
(
info
,
keyinfo
,
page
,
anc_buff
))
{
DBUG_PRINT
(
"exit"
,(
"Return: %d"
,
-
1
));
DBUG_RETURN
(
-
1
);
DBUG_RETURN
(
-
1
);
}
/* Page will be update later if we return 1 */
/* Page will be update later if we return 1 */
DBUG_RETURN
(
test
(
length
<=
(
info
->
quick_mode
?
MI_MIN_KEYBLOCK_LENGTH
:
DBUG_RETURN
(
test
(
length
<=
(
info
->
quick_mode
?
MI_MIN_KEYBLOCK_LENGTH
:
(
uint
)
keyinfo
->
underflow_block_length
)));
(
uint
)
keyinfo
->
underflow_block_length
)));
...
@@ -348,6 +360,7 @@ static int d_search(register MI_INFO *info, register MI_KEYDEF *keyinfo,
...
@@ -348,6 +360,7 @@ static int d_search(register MI_INFO *info, register MI_KEYDEF *keyinfo,
DBUG_DUMP
(
"page"
,(
byte
*
)
anc_buff
,
mi_getint
(
anc_buff
));
DBUG_DUMP
(
"page"
,(
byte
*
)
anc_buff
,
mi_getint
(
anc_buff
));
}
}
my_afree
((
byte
*
)
leaf_buff
);
my_afree
((
byte
*
)
leaf_buff
);
DBUG_PRINT
(
"exit"
,(
"Return: %d"
,
ret_value
));
DBUG_RETURN
(
ret_value
);
DBUG_RETURN
(
ret_value
);
err:
err:
my_afree
((
byte
*
)
leaf_buff
);
my_afree
((
byte
*
)
leaf_buff
);
...
...
myisam/mi_page.c
View file @
0826127b
...
@@ -28,6 +28,9 @@ uchar *_mi_fetch_keypage(register MI_INFO *info, MI_KEYDEF *keyinfo,
...
@@ -28,6 +28,9 @@ uchar *_mi_fetch_keypage(register MI_INFO *info, MI_KEYDEF *keyinfo,
{
{
uchar
*
tmp
;
uchar
*
tmp
;
uint
page_size
;
uint
page_size
;
DBUG_ENTER
(
"_mi_fetch_keypage"
);
DBUG_PRINT
(
"enter"
,(
"page: %ld"
,
page
));
tmp
=
(
uchar
*
)
key_cache_read
(
info
->
s
->
kfile
,
page
,(
byte
*
)
buff
,
tmp
=
(
uchar
*
)
key_cache_read
(
info
->
s
->
kfile
,
page
,(
byte
*
)
buff
,
(
uint
)
keyinfo
->
block_length
,
(
uint
)
keyinfo
->
block_length
,
(
uint
)
keyinfo
->
block_length
,
(
uint
)
keyinfo
->
block_length
,
...
@@ -39,7 +42,7 @@ uchar *_mi_fetch_keypage(register MI_INFO *info, MI_KEYDEF *keyinfo,
...
@@ -39,7 +42,7 @@ uchar *_mi_fetch_keypage(register MI_INFO *info, MI_KEYDEF *keyinfo,
DBUG_PRINT
(
"error"
,(
"Got errno: %d from key_cache_read"
,
my_errno
));
DBUG_PRINT
(
"error"
,(
"Got errno: %d from key_cache_read"
,
my_errno
));
info
->
last_keypage
=
HA_OFFSET_ERROR
;
info
->
last_keypage
=
HA_OFFSET_ERROR
;
my_errno
=
HA_ERR_CRASHED
;
my_errno
=
HA_ERR_CRASHED
;
return
0
;
DBUG_RETURN
(
0
)
;
}
}
info
->
last_keypage
=
page
;
info
->
last_keypage
=
page
;
page_size
=
mi_getint
(
tmp
);
page_size
=
mi_getint
(
tmp
);
...
@@ -51,7 +54,7 @@ uchar *_mi_fetch_keypage(register MI_INFO *info, MI_KEYDEF *keyinfo,
...
@@ -51,7 +54,7 @@ uchar *_mi_fetch_keypage(register MI_INFO *info, MI_KEYDEF *keyinfo,
my_errno
=
HA_ERR_CRASHED
;
my_errno
=
HA_ERR_CRASHED
;
tmp
=
0
;
tmp
=
0
;
}
}
return
tmp
;
DBUG_RETURN
(
tmp
)
;
}
/* _mi_fetch_keypage */
}
/* _mi_fetch_keypage */
...
@@ -61,6 +64,8 @@ int _mi_write_keypage(register MI_INFO *info, register MI_KEYDEF *keyinfo,
...
@@ -61,6 +64,8 @@ int _mi_write_keypage(register MI_INFO *info, register MI_KEYDEF *keyinfo,
my_off_t
page
,
uchar
*
buff
)
my_off_t
page
,
uchar
*
buff
)
{
{
reg3
uint
length
;
reg3
uint
length
;
DBUG_ENTER
(
"_mi_write_keypage"
);
#ifndef FAST
/* Safety check */
#ifndef FAST
/* Safety check */
if
(
page
<
info
->
s
->
base
.
keystart
||
if
(
page
<
info
->
s
->
base
.
keystart
||
page
+
keyinfo
->
block_length
>
info
->
state
->
key_file_length
||
page
+
keyinfo
->
block_length
>
info
->
state
->
key_file_length
||
...
@@ -71,7 +76,7 @@ int _mi_write_keypage(register MI_INFO *info, register MI_KEYDEF *keyinfo,
...
@@ -71,7 +76,7 @@ int _mi_write_keypage(register MI_INFO *info, register MI_KEYDEF *keyinfo,
(
long
)
info
->
state
->
key_file_length
,
(
long
)
info
->
state
->
key_file_length
,
(
long
)
page
));
(
long
)
page
));
my_errno
=
EINVAL
;
my_errno
=
EINVAL
;
return
(
-
1
);
DBUG_RETURN
((
-
1
)
);
}
}
DBUG_PRINT
(
"page"
,(
"write page at: %lu"
,(
long
)
page
,
buff
));
DBUG_PRINT
(
"page"
,(
"write page at: %lu"
,(
long
)
page
,
buff
));
DBUG_DUMP
(
"buff"
,(
byte
*
)
buff
,
mi_getint
(
buff
));
DBUG_DUMP
(
"buff"
,(
byte
*
)
buff
,
mi_getint
(
buff
));
...
@@ -87,10 +92,10 @@ int _mi_write_keypage(register MI_INFO *info, register MI_KEYDEF *keyinfo,
...
@@ -87,10 +92,10 @@ int _mi_write_keypage(register MI_INFO *info, register MI_KEYDEF *keyinfo,
length
=
keyinfo
->
block_length
;
length
=
keyinfo
->
block_length
;
}
}
#endif
#endif
return
(
key_cache_write
(
info
->
s
->
kfile
,
page
,(
byte
*
)
buff
,
length
,
DBUG_RETURN
(
(
key_cache_write
(
info
->
s
->
kfile
,
page
,(
byte
*
)
buff
,
length
,
(
uint
)
keyinfo
->
block_length
,
(
uint
)
keyinfo
->
block_length
,
(
int
)
((
info
->
lock_type
!=
F_UNLCK
)
||
(
int
)
((
info
->
lock_type
!=
F_UNLCK
)
||
info
->
s
->
delay_key_write
)));
info
->
s
->
delay_key_write
)))
)
;
}
/* mi_write_keypage */
}
/* mi_write_keypage */
...
...
mysql-test/r/func_str.result
View file @
0826127b
...
@@ -288,6 +288,24 @@ latin2_general_ci 3
...
@@ -288,6 +288,24 @@ latin2_general_ci 3
select collation(trim(BOTH _latin2' ' FROM _latin2'a')), coercibility(trim(BOTH _latin2'a' FROM _latin2'a'));
select collation(trim(BOTH _latin2' ' FROM _latin2'a')), coercibility(trim(BOTH _latin2'a' FROM _latin2'a'));
collation(trim(BOTH _latin2' ' FROM _latin2'a')) coercibility(trim(BOTH _latin2'a' FROM _latin2'a'))
collation(trim(BOTH _latin2' ' FROM _latin2'a')) coercibility(trim(BOTH _latin2'a' FROM _latin2'a'))
latin2_general_ci 3
latin2_general_ci 3
select collation(repeat(_latin2'a',10)), coercibility(repeat(_latin2'a',10));
collation(repeat(_latin2'a',10)) coercibility(repeat(_latin2'a',10))
latin2_general_ci 3
select collation(reverse(_latin2'ab')), coercibility(reverse(_latin2'ab'));
collation(reverse(_latin2'ab')) coercibility(reverse(_latin2'ab'))
latin2_general_ci 3
select collation(quote(_latin2'ab')), coercibility(quote(_latin2'ab'));
collation(quote(_latin2'ab')) coercibility(quote(_latin2'ab'))
latin2_general_ci 3
select collation(soundex(_latin2'ab')), coercibility(soundex(_latin2'ab'));
collation(soundex(_latin2'ab')) coercibility(soundex(_latin2'ab'))
latin2_general_ci 3
select collation(substring(_latin2'ab',1)), coercibility(substring(_latin2'ab',1));
collation(substring(_latin2'ab',1)) coercibility(substring(_latin2'ab',1))
latin2_general_ci 3
select collation(insert(_latin2'abcd',2,3,_latin2'ef')), coercibility(insert(_latin2'abcd',2,3,_latin2'ef'));
collation(insert(_latin2'abcd',2,3,_latin2'ef')) coercibility(insert(_latin2'abcd',2,3,_latin2'ef'))
latin2_general_ci 3
create table t1
create table t1
select
select
left(_latin2'a',1),
left(_latin2'a',1),
...
@@ -302,7 +320,13 @@ ltrim(_latin2' a '),
...
@@ -302,7 +320,13 @@ ltrim(_latin2' a '),
rtrim(_latin2' a '),
rtrim(_latin2' a '),
trim(LEADING _latin2' ' FROM _latin2' a '),
trim(LEADING _latin2' ' FROM _latin2' a '),
trim(TRAILING _latin2' ' FROM _latin2' a '),
trim(TRAILING _latin2' ' FROM _latin2' a '),
trim(BOTH _latin2' ' FROM _latin2' a ')
trim(BOTH _latin2' ' FROM _latin2' a '),
repeat(_latin2'a',10),
reverse(_latin2'ab'),
quote(_latin2'ab'),
soundex(_latin2'ab'),
substring(_latin2'ab',1),
insert(_latin2'abcd',2,3,_latin2'ef')
;
;
show create table t1;
show create table t1;
Table Create Table
Table Create Table
...
@@ -319,6 +343,12 @@ t1 CREATE TABLE `t1` (
...
@@ -319,6 +343,12 @@ t1 CREATE TABLE `t1` (
`rtrim(_latin2' a ')` char(3) character set latin2 NOT NULL default '',
`rtrim(_latin2' a ')` char(3) character set latin2 NOT NULL default '',
`trim(LEADING _latin2' ' FROM _latin2' a ')` char(3) character set latin2 NOT NULL default '',
`trim(LEADING _latin2' ' FROM _latin2' a ')` char(3) character set latin2 NOT NULL default '',
`trim(TRAILING _latin2' ' FROM _latin2' a ')` char(3) character set latin2 NOT NULL default '',
`trim(TRAILING _latin2' ' FROM _latin2' a ')` char(3) character set latin2 NOT NULL default '',
`trim(BOTH _latin2' ' FROM _latin2' a ')` char(3) character set latin2 NOT NULL default ''
`trim(BOTH _latin2' ' FROM _latin2' a ')` char(3) character set latin2 NOT NULL default '',
`repeat(_latin2'a',10)` char(10) character set latin2 NOT NULL default '',
`reverse(_latin2'ab')` char(2) character set latin2 NOT NULL default '',
`quote(_latin2'ab')` char(6) character set latin2 NOT NULL default '',
`soundex(_latin2'ab')` char(4) character set latin2 NOT NULL default '',
`substring(_latin2'ab',1)` char(2) character set latin2 NOT NULL default '',
`insert(_latin2'abcd',2,3,_latin2'ef')` char(6) character set latin2 NOT NULL default ''
) TYPE=MyISAM CHARSET=latin1
) TYPE=MyISAM CHARSET=latin1
drop table t1;
drop table t1;
mysql-test/r/func_test.result
View file @
0826127b
...
@@ -52,6 +52,63 @@ select 10 % 7, 10 mod 7, 10 div 3;
...
@@ -52,6 +52,63 @@ select 10 % 7, 10 mod 7, 10 div 3;
select (1 << 64)-1, ((1 << 64)-1) DIV 1, ((1 << 64)-1) DIV 2;
select (1 << 64)-1, ((1 << 64)-1) DIV 1, ((1 << 64)-1) DIV 2;
(1 << 64)-1 ((1 << 64)-1) DIV 1 ((1 << 64)-1) DIV 2
(1 << 64)-1 ((1 << 64)-1) DIV 1 ((1 << 64)-1) DIV 2
18446744073709551615 18446744073709551615 9223372036854775807
18446744073709551615 18446744073709551615 9223372036854775807
select _koi8r'a' = _koi8r'A';
_koi8r'a' = _koi8r'A'
1
select _koi8r'a' = _koi8r'A' COLLATE koi8r_general_ci;
_koi8r'a' = _koi8r'A' COLLATE koi8r_general_ci
1
select _koi8r'a' = _koi8r'A' COLLATE koi8r_bin;
_koi8r'a' = _koi8r'A' COLLATE koi8r_bin
0
select _koi8r'a' COLLATE koi8r_general_ci = _koi8r'A';
_koi8r'a' COLLATE koi8r_general_ci = _koi8r'A'
1
select _koi8r'a' COLLATE koi8r_bin = _koi8r'A';
_koi8r'a' COLLATE koi8r_bin = _koi8r'A'
0
select _koi8r'a' COLLATE koi8r_bin = _koi8r'A' COLLATE koi8r_general_ci;
ERROR HY000: Illegal mix of collations (koi8r_bin,EXPLICIT) and (koi8r_general_ci,EXPLICIT) for operation '='
select _koi8r'a' = _latin1'A';
ERROR HY000: Illegal mix of collations (koi8r_general_ci,COERCIBLE) and (latin1_swedish_ci,COERCIBLE) for operation '='
select strcmp(_koi8r'a', _koi8r'A');
strcmp(_koi8r'a', _koi8r'A')
0
select strcmp(_koi8r'a', _koi8r'A' COLLATE koi8r_general_ci);
strcmp(_koi8r'a', _koi8r'A' COLLATE koi8r_general_ci)
0
select strcmp(_koi8r'a', _koi8r'A' COLLATE koi8r_bin);
strcmp(_koi8r'a', _koi8r'A' COLLATE koi8r_bin)
1
select strcmp(_koi8r'a' COLLATE koi8r_general_ci, _koi8r'A');
strcmp(_koi8r'a' COLLATE koi8r_general_ci, _koi8r'A')
0
select strcmp(_koi8r'a' COLLATE koi8r_bin, _koi8r'A');
strcmp(_koi8r'a' COLLATE koi8r_bin, _koi8r'A')
1
select strcmp(_koi8r'a' COLLATE koi8r_general_ci, _koi8r'A' COLLATE koi8r_bin);
ERROR HY000: Illegal mix of collations (koi8r_general_ci,EXPLICIT) and (koi8r_bin,EXPLICIT) for operation 'strcmp'
select strcmp(_koi8r'a', _latin1'A');
ERROR HY000: Illegal mix of collations (koi8r_general_ci,COERCIBLE) and (latin1_swedish_ci,COERCIBLE) for operation 'strcmp'
select _koi8r'a' LIKE _koi8r'A';
_koi8r'a' LIKE _koi8r'A'
1
select _koi8r'a' LIKE _koi8r'A' COLLATE koi8r_general_ci;
_koi8r'a' LIKE _koi8r'A' COLLATE koi8r_general_ci
1
select _koi8r'a' LIKE _koi8r'A' COLLATE koi8r_bin;
_koi8r'a' LIKE _koi8r'A' COLLATE koi8r_bin
0
select _koi8r'a' COLLATE koi8r_general_ci LIKE _koi8r'A';
_koi8r'a' COLLATE koi8r_general_ci LIKE _koi8r'A'
1
select _koi8r'a' COLLATE koi8r_bin LIKE _koi8r'A';
_koi8r'a' COLLATE koi8r_bin LIKE _koi8r'A'
0
select _koi8r'a' COLLATE koi8r_general_ci LIKE _koi8r'A' COLLATE koi8r_bin;
ERROR HY000: Illegal mix of collations (koi8r_general_ci,EXPLICIT) and (koi8r_bin,EXPLICIT) for operation 'like'
select _koi8r'a' LIKE _latin1'A';
ERROR HY000: Illegal mix of collations (koi8r_general_ci,COERCIBLE) and (latin1_swedish_ci,COERCIBLE) for operation 'like'
select 5 between 0 and 10 between 0 and 1,(5 between 0 and 10) between 0 and 1;
select 5 between 0 and 10 between 0 and 1,(5 between 0 and 10) between 0 and 1;
5 between 0 and 10 between 0 and 1 (5 between 0 and 10) between 0 and 1
5 between 0 and 10 between 0 and 1 (5 between 0 and 10) between 0 and 1
0 1
0 1
...
...
mysql-test/r/grant.result
View file @
0826127b
...
@@ -91,14 +91,14 @@ Grants for drop_user@localhost
...
@@ -91,14 +91,14 @@ Grants for drop_user@localhost
GRANT USAGE ON *.* TO 'drop_user'@'localhost'
GRANT USAGE ON *.* TO 'drop_user'@'localhost'
drop user drop_user@localhost;
drop user drop_user@localhost;
revoke all privileges, grant from drop_user@localhost;
revoke all privileges, grant from drop_user@localhost;
Can't revoke all privileges, grant for one or more of the requested users
ERROR HY000:
Can't revoke all privileges, grant for one or more of the requested users
grant select(a) on test.t1 to drop_user1@localhost;
grant select(a) on test.t1 to drop_user1@localhost;
grant select on test.t1 to drop_user2@localhost;
grant select on test.t1 to drop_user2@localhost;
grant select on test.* to drop_user3@localhost;
grant select on test.* to drop_user3@localhost;
grant select on *.* to drop_user4@localhost;
grant select on *.* to drop_user4@localhost;
drop user drop_user1@localhost, drop_user2@localhost, drop_user3@localhost,
drop user drop_user1@localhost, drop_user2@localhost, drop_user3@localhost,
drop_user4@localhost;
drop_user4@localhost;
Can't drop one or more of the requested users
ERROR HY000:
Can't drop one or more of the requested users
revoke all privileges, grant from drop_user1@localhost, drop_user2@localhost,
revoke all privileges, grant from drop_user1@localhost, drop_user2@localhost,
drop_user3@localhost, drop_user4@localhost;
drop_user3@localhost, drop_user4@localhost;
drop user drop_user1@localhost, drop_user2@localhost, drop_user3@localhost,
drop user drop_user1@localhost, drop_user2@localhost, drop_user3@localhost,
...
...
mysql-test/r/heap_btree.result
View file @
0826127b
...
@@ -24,8 +24,8 @@ a b
...
@@ -24,8 +24,8 @@ a b
alter table t1 add c int not null, add key using BTREE (c,a);
alter table t1 add c int not null, add key using BTREE (c,a);
drop table t1;
drop table t1;
create table t1 (a int not null,b int not null, primary key using BTREE (a)) type=heap comment="testing heaps";
create table t1 (a int not null,b int not null, primary key using BTREE (a)) type=heap comment="testing heaps";
insert into t1 values(1,1),(2,2),(3,3),(4,4);
insert into t1 values(
-2,-2),(-1,-1),(0,0),(
1,1),(2,2),(3,3),(4,4);
delete from t1 where a >
0
;
delete from t1 where a >
-3
;
select * from t1;
select * from t1;
a b
a b
drop table t1;
drop table t1;
...
...
mysql-test/r/isam.result
View file @
0826127b
...
@@ -38,13 +38,13 @@ a b c
...
@@ -38,13 +38,13 @@ a b c
6 6 6
6 6 6
drop table t1;
drop table t1;
create table t1 (a int,b text, index(a)) type=isam;
create table t1 (a int,b text, index(a)) type=isam;
Column 'a' is used with UNIQUE or INDEX but is not defined as NOT NULL
ERROR 42000:
Column 'a' is used with UNIQUE or INDEX but is not defined as NOT NULL
create table t1 (a int,b text, index(b)) type=isam;
create table t1 (a int,b text, index(b)) type=isam;
BLOB column 'b' can't be used in key specification with the used table type
ERROR 42000:
BLOB column 'b' can't be used in key specification with the used table type
create table t1 (ordid int(8) not null auto_increment, ord varchar(50) not null, primary key (ord,ordid)) type=isam;
create table t1 (ordid int(8) not null auto_increment, ord varchar(50) not null, primary key (ord,ordid)) type=isam;
Incorrect table definition; There can only be one auto column and it must be defined as a key
ERROR 42000:
Incorrect table definition; There can only be one auto column and it must be defined as a key
create table t1 (ordid int(8), unique (ordid)) type=isam;
create table t1 (ordid int(8), unique (ordid)) type=isam;
Column 'ordid' is used with UNIQUE or INDEX but is not defined as NOT NULL
ERROR 42000:
Column 'ordid' is used with UNIQUE or INDEX but is not defined as NOT NULL
drop table if exists t1;
drop table if exists t1;
Warnings:
Warnings:
Note 1051 Unknown table 't1'
Note 1051 Unknown table 't1'
...
@@ -72,10 +72,10 @@ Table Op Msg_type Msg_text
...
@@ -72,10 +72,10 @@ Table Op Msg_type Msg_text
test.t2 check error Table 't2' was not locked with LOCK TABLES
test.t2 check error Table 't2' was not locked with LOCK TABLES
test.t1 check status OK
test.t1 check status OK
show columns from t1;
show columns from t1;
Field Type
Collation
Null Key Default Extra
Field Type Null Key Default Extra
a int(11)
NULL
PRI 0
a int(11) PRI 0
b int(11)
NULL
MUL 0
b int(11) MUL 0
c int(11)
NULL
0
c int(11) 0
show full columns from t1;
show full columns from t1;
Field Type Collation Null Key Default Extra Privileges Comment
Field Type Collation Null Key Default Extra Privileges Comment
a int(11) NULL PRI 0 select,insert,update,references
a int(11) NULL PRI 0 select,insert,update,references
...
...
mysql-test/r/replace.result
View file @
0826127b
...
@@ -15,9 +15,9 @@ drop table t1;
...
@@ -15,9 +15,9 @@ drop table t1;
create table t1 (a tinyint not null auto_increment primary key, b char(20) default "default_value");
create table t1 (a tinyint not null auto_increment primary key, b char(20) default "default_value");
insert into t1 values (126,"first"),(63, "middle"),(0,"last");
insert into t1 values (126,"first"),(63, "middle"),(0,"last");
insert into t1 values (0,"error");
insert into t1 values (0,"error");
Duplicate entry '127' for key 1
ERROR 23000:
Duplicate entry '127' for key 1
replace into t1 values (0,"error");
replace into t1 values (0,"error");
Duplicate entry '127' for key 1
ERROR 23000:
Duplicate entry '127' for key 1
replace into t1 values (126,"first updated");
replace into t1 values (126,"first updated");
replace into t1 values (63,default);
replace into t1 values (63,default);
select * from t1;
select * from t1;
...
...
mysql-test/r/type_blob.result
View file @
0826127b
...
@@ -486,8 +486,19 @@ fish 10
...
@@ -486,8 +486,19 @@ fish 10
drop table t1;
drop table t1;
create table t1 (id integer auto_increment unique,imagem LONGBLOB not null);
create table t1 (id integer auto_increment unique,imagem LONGBLOB not null);
insert into t1 (id) values (1);
insert into t1 (id) values (1);
select
charset(load_file('../../std_data/words.dat')),
collation(load_file('../../std_data/words.dat')),
coercibility(load_file('../../std_data/words.dat'));
charset(load_file('../../std_data/words.dat')) collation(load_file('../../std_data/words.dat')) coercibility(load_file('../../std_data/words.dat'))
binary binary 3
update t1 set imagem=load_file('../../std_data/words.dat') where id=1;
update t1 set imagem=load_file('../../std_data/words.dat') where id=1;
select if(imagem is null, "ERROR", "OK"),length(imagem) from t1 where id = 1;
select if(imagem is null, "ERROR", "OK"),length(imagem) from t1 where id = 1;
if(imagem is null, "ERROR", "OK") length(imagem)
if(imagem is null, "ERROR", "OK") length(imagem)
OK 581
OK 581
drop table t1;
drop table t1;
create table t1 select load_file('../../std_data/words.dat');
show full fields from t1;
Field Type Collation Null Key Default Extra Privileges Comment
load_file('../../std_data/words.dat') mediumblob NULL YES NULL select,insert,update,references
drop table t1;
mysql-test/t/func_str.test
View file @
0826127b
...
@@ -149,6 +149,13 @@ select collation(rtrim(_latin2' a ')), coercibility(rtrim(_latin2' a '));
...
@@ -149,6 +149,13 @@ select collation(rtrim(_latin2' a ')), coercibility(rtrim(_latin2' a '));
select
collation
(
trim
(
LEADING
_latin2
' '
FROM
_latin2
'a'
)),
coercibility
(
trim
(
LEADING
_latin2
'a'
FROM
_latin2
'a'
));
select
collation
(
trim
(
LEADING
_latin2
' '
FROM
_latin2
'a'
)),
coercibility
(
trim
(
LEADING
_latin2
'a'
FROM
_latin2
'a'
));
select
collation
(
trim
(
TRAILING
_latin2
' '
FROM
_latin2
'a'
)),
coercibility
(
trim
(
TRAILING
_latin2
'a'
FROM
_latin2
'a'
));
select
collation
(
trim
(
TRAILING
_latin2
' '
FROM
_latin2
'a'
)),
coercibility
(
trim
(
TRAILING
_latin2
'a'
FROM
_latin2
'a'
));
select
collation
(
trim
(
BOTH
_latin2
' '
FROM
_latin2
'a'
)),
coercibility
(
trim
(
BOTH
_latin2
'a'
FROM
_latin2
'a'
));
select
collation
(
trim
(
BOTH
_latin2
' '
FROM
_latin2
'a'
)),
coercibility
(
trim
(
BOTH
_latin2
'a'
FROM
_latin2
'a'
));
select
collation
(
repeat
(
_latin2
'a'
,
10
)),
coercibility
(
repeat
(
_latin2
'a'
,
10
));
select
collation
(
reverse
(
_latin2
'ab'
)),
coercibility
(
reverse
(
_latin2
'ab'
));
select
collation
(
quote
(
_latin2
'ab'
)),
coercibility
(
quote
(
_latin2
'ab'
));
select
collation
(
soundex
(
_latin2
'ab'
)),
coercibility
(
soundex
(
_latin2
'ab'
));
select
collation
(
substring
(
_latin2
'ab'
,
1
)),
coercibility
(
substring
(
_latin2
'ab'
,
1
));
select
collation
(
insert
(
_latin2
'abcd'
,
2
,
3
,
_latin2
'ef'
)),
coercibility
(
insert
(
_latin2
'abcd'
,
2
,
3
,
_latin2
'ef'
));
create
table
t1
create
table
t1
select
select
left
(
_latin2
'a'
,
1
),
left
(
_latin2
'a'
,
1
),
...
@@ -163,7 +170,13 @@ select
...
@@ -163,7 +170,13 @@ select
rtrim
(
_latin2
' a '
),
rtrim
(
_latin2
' a '
),
trim
(
LEADING
_latin2
' '
FROM
_latin2
' a '
),
trim
(
LEADING
_latin2
' '
FROM
_latin2
' a '
),
trim
(
TRAILING
_latin2
' '
FROM
_latin2
' a '
),
trim
(
TRAILING
_latin2
' '
FROM
_latin2
' a '
),
trim
(
BOTH
_latin2
' '
FROM
_latin2
' a '
)
trim
(
BOTH
_latin2
' '
FROM
_latin2
' a '
),
repeat
(
_latin2
'a'
,
10
),
reverse
(
_latin2
'ab'
),
quote
(
_latin2
'ab'
),
soundex
(
_latin2
'ab'
),
substring
(
_latin2
'ab'
,
1
),
insert
(
_latin2
'abcd'
,
2
,
3
,
_latin2
'ef'
)
;
;
show
create
table
t1
;
show
create
table
t1
;
...
...
mysql-test/t/func_test.test
View file @
0826127b
...
@@ -20,6 +20,41 @@ select 1 XOR 1, 1 XOR 0, 0 XOR 1, 0 XOR 0, NULL XOR 1, 1 XOR NULL, 0 XOR NULL;
...
@@ -20,6 +20,41 @@ select 1 XOR 1, 1 XOR 0, 0 XOR 1, 0 XOR 0, NULL XOR 1, 1 XOR NULL, 0 XOR NULL;
select
10
%
7
,
10
mod
7
,
10
div
3
;
select
10
%
7
,
10
mod
7
,
10
div
3
;
select
(
1
<<
64
)
-
1
,
((
1
<<
64
)
-
1
)
DIV
1
,
((
1
<<
64
)
-
1
)
DIV
2
;
select
(
1
<<
64
)
-
1
,
((
1
<<
64
)
-
1
)
DIV
1
,
((
1
<<
64
)
-
1
)
DIV
2
;
#
# Coercibility
#
select
_koi8r
'a'
=
_koi8r
'A'
;
select
_koi8r
'a'
=
_koi8r
'A'
COLLATE
koi8r_general_ci
;
select
_koi8r
'a'
=
_koi8r
'A'
COLLATE
koi8r_bin
;
select
_koi8r
'a'
COLLATE
koi8r_general_ci
=
_koi8r
'A'
;
select
_koi8r
'a'
COLLATE
koi8r_bin
=
_koi8r
'A'
;
--
error
1265
select
_koi8r
'a'
COLLATE
koi8r_bin
=
_koi8r
'A'
COLLATE
koi8r_general_ci
;
--
error
1265
select
_koi8r
'a'
=
_latin1
'A'
;
select
strcmp
(
_koi8r
'a'
,
_koi8r
'A'
);
select
strcmp
(
_koi8r
'a'
,
_koi8r
'A'
COLLATE
koi8r_general_ci
);
select
strcmp
(
_koi8r
'a'
,
_koi8r
'A'
COLLATE
koi8r_bin
);
select
strcmp
(
_koi8r
'a'
COLLATE
koi8r_general_ci
,
_koi8r
'A'
);
select
strcmp
(
_koi8r
'a'
COLLATE
koi8r_bin
,
_koi8r
'A'
);
--
error
1265
select
strcmp
(
_koi8r
'a'
COLLATE
koi8r_general_ci
,
_koi8r
'A'
COLLATE
koi8r_bin
);
--
error
1265
select
strcmp
(
_koi8r
'a'
,
_latin1
'A'
);
select
_koi8r
'a'
LIKE
_koi8r
'A'
;
select
_koi8r
'a'
LIKE
_koi8r
'A'
COLLATE
koi8r_general_ci
;
select
_koi8r
'a'
LIKE
_koi8r
'A'
COLLATE
koi8r_bin
;
select
_koi8r
'a'
COLLATE
koi8r_general_ci
LIKE
_koi8r
'A'
;
select
_koi8r
'a'
COLLATE
koi8r_bin
LIKE
_koi8r
'A'
;
--
error
1265
select
_koi8r
'a'
COLLATE
koi8r_general_ci
LIKE
_koi8r
'A'
COLLATE
koi8r_bin
;
--
error
1265
select
_koi8r
'a'
LIKE
_latin1
'A'
;
#
#
# Wrong usage of functions
# Wrong usage of functions
#
#
...
...
mysql-test/t/heap_btree.test
View file @
0826127b
...
@@ -21,8 +21,8 @@ alter table t1 add c int not null, add key using BTREE (c,a);
...
@@ -21,8 +21,8 @@ alter table t1 add c int not null, add key using BTREE (c,a);
drop
table
t1
;
drop
table
t1
;
create
table
t1
(
a
int
not
null
,
b
int
not
null
,
primary
key
using
BTREE
(
a
))
type
=
heap
comment
=
"testing heaps"
;
create
table
t1
(
a
int
not
null
,
b
int
not
null
,
primary
key
using
BTREE
(
a
))
type
=
heap
comment
=
"testing heaps"
;
insert
into
t1
values
(
1
,
1
),(
2
,
2
),(
3
,
3
),(
4
,
4
);
insert
into
t1
values
(
-
2
,
-
2
),(
-
1
,
-
1
),(
0
,
0
),(
1
,
1
),(
2
,
2
),(
3
,
3
),(
4
,
4
);
delete
from
t1
where
a
>
0
;
delete
from
t1
where
a
>
-
3
;
select
*
from
t1
;
select
*
from
t1
;
drop
table
t1
;
drop
table
t1
;
...
...
mysql-test/t/type_blob.test
View file @
0826127b
...
@@ -294,6 +294,13 @@ drop table t1;
...
@@ -294,6 +294,13 @@ drop table t1;
create
table
t1
(
id
integer
auto_increment
unique
,
imagem
LONGBLOB
not
null
);
create
table
t1
(
id
integer
auto_increment
unique
,
imagem
LONGBLOB
not
null
);
insert
into
t1
(
id
)
values
(
1
);
insert
into
t1
(
id
)
values
(
1
);
select
charset
(
load_file
(
'../../std_data/words.dat'
)),
collation
(
load_file
(
'../../std_data/words.dat'
)),
coercibility
(
load_file
(
'../../std_data/words.dat'
));
update
t1
set
imagem
=
load_file
(
'../../std_data/words.dat'
)
where
id
=
1
;
update
t1
set
imagem
=
load_file
(
'../../std_data/words.dat'
)
where
id
=
1
;
select
if
(
imagem
is
null
,
"ERROR"
,
"OK"
),
length
(
imagem
)
from
t1
where
id
=
1
;
select
if
(
imagem
is
null
,
"ERROR"
,
"OK"
),
length
(
imagem
)
from
t1
where
id
=
1
;
drop
table
t1
;
drop
table
t1
;
create
table
t1
select
load_file
(
'../../std_data/words.dat'
);
show
full
fields
from
t1
;
drop
table
t1
;
sql/item_cmpfunc.h
View file @
0826127b
...
@@ -263,13 +263,6 @@ class Item_func_strcmp :public Item_bool_func2
...
@@ -263,13 +263,6 @@ class Item_func_strcmp :public Item_bool_func2
public:
public:
Item_func_strcmp
(
Item
*
a
,
Item
*
b
)
:
Item_bool_func2
(
a
,
b
)
{}
Item_func_strcmp
(
Item
*
a
,
Item
*
b
)
:
Item_bool_func2
(
a
,
b
)
{}
longlong
val_int
();
longlong
val_int
();
void
fix_length_and_dec
()
{
max_length
=
2
;
/* QQ: COERCIBILITY */
cmp_charset
=
args
[
0
]
->
binary
()
||
args
[
1
]
->
binary
()
?
&
my_charset_bin
:
args
[
0
]
->
charset
();
}
optimize_type
select_optimize
()
const
{
return
OPTIMIZE_NONE
;
}
optimize_type
select_optimize
()
const
{
return
OPTIMIZE_NONE
;
}
const
char
*
func_name
()
const
{
return
"strcmp"
;
}
const
char
*
func_name
()
const
{
return
"strcmp"
;
}
};
};
...
...
sql/item_strfunc.cc
View file @
0826127b
...
@@ -702,6 +702,7 @@ String *Item_func_reverse::val_str(String *str)
...
@@ -702,6 +702,7 @@ String *Item_func_reverse::val_str(String *str)
void
Item_func_reverse
::
fix_length_and_dec
()
void
Item_func_reverse
::
fix_length_and_dec
()
{
{
set_charset
(
args
[
0
]
->
charset
(),
args
[
0
]
->
coercibility
);
max_length
=
args
[
0
]
->
max_length
;
max_length
=
args
[
0
]
->
max_length
;
}
}
...
@@ -860,6 +861,14 @@ String *Item_func_insert::val_str(String *str)
...
@@ -860,6 +861,14 @@ String *Item_func_insert::val_str(String *str)
void
Item_func_insert
::
fix_length_and_dec
()
void
Item_func_insert
::
fix_length_and_dec
()
{
{
if
(
set_charset
(
args
[
0
]
->
charset
(),
args
[
0
]
->
coercibility
,
args
[
3
]
->
charset
(),
args
[
3
]
->
coercibility
))
{
my_error
(
ER_CANT_AGGREGATE_COLLATIONS
,
MYF
(
0
),
args
[
0
]
->
charset
()
->
name
,
coercion_name
(
args
[
0
]
->
coercibility
),
args
[
3
]
->
charset
()
->
name
,
coercion_name
(
args
[
3
]
->
coercibility
),
func_name
());
}
max_length
=
args
[
0
]
->
max_length
+
args
[
3
]
->
max_length
;
max_length
=
args
[
0
]
->
max_length
+
args
[
3
]
->
max_length
;
if
(
max_length
>
MAX_BLOB_WIDTH
)
if
(
max_length
>
MAX_BLOB_WIDTH
)
{
{
...
@@ -1521,6 +1530,7 @@ String *Item_func_user::val_str(String *str)
...
@@ -1521,6 +1530,7 @@ String *Item_func_user::val_str(String *str)
void
Item_func_soundex
::
fix_length_and_dec
()
void
Item_func_soundex
::
fix_length_and_dec
()
{
{
set_charset
(
args
[
0
]
->
charset
(),
args
[
0
]
->
coercibility
);
max_length
=
args
[
0
]
->
max_length
;
max_length
=
args
[
0
]
->
max_length
;
set_if_bigger
(
max_length
,
4
);
set_if_bigger
(
max_length
,
4
);
}
}
...
@@ -1552,7 +1562,7 @@ String *Item_func_soundex::val_str(String *str)
...
@@ -1552,7 +1562,7 @@ String *Item_func_soundex::val_str(String *str)
{
{
String
*
res
=
args
[
0
]
->
val_str
(
str
);
String
*
res
=
args
[
0
]
->
val_str
(
str
);
char
last_ch
,
ch
;
char
last_ch
,
ch
;
CHARSET_INFO
*
cs
=
&
my_charset_latin1
;
CHARSET_INFO
*
cs
=
charset
()
;
if
((
null_value
=
args
[
0
]
->
null_value
))
if
((
null_value
=
args
[
0
]
->
null_value
))
return
0
;
/* purecov: inspected */
return
0
;
/* purecov: inspected */
...
@@ -2538,6 +2548,7 @@ String *Item_func_quote::val_str(String *str)
...
@@ -2538,6 +2548,7 @@ String *Item_func_quote::val_str(String *str)
}
}
*
to
=
'\''
;
*
to
=
'\''
;
str
->
length
(
new_length
);
str
->
length
(
new_length
);
str
->
set_charset
(
charset
());
return
str
;
return
str
;
null:
null:
...
...
sql/item_strfunc.h
View file @
0826127b
...
@@ -536,8 +536,8 @@ class Item_load_file :public Item_str_func
...
@@ -536,8 +536,8 @@ class Item_load_file :public Item_str_func
const
char
*
func_name
()
const
{
return
"load_file"
;
}
const
char
*
func_name
()
const
{
return
"load_file"
;
}
void
fix_length_and_dec
()
void
fix_length_and_dec
()
{
{
set_charset
(
&
my_charset_bin
);
set_charset
(
&
my_charset_bin
,
COER_COERCIBLE
);
maybe_null
=
1
;
maybe_null
=
1
;
max_length
=
MAX_BLOB_WIDTH
;
max_length
=
MAX_BLOB_WIDTH
;
}
}
};
};
...
@@ -571,7 +571,11 @@ class Item_func_quote :public Item_str_func
...
@@ -571,7 +571,11 @@ class Item_func_quote :public Item_str_func
Item_func_quote
(
Item
*
a
)
:
Item_str_func
(
a
)
{}
Item_func_quote
(
Item
*
a
)
:
Item_str_func
(
a
)
{}
const
char
*
func_name
()
const
{
return
"quote"
;
}
const
char
*
func_name
()
const
{
return
"quote"
;
}
String
*
val_str
(
String
*
);
String
*
val_str
(
String
*
);
void
fix_length_and_dec
()
{
max_length
=
args
[
0
]
->
max_length
*
2
+
2
;
}
void
fix_length_and_dec
()
{
set_charset
(
args
[
0
]
->
charset
(),
args
[
0
]
->
coercibility
);
max_length
=
args
[
0
]
->
max_length
*
2
+
2
;
}
};
};
class
Item_func_conv_charset
:
public
Item_str_func
class
Item_func_conv_charset
:
public
Item_str_func
...
...
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