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
32734072
Commit
32734072
authored
Jun 19, 2005
by
kent@mysql.com
Browse files
Options
Browse Files
Download
Plain Diff
Merge kboortz@bk-internal.mysql.com:/home/bk/mysql-4.1
into mysql.com:/Users/kent/mysql/bk/mysql-4.1
parents
e99a2e8a
3812e15c
Changes
15
Expand all
Hide whitespace changes
Inline
Side-by-side
Showing
15 changed files
with
206 additions
and
683 deletions
+206
-683
client/mysqltest.c
client/mysqltest.c
+54
-30
mysql-test/Makefile.am
mysql-test/Makefile.am
+9
-2
mysql-test/include/rpl_stmt_seq.inc
mysql-test/include/rpl_stmt_seq.inc
+25
-4
mysql-test/r/bdb_cache.result
mysql-test/r/bdb_cache.result
+1
-3
mysql-test/r/ps_grant.result
mysql-test/r/ps_grant.result
+1
-1
mysql-test/r/rpl_ddl.result
mysql-test/r/rpl_ddl.result
+0
-585
mysql-test/t/bdb_cache.test
mysql-test/t/bdb_cache.test
+1
-3
mysql-test/t/rpl_ddl.test
mysql-test/t/rpl_ddl.test
+2
-0
ndb/src/common/mgmcommon/ConfigRetriever.cpp
ndb/src/common/mgmcommon/ConfigRetriever.cpp
+3
-1
sql/mysql_priv.h
sql/mysql_priv.h
+4
-2
sql/mysqld.cc
sql/mysqld.cc
+23
-3
sql/sql_class.h
sql/sql_class.h
+1
-1
sql/sql_parse.cc
sql/sql_parse.cc
+23
-19
sql/sql_prepare.cc
sql/sql_prepare.cc
+49
-22
sql/sql_select.cc
sql/sql_select.cc
+10
-7
No files found.
client/mysqltest.c
View file @
32734072
...
@@ -153,10 +153,6 @@ static char TMPDIR[FN_REFLEN];
...
@@ -153,10 +153,6 @@ static char TMPDIR[FN_REFLEN];
static
char
delimiter
[
MAX_DELIMITER
]
=
DEFAULT_DELIMITER
;
static
char
delimiter
[
MAX_DELIMITER
]
=
DEFAULT_DELIMITER
;
static
uint
delimiter_length
=
1
;
static
uint
delimiter_length
=
1
;
static
int
*
cur_block
,
*
block_stack_end
;
static
int
block_stack
[
BLOCK_STACK_DEPTH
];
static
int
block_ok_stack
[
BLOCK_STACK_DEPTH
];
static
CHARSET_INFO
*
charset_info
=
&
my_charset_latin1
;
/* Default charset */
static
CHARSET_INFO
*
charset_info
=
&
my_charset_latin1
;
/* Default charset */
static
const
char
*
charset_name
=
"latin1"
;
/* Default character set name */
static
const
char
*
charset_name
=
"latin1"
;
/* Default character set name */
...
@@ -210,8 +206,6 @@ MYSQL_RES *last_result=0;
...
@@ -210,8 +206,6 @@ MYSQL_RES *last_result=0;
PARSER
parser
;
PARSER
parser
;
MASTER_POS
master_pos
;
MASTER_POS
master_pos
;
int
*
block_ok
;
/* set to 0 if the current block should not be executed */
int
false_block_depth
=
0
;
/* if set, all results are concated and compared against this file */
/* if set, all results are concated and compared against this file */
const
char
*
result_file
=
0
;
const
char
*
result_file
=
0
;
...
@@ -281,6 +275,7 @@ Q_QUERY_VERTICAL, Q_QUERY_HORIZONTAL,
...
@@ -281,6 +275,7 @@ Q_QUERY_VERTICAL, Q_QUERY_HORIZONTAL,
Q_START_TIMER
,
Q_END_TIMER
,
Q_START_TIMER
,
Q_END_TIMER
,
Q_CHARACTER_SET
,
Q_DISABLE_PS_PROTOCOL
,
Q_ENABLE_PS_PROTOCOL
,
Q_CHARACTER_SET
,
Q_DISABLE_PS_PROTOCOL
,
Q_ENABLE_PS_PROTOCOL
,
Q_DISABLE_RECONNECT
,
Q_ENABLE_RECONNECT
,
Q_DISABLE_RECONNECT
,
Q_ENABLE_RECONNECT
,
Q_IF
,
Q_UNKNOWN
,
/* Unknown command. */
Q_UNKNOWN
,
/* Unknown command. */
Q_COMMENT
,
/* Comments, ignored. */
Q_COMMENT
,
/* Comments, ignored. */
...
@@ -368,9 +363,20 @@ const char *command_names[]=
...
@@ -368,9 +363,20 @@ const char *command_names[]=
"enable_ps_protocol"
,
"enable_ps_protocol"
,
"disable_reconnect"
,
"disable_reconnect"
,
"enable_reconnect"
,
"enable_reconnect"
,
"if"
,
0
0
};
};
/* Block stack */
typedef
struct
{
int
line
;
/* Start line of block */
my_bool
ok
;
/* Should block be executed */
enum
enum_commands
cmd
;
/* Command owning the block */
}
BLOCK
;
static
BLOCK
block_stack
[
BLOCK_STACK_DEPTH
];
static
BLOCK
*
cur_block
,
*
block_stack_end
;
TYPELIB
command_typelib
=
{
array_elements
(
command_names
),
""
,
TYPELIB
command_typelib
=
{
array_elements
(
command_names
),
""
,
command_names
,
0
};
command_names
,
0
};
...
@@ -1723,36 +1729,54 @@ int do_connect(struct st_query* q)
...
@@ -1723,36 +1729,54 @@ int do_connect(struct st_query* q)
int
do_done
(
struct
st_query
*
q
)
int
do_done
(
struct
st_query
*
q
)
{
{
/* Dummy statement to eliminate compiler warning */
q
->
type
=
Q_END_BLOCK
;
q
->
type
=
Q_END_BLOCK
;
/* Check if empty block stack */
if
(
cur_block
==
block_stack
)
if
(
cur_block
==
block_stack
)
die
(
"Stray '}' - end of block before beginning"
);
die
(
"Stray '}' - end of block before beginning"
);
if
(
*
block_ok
--
)
/* Test if inner block has been executed */
if
(
cur_block
->
ok
&&
cur_block
->
cmd
==
Q_WHILE
)
{
{
parser
.
current_line
=
*--
cur_block
;
/* Pop block from stack, re-execute outer block */
cur_block
--
;
parser
.
current_line
=
cur_block
->
line
;
}
}
else
else
{
{
++
parser
.
current_line
;
/* Pop block from stack, goto next line */
--
cur_block
;
cur_block
--
;
parser
.
current_line
++
;
}
}
return
0
;
return
0
;
}
}
int
do_while
(
struct
st_query
*
q
)
int
do_block
(
enum
enum_commands
cmd
,
struct
st_query
*
q
)
{
{
char
*
p
=
q
->
first_argument
;
char
*
p
=
q
->
first_argument
;
const
char
*
expr_start
,
*
expr_end
;
const
char
*
expr_start
,
*
expr_end
;
VAR
v
;
VAR
v
;
/* Check stack overflow */
if
(
cur_block
==
block_stack_end
)
if
(
cur_block
==
block_stack_end
)
die
(
"Nesting too deeply"
);
die
(
"Nesting too deeply"
);
if
(
!*
block_ok
)
/* Set way to find outer block again, increase line counter */
cur_block
->
line
=
parser
.
current_line
++
;
/* If this block is ignored */
if
(
!
cur_block
->
ok
)
{
{
++
false_block_depth
;
/* Inner block should be ignored too */
*++
block_ok
=
0
;
cur_block
++
;
*
cur_block
++
=
parser
.
current_line
++
;
cur_block
->
cmd
=
cmd
;
cur_block
->
ok
=
FALSE
;
return
0
;
return
0
;
}
}
/* Parse and evaluate test expression */
expr_start
=
strchr
(
p
,
'('
);
expr_start
=
strchr
(
p
,
'('
);
if
(
!
expr_start
)
if
(
!
expr_start
)
die
(
"missing '(' in while"
);
die
(
"missing '(' in while"
);
...
@@ -1761,14 +1785,12 @@ int do_while(struct st_query* q)
...
@@ -1761,14 +1785,12 @@ int do_while(struct st_query* q)
die
(
"missing ')' in while"
);
die
(
"missing ')' in while"
);
var_init
(
&
v
,
0
,
0
,
0
,
0
);
var_init
(
&
v
,
0
,
0
,
0
,
0
);
eval_expr
(
&
v
,
++
expr_start
,
&
expr_end
);
eval_expr
(
&
v
,
++
expr_start
,
&
expr_end
);
*
cur_block
++
=
parser
.
current_line
++
;
if
(
!
v
.
int_val
)
/* Define inner block */
{
cur_block
++
;
*++
block_ok
=
0
;
cur_block
->
cmd
=
cmd
;
false_block_depth
++
;
cur_block
->
ok
=
(
v
.
int_val
?
TRUE
:
FALSE
);
}
else
*++
block_ok
=
1
;
var_free
(
&
v
);
var_free
(
&
v
);
return
0
;
return
0
;
}
}
...
@@ -3404,12 +3426,13 @@ int main(int argc, char **argv)
...
@@ -3404,12 +3426,13 @@ int main(int argc, char **argv)
lineno
=
lineno_stack
;
lineno
=
lineno_stack
;
my_init_dynamic_array
(
&
q_lines
,
sizeof
(
struct
st_query
*
),
INIT_Q_LINES
,
my_init_dynamic_array
(
&
q_lines
,
sizeof
(
struct
st_query
*
),
INIT_Q_LINES
,
INIT_Q_LINES
);
INIT_Q_LINES
);
memset
(
block_stack
,
0
,
sizeof
(
block_stack
));
memset
(
block_stack
,
0
,
sizeof
(
block_stack
));
block_stack_end
=
block_stack
+
BLOCK_STACK_DEPTH
;
block_stack_end
=
block_stack
+
BLOCK_STACK_DEPTH
;
memset
(
block_ok_stack
,
0
,
sizeof
(
block_stack
))
;
cur_block
=
block_stack
;
cur_block
=
block_stack
;
cur_block
->
ok
=
TRUE
;
/* Outer block should always be executed */
block_ok
=
block_ok_stack
;
cur_block
->
cmd
=
Q_UNKNOWN
;
*
block_ok
=
1
;
init_dynamic_string
(
&
ds_res
,
""
,
0
,
65536
);
init_dynamic_string
(
&
ds_res
,
""
,
0
,
65536
);
parse_args
(
argc
,
argv
);
parse_args
(
argc
,
argv
);
if
(
mysql_server_init
(
embedded_server_arg_count
,
if
(
mysql_server_init
(
embedded_server_arg_count
,
...
@@ -3461,7 +3484,7 @@ int main(int argc, char **argv)
...
@@ -3461,7 +3484,7 @@ int main(int argc, char **argv)
int
current_line_inc
=
1
,
processed
=
0
;
int
current_line_inc
=
1
,
processed
=
0
;
if
(
q
->
type
==
Q_UNKNOWN
||
q
->
type
==
Q_COMMENT_WITH_COMMAND
)
if
(
q
->
type
==
Q_UNKNOWN
||
q
->
type
==
Q_COMMENT_WITH_COMMAND
)
get_query_type
(
q
);
get_query_type
(
q
);
if
(
*
block_
ok
)
if
(
cur_block
->
ok
)
{
{
processed
=
1
;
processed
=
1
;
switch
(
q
->
type
)
{
switch
(
q
->
type
)
{
...
@@ -3657,7 +3680,8 @@ int main(int argc, char **argv)
...
@@ -3657,7 +3680,8 @@ int main(int argc, char **argv)
{
{
current_line_inc
=
0
;
current_line_inc
=
0
;
switch
(
q
->
type
)
{
switch
(
q
->
type
)
{
case
Q_WHILE
:
do_while
(
q
);
break
;
case
Q_WHILE
:
do_block
(
Q_WHILE
,
q
);
break
;
case
Q_IF
:
do_block
(
Q_IF
,
q
);
break
;
case
Q_END_BLOCK
:
do_done
(
q
);
break
;
case
Q_END_BLOCK
:
do_done
(
q
);
break
;
default:
current_line_inc
=
1
;
break
;
default:
current_line_inc
=
1
;
break
;
}
}
...
...
mysql-test/Makefile.am
View file @
32734072
...
@@ -82,9 +82,16 @@ install-data-local:
...
@@ -82,9 +82,16 @@ install-data-local:
$(INSTALL_DATA)
$(srcdir)
/lib/init_db.sql
$(DESTDIR)$(testdir)
/lib
$(INSTALL_DATA)
$(srcdir)
/lib/init_db.sql
$(DESTDIR)$(testdir)
/lib
$(INSTALL_DATA)
$(srcdir)
/lib/
*
.pl
$(DESTDIR)$(testdir)
/lib
$(INSTALL_DATA)
$(srcdir)
/lib/
*
.pl
$(DESTDIR)$(testdir)
/lib
std_data/%.pem
:
std_data/client-key.pem
:
@
CP@
$(top_srcdir)
/SSL/
$
(
@F
)
$(srcdir)
/std_data
std_data/client-cert.pem
:
@
CP@
$(top_srcdir)
/SSL/
$
(
@F
)
$(srcdir)
/std_data
std_data/cacert.pem
:
@
CP@
$(top_srcdir)
/SSL/
$
(
@F
)
$(srcdir)
/std_data
std_data/server-cert.pem
:
@
CP@
$(top_srcdir)
/SSL/
$
(
@F
)
$(srcdir)
/std_data
std_data/server-key.pem
:
@
CP@
$(top_srcdir)
/SSL/
$
(
@F
)
$(srcdir)
/std_data
@
CP@
$(top_srcdir)
/SSL/
$
(
@F
)
$(srcdir)
/std_data
SUFFIXES
=
.sh
SUFFIXES
=
.sh
...
...
mysql-test/include/rpl_stmt_seq.inc
View file @
32734072
...
@@ -4,6 +4,12 @@
...
@@ -4,6 +4,12 @@
# the $variables is extreme sensitive.
# the $variables is extreme sensitive.
#
#
###############################################################
# Debug options : To debug this test script
###############################################################
let
$showbinlog
=
0
;
let
$manipulate
=
1
;
######## The typical test sequence
######## The typical test sequence
# 1. INSERT without commit
# 1. INSERT without commit
# check table content of master and slave
# check table content of master and slave
...
@@ -52,9 +58,12 @@ let $MAX= `SELECT MAX(f1) FROM t1` ;
...
@@ -52,9 +58,12 @@ let $MAX= `SELECT MAX(f1) FROM t1` ;
eval
INSERT
INTO
t1
SET
f1
=
$MAX
+
1
;
eval
INSERT
INTO
t1
SET
f1
=
$MAX
+
1
;
# results before DDL(to be tested)
# results before DDL(to be tested)
SELECT
MAX
(
f1
)
FROM
t1
;
SELECT
MAX
(
f1
)
FROM
t1
;
if
(
$show_binlog
)
{
--
replace_result
$VERSION
VERSION
--
replace_result
$VERSION
VERSION
--
replace_column
2
# 5 #
--
replace_column
2
# 5 #
eval
SHOW
BINLOG
EVENTS
IN
'master-bin.$_log_num_s'
;
eval
SHOW
BINLOG
EVENTS
IN
'master-bin.$_log_num_s'
;
}
sync_slave_with_master
;
sync_slave_with_master
;
connection
slave
;
connection
slave
;
...
@@ -63,9 +72,12 @@ SELECT '-------- switch to slave --------' as "";
...
@@ -63,9 +72,12 @@ SELECT '-------- switch to slave --------' as "";
--
enable_query_log
--
enable_query_log
# results before DDL(to be tested)
# results before DDL(to be tested)
SELECT
MAX
(
f1
)
FROM
t1
;
SELECT
MAX
(
f1
)
FROM
t1
;
if
(
$show_binlog
)
{
--
replace_result
$VERSION
VERSION
--
replace_result
$VERSION
VERSION
--
replace_column
2
# 5 #
--
replace_column
2
# 5 #
eval
SHOW
BINLOG
EVENTS
IN
'slave-bin.$_log_num_s'
;
eval
SHOW
BINLOG
EVENTS
IN
'slave-bin.$_log_num_s'
;
}
###############################################################
###############################################################
# command to be tested
# command to be tested
...
@@ -79,9 +91,12 @@ eval $my_stmt;
...
@@ -79,9 +91,12 @@ eval $my_stmt;
let
$my_stmt
=
ERROR
:
YOU
FORGOT
TO
FILL
IN
THE
STATEMENT
;
let
$my_stmt
=
ERROR
:
YOU
FORGOT
TO
FILL
IN
THE
STATEMENT
;
# results after DDL(to be tested)
# results after DDL(to be tested)
SELECT
MAX
(
f1
)
FROM
t1
;
SELECT
MAX
(
f1
)
FROM
t1
;
if
(
$show_binlog
)
{
--
replace_result
$VERSION
VERSION
--
replace_result
$VERSION
VERSION
--
replace_column
2
# 5 #
--
replace_column
2
# 5 #
eval
SHOW
BINLOG
EVENTS
IN
'master-bin.$_log_num_s'
;
eval
SHOW
BINLOG
EVENTS
IN
'master-bin.$_log_num_s'
;
}
sync_slave_with_master
;
sync_slave_with_master
;
connection
slave
;
connection
slave
;
...
@@ -90,9 +105,12 @@ SELECT '-------- switch to slave --------' as "";
...
@@ -90,9 +105,12 @@ SELECT '-------- switch to slave --------' as "";
--
enable_query_log
--
enable_query_log
# results after DDL(to be tested)
# results after DDL(to be tested)
SELECT
MAX
(
f1
)
FROM
t1
;
SELECT
MAX
(
f1
)
FROM
t1
;
if
(
$show_binlog
)
{
--
replace_result
$VERSION
VERSION
--
replace_result
$VERSION
VERSION
--
replace_column
2
# 5 #
--
replace_column
2
# 5 #
eval
SHOW
BINLOG
EVENTS
IN
'slave-bin.$_log_num_s'
;
eval
SHOW
BINLOG
EVENTS
IN
'slave-bin.$_log_num_s'
;
}
###############################################################
###############################################################
# ROLLBACK
# ROLLBACK
...
@@ -114,9 +132,12 @@ eval SELECT CONCAT(CONCAT('TEST-INFO: MASTER: The INSERT is ',
...
@@ -114,9 +132,12 @@ eval SELECT CONCAT(CONCAT('TEST-INFO: MASTER: The INSERT is ',
' (Failed)'
))
AS
""
' (Failed)'
))
AS
""
FROM
mysqltest1
.
t1
;
FROM
mysqltest1
.
t1
;
--
enable_query_log
--
enable_query_log
if
(
$show_binlog
)
{
--
replace_result
$VERSION
VERSION
--
replace_result
$VERSION
VERSION
--
replace_column
2
# 5 #
--
replace_column
2
# 5 #
eval
SHOW
BINLOG
EVENTS
IN
'master-bin.$_log_num_s'
;
eval
SHOW
BINLOG
EVENTS
IN
'master-bin.$_log_num_s'
;
}
sync_slave_with_master
;
sync_slave_with_master
;
connection
slave
;
connection
slave
;
...
@@ -133,16 +154,17 @@ eval SELECT CONCAT(CONCAT('TEST-INFO: SLAVE: The INSERT is ',
...
@@ -133,16 +154,17 @@ eval SELECT CONCAT(CONCAT('TEST-INFO: SLAVE: The INSERT is ',
' (Failed)'
))
AS
""
' (Failed)'
))
AS
""
FROM
mysqltest1
.
t1
;
FROM
mysqltest1
.
t1
;
--
enable_query_log
--
enable_query_log
if
(
$show_binlog
)
{
--
replace_result
$VERSION
VERSION
--
replace_result
$VERSION
VERSION
--
replace_column
2
# 5 #
--
replace_column
2
# 5 #
eval
SHOW
BINLOG
EVENTS
IN
'slave-bin.$_log_num_s'
;
eval
SHOW
BINLOG
EVENTS
IN
'slave-bin.$_log_num_s'
;
}
###############################################################
###############################################################
# Manipulate binlog
# Manipulate binlog
###############################################################
###############################################################
#let $manipulate= 0;
if
(
$manipulate
)
let
$manipulate
=
1
;
while
(
$manipulate
)
{
{
#### Manipulate the binary logs,
#### Manipulate the binary logs,
# so that the output of SHOW BINLOG EVENTS IN <current log>
# so that the output of SHOW BINLOG EVENTS IN <current log>
...
@@ -171,7 +193,6 @@ flush logs;
...
@@ -171,7 +193,6 @@ flush logs;
# sleep 1;
# sleep 1;
# eval SHOW BINLOG EVENTS IN 'slave-bin.$_log_num_s';
# eval SHOW BINLOG EVENTS IN 'slave-bin.$_log_num_s';
inc
$_log_num_n
;
inc
$_log_num_n
;
let
$manipulate
=
0
;
}
}
connection
master
;
connection
master
;
...
...
mysql-test/r/bdb_cache.result
View file @
32734072
...
@@ -12,10 +12,9 @@ show status like "Qcache_queries_in_cache";
...
@@ -12,10 +12,9 @@ show status like "Qcache_queries_in_cache";
Variable_name Value
Variable_name Value
Qcache_queries_in_cache 0
Qcache_queries_in_cache 0
drop table t1;
drop table t1;
commit;
set autocommit=1;
set autocommit=1;
begin;
create table t1 (a int not null) engine=bdb;
create table t1 (a int not null) engine=bdb;
begin;
insert into t1 values (1),(2),(3);
insert into t1 values (1),(2),(3);
select * from t1;
select * from t1;
a
a
...
@@ -26,7 +25,6 @@ show status like "Qcache_queries_in_cache";
...
@@ -26,7 +25,6 @@ show status like "Qcache_queries_in_cache";
Variable_name Value
Variable_name Value
Qcache_queries_in_cache 0
Qcache_queries_in_cache 0
drop table t1;
drop table t1;
commit;
create table t1 (a int not null) engine=bdb;
create table t1 (a int not null) engine=bdb;
create table t2 (a int not null) engine=bdb;
create table t2 (a int not null) engine=bdb;
create table t3 (a int not null) engine=bdb;
create table t3 (a int not null) engine=bdb;
...
...
mysql-test/r/ps_grant.result
View file @
32734072
...
@@ -78,4 +78,4 @@ drop database mysqltest;
...
@@ -78,4 +78,4 @@ drop database mysqltest;
prepare stmt4 from ' show full processlist ';
prepare stmt4 from ' show full processlist ';
execute stmt4;
execute stmt4;
Id User Host db Command Time State Info
Id User Host db Command Time State Info
number root localhost test
Query
time NULL show full processlist
number root localhost test
Execute
time NULL show full processlist
mysql-test/r/rpl_ddl.result
View file @
32734072
This diff is collapsed.
Click to expand it.
mysql-test/t/bdb_cache.test
View file @
32734072
...
@@ -14,15 +14,13 @@ insert into t1 values (1),(2),(3);
...
@@ -14,15 +14,13 @@ insert into t1 values (1),(2),(3);
select
*
from
t1
;
select
*
from
t1
;
show
status
like
"Qcache_queries_in_cache"
;
show
status
like
"Qcache_queries_in_cache"
;
drop
table
t1
;
drop
table
t1
;
commit
;
set
autocommit
=
1
;
set
autocommit
=
1
;
begin
;
create
table
t1
(
a
int
not
null
)
engine
=
bdb
;
create
table
t1
(
a
int
not
null
)
engine
=
bdb
;
begin
;
insert
into
t1
values
(
1
),(
2
),(
3
);
insert
into
t1
values
(
1
),(
2
),(
3
);
select
*
from
t1
;
select
*
from
t1
;
show
status
like
"Qcache_queries_in_cache"
;
show
status
like
"Qcache_queries_in_cache"
;
drop
table
t1
;
drop
table
t1
;
commit
;
create
table
t1
(
a
int
not
null
)
engine
=
bdb
;
create
table
t1
(
a
int
not
null
)
engine
=
bdb
;
create
table
t2
(
a
int
not
null
)
engine
=
bdb
;
create
table
t2
(
a
int
not
null
)
engine
=
bdb
;
create
table
t3
(
a
int
not
null
)
engine
=
bdb
;
create
table
t3
(
a
int
not
null
)
engine
=
bdb
;
...
...
mysql-test/t/rpl_ddl.test
View file @
32734072
...
@@ -253,6 +253,8 @@ let $my_slave_commit= false;
...
@@ -253,6 +253,8 @@ let $my_slave_commit= false;
--
source
include
/
rpl_stmt_seq
.
inc
--
source
include
/
rpl_stmt_seq
.
inc
# With prior read locking
# With prior read locking
# Note that this test generate an error since the rpl_stmt_seq.inc
# tries to insert into t1.
LOCK
TABLES
mysqltest1
.
t1
READ
;
LOCK
TABLES
mysqltest1
.
t1
READ
;
let
$my_stmt
=
UNLOCK
TABLES
;
let
$my_stmt
=
UNLOCK
TABLES
;
let
$my_master_commit
=
false
;
let
$my_master_commit
=
false
;
...
...
ndb/src/common/mgmcommon/ConfigRetriever.cpp
View file @
32734072
...
@@ -138,7 +138,9 @@ ConfigRetriever::getConfig(NdbMgmHandle m_handle){
...
@@ -138,7 +138,9 @@ ConfigRetriever::getConfig(NdbMgmHandle m_handle){
setError
(
CR_ERROR
,
ndb_mgm_get_latest_error_desc
(
m_handle
));
setError
(
CR_ERROR
,
ndb_mgm_get_latest_error_desc
(
m_handle
));
return
0
;
return
0
;
}
}
ndb_mgm_disconnect
(
m_handle
);
return
conf
;
return
conf
;
}
}
...
...
sql/mysql_priv.h
View file @
32734072
...
@@ -424,8 +424,6 @@ struct Query_cache_query_flags
...
@@ -424,8 +424,6 @@ struct Query_cache_query_flags
#define query_cache_invalidate_by_MyISAM_filename_ref NULL
#define query_cache_invalidate_by_MyISAM_filename_ref NULL
#endif
/*HAVE_QUERY_CACHE*/
#endif
/*HAVE_QUERY_CACHE*/
#define prepare_execute(A) ((A)->command == COM_EXECUTE)
int
mysql_create_db
(
THD
*
thd
,
char
*
db
,
HA_CREATE_INFO
*
create
,
bool
silent
);
int
mysql_create_db
(
THD
*
thd
,
char
*
db
,
HA_CREATE_INFO
*
create
,
bool
silent
);
int
mysql_alter_db
(
THD
*
thd
,
const
char
*
db
,
HA_CREATE_INFO
*
create
);
int
mysql_alter_db
(
THD
*
thd
,
const
char
*
db
,
HA_CREATE_INFO
*
create
);
int
mysql_rm_db
(
THD
*
thd
,
char
*
db
,
bool
if_exists
,
bool
silent
);
int
mysql_rm_db
(
THD
*
thd
,
char
*
db
,
bool
if_exists
,
bool
silent
);
...
@@ -462,6 +460,7 @@ void mysql_execute_command(THD *thd);
...
@@ -462,6 +460,7 @@ void mysql_execute_command(THD *thd);
bool
do_command
(
THD
*
thd
);
bool
do_command
(
THD
*
thd
);
bool
dispatch_command
(
enum
enum_server_command
command
,
THD
*
thd
,
bool
dispatch_command
(
enum
enum_server_command
command
,
THD
*
thd
,
char
*
packet
,
uint
packet_length
);
char
*
packet
,
uint
packet_length
);
void
log_slow_statement
(
THD
*
thd
);
bool
check_dup
(
const
char
*
db
,
const
char
*
name
,
TABLE_LIST
*
tables
);
bool
check_dup
(
const
char
*
db
,
const
char
*
name
,
TABLE_LIST
*
tables
);
bool
table_cache_init
(
void
);
bool
table_cache_init
(
void
);
...
@@ -899,6 +898,8 @@ extern ulong binlog_cache_size, max_binlog_cache_size, open_files_limit;
...
@@ -899,6 +898,8 @@ extern ulong binlog_cache_size, max_binlog_cache_size, open_files_limit;
extern
ulong
max_binlog_size
,
max_relay_log_size
;
extern
ulong
max_binlog_size
,
max_relay_log_size
;
extern
ulong
rpl_recovery_rank
,
thread_cache_size
;
extern
ulong
rpl_recovery_rank
,
thread_cache_size
;
extern
ulong
com_stat
[(
uint
)
SQLCOM_END
],
com_other
,
back_log
;
extern
ulong
com_stat
[(
uint
)
SQLCOM_END
],
com_other
,
back_log
;
extern
ulong
com_stmt_prepare
,
com_stmt_execute
,
com_stmt_send_long_data
;
extern
ulong
com_stmt_reset
,
com_stmt_close
;
extern
ulong
specialflag
,
current_pid
;
extern
ulong
specialflag
,
current_pid
;
extern
ulong
expire_logs_days
,
sync_binlog_period
,
sync_binlog_counter
;
extern
ulong
expire_logs_days
,
sync_binlog_period
,
sync_binlog_counter
;
extern
my_bool
relay_log_purge
,
opt_innodb_safe_binlog
;
extern
my_bool
relay_log_purge
,
opt_innodb_safe_binlog
;
...
@@ -918,6 +919,7 @@ extern my_bool opt_slave_compressed_protocol, use_temp_pool;
...
@@ -918,6 +919,7 @@ extern my_bool opt_slave_compressed_protocol, use_temp_pool;
extern
my_bool
opt_readonly
,
lower_case_file_system
;
extern
my_bool
opt_readonly
,
lower_case_file_system
;
extern
my_bool
opt_enable_named_pipe
,
opt_sync_frm
,
opt_allow_suspicious_udfs
;
extern
my_bool
opt_enable_named_pipe
,
opt_sync_frm
,
opt_allow_suspicious_udfs
;
extern
my_bool
opt_secure_auth
;
extern
my_bool
opt_secure_auth
;
extern
my_bool
opt_log_slow_admin_statements
;
extern
uint
opt_crash_binlog_innodb
;
extern
uint
opt_crash_binlog_innodb
;
extern
char
*
shared_memory_base_name
,
*
mysqld_unix_port
;
extern
char
*
shared_memory_base_name
,
*
mysqld_unix_port
;
extern
bool
opt_enable_shared_memory
;
extern
bool
opt_enable_shared_memory
;
...
...
sql/mysqld.cc
View file @
32734072
...
@@ -294,6 +294,7 @@ my_bool opt_sync_bdb_logs, opt_sync_frm, opt_allow_suspicious_udfs;
...
@@ -294,6 +294,7 @@ my_bool opt_sync_bdb_logs, opt_sync_frm, opt_allow_suspicious_udfs;
my_bool
opt_secure_auth
=
0
;
my_bool
opt_secure_auth
=
0
;
my_bool
opt_short_log_format
=
0
;
my_bool
opt_short_log_format
=
0
;
my_bool
opt_log_queries_not_using_indexes
=
0
;
my_bool
opt_log_queries_not_using_indexes
=
0
;
my_bool
opt_log_slow_admin_statements
=
0
;
my_bool
lower_case_file_system
=
0
;
my_bool
lower_case_file_system
=
0
;
my_bool
opt_innodb_safe_binlog
=
0
;
my_bool
opt_innodb_safe_binlog
=
0
;
volatile
bool
mqh_used
=
0
;
volatile
bool
mqh_used
=
0
;
...
@@ -315,6 +316,8 @@ ulong slave_net_timeout, slave_trans_retries;
...
@@ -315,6 +316,8 @@ ulong slave_net_timeout, slave_trans_retries;
ulong
thread_cache_size
=
0
,
binlog_cache_size
=
0
,
max_binlog_cache_size
=
0
;
ulong
thread_cache_size
=
0
,
binlog_cache_size
=
0
,
max_binlog_cache_size
=
0
;
ulong
query_cache_size
=
0
;
ulong
query_cache_size
=
0
;
ulong
com_stat
[(
uint
)
SQLCOM_END
],
com_other
;
ulong
com_stat
[(
uint
)
SQLCOM_END
],
com_other
;
ulong
com_stmt_prepare
,
com_stmt_execute
,
com_stmt_send_long_data
;
ulong
com_stmt_close
,
com_stmt_reset
;
ulong
bytes_sent
,
bytes_received
,
net_big_packet_count
;
ulong
bytes_sent
,
bytes_received
,
net_big_packet_count
;
ulong
refresh_version
,
flush_version
;
/* Increments on each reload */
ulong
refresh_version
,
flush_version
;
/* Increments on each reload */
ulong
query_id
,
long_query_count
;
ulong
query_id
,
long_query_count
;
...
@@ -4196,7 +4199,8 @@ enum options_mysqld
...
@@ -4196,7 +4199,8 @@ enum options_mysqld
OPT_TIME_FORMAT
,
OPT_TIME_FORMAT
,
OPT_DATETIME_FORMAT
,
OPT_DATETIME_FORMAT
,
OPT_LOG_QUERIES_NOT_USING_INDEXES
,
OPT_LOG_QUERIES_NOT_USING_INDEXES
,
OPT_DEFAULT_TIME_ZONE
OPT_DEFAULT_TIME_ZONE
,
OPT_LOG_SLOW_ADMIN_STATEMENTS
};
};
...
@@ -4456,7 +4460,7 @@ Disable with --skip-isam.",
...
@@ -4456,7 +4460,7 @@ Disable with --skip-isam.",
"Log some extra information to update log. Please note that this option is deprecated; see --log-short-format option."
,
"Log some extra information to update log. Please note that this option is deprecated; see --log-short-format option."
,
0
,
0
,
0
,
GET_NO_ARG
,
NO_ARG
,
0
,
0
,
0
,
0
,
0
,
0
},
0
,
0
,
0
,
GET_NO_ARG
,
NO_ARG
,
0
,
0
,
0
,
0
,
0
,
0
},
{
"log-queries-not-using-indexes"
,
OPT_LOG_QUERIES_NOT_USING_INDEXES
,
{
"log-queries-not-using-indexes"
,
OPT_LOG_QUERIES_NOT_USING_INDEXES
,
"Log queries that are executed without benefit of any index."
,
"Log queries that are executed without benefit of any index
to the slow log if it is open
."
,
(
gptr
*
)
&
opt_log_queries_not_using_indexes
,
(
gptr
*
)
&
opt_log_queries_not_using_indexes
,
(
gptr
*
)
&
opt_log_queries_not_using_indexes
,
(
gptr
*
)
&
opt_log_queries_not_using_indexes
,
0
,
GET_BOOL
,
NO_ARG
,
0
,
0
,
0
,
0
,
0
,
0
},
0
,
GET_BOOL
,
NO_ARG
,
0
,
0
,
0
,
0
,
0
,
0
},
{
"log-short-format"
,
OPT_SHORT_LOG_FORMAT
,
{
"log-short-format"
,
OPT_SHORT_LOG_FORMAT
,
...
@@ -4467,8 +4471,13 @@ Disable with --skip-isam.",
...
@@ -4467,8 +4471,13 @@ Disable with --skip-isam.",
"Tells the slave to log the updates from the slave thread to the binary log. You will need to turn it on if you plan to daisy-chain the slaves."
,
"Tells the slave to log the updates from the slave thread to the binary log. You will need to turn it on if you plan to daisy-chain the slaves."
,
(
gptr
*
)
&
opt_log_slave_updates
,
(
gptr
*
)
&
opt_log_slave_updates
,
0
,
GET_BOOL
,
(
gptr
*
)
&
opt_log_slave_updates
,
(
gptr
*
)
&
opt_log_slave_updates
,
0
,
GET_BOOL
,
NO_ARG
,
0
,
0
,
0
,
0
,
0
,
0
},
NO_ARG
,
0
,
0
,
0
,
0
,
0
,
0
},
{
"log-slow-admin-statements"
,
OPT_LOG_SLOW_ADMIN_STATEMENTS
,
"Log slow OPTIMIZE, ANALYZE, ALTER and other administrative statements to the slow log if it is open."
,
(
gptr
*
)
&
opt_log_slow_admin_statements
,
(
gptr
*
)
&
opt_log_slow_admin_statements
,
0
,
GET_BOOL
,
NO_ARG
,
0
,
0
,
0
,
0
,
0
,
0
},
{
"log-slow-queries"
,
OPT_SLOW_QUERY_LOG
,
{
"log-slow-queries"
,
OPT_SLOW_QUERY_LOG
,
"Log slow queries to this log file. Defaults logging to hostname-slow.log file
."
,
"Log slow queries to this log file. Defaults logging to hostname-slow.log file. Must be enabled to activate other slow log options
."
,
(
gptr
*
)
&
opt_slow_logname
,
(
gptr
*
)
&
opt_slow_logname
,
0
,
GET_STR
,
OPT_ARG
,
(
gptr
*
)
&
opt_slow_logname
,
(
gptr
*
)
&
opt_slow_logname
,
0
,
GET_STR
,
OPT_ARG
,
0
,
0
,
0
,
0
,
0
,
0
},
0
,
0
,
0
,
0
,
0
,
0
},
{
"log-update"
,
OPT_UPDATE_LOG
,
{
"log-update"
,
OPT_UPDATE_LOG
,
...
@@ -5467,6 +5476,11 @@ struct show_var_st status_vars[]= {
...
@@ -5467,6 +5476,11 @@ struct show_var_st status_vars[]= {
{
"Com_show_warnings"
,
(
char
*
)
(
com_stat
+
(
uint
)
SQLCOM_SHOW_WARNS
),
SHOW_LONG
},
{
"Com_show_warnings"
,
(
char
*
)
(
com_stat
+
(
uint
)
SQLCOM_SHOW_WARNS
),
SHOW_LONG
},
{
"Com_slave_start"
,
(
char
*
)
(
com_stat
+
(
uint
)
SQLCOM_SLAVE_START
),
SHOW_LONG
},
{
"Com_slave_start"
,
(
char
*
)
(
com_stat
+
(
uint
)
SQLCOM_SLAVE_START
),
SHOW_LONG
},
{
"Com_slave_stop"
,
(
char
*
)
(
com_stat
+
(
uint
)
SQLCOM_SLAVE_STOP
),
SHOW_LONG
},
{
"Com_slave_stop"
,
(
char
*
)
(
com_stat
+
(
uint
)
SQLCOM_SLAVE_STOP
),
SHOW_LONG
},
{
"Com_stmt_prepare"
,
(
char
*
)
&
com_stmt_prepare
,
SHOW_LONG
},
{
"Com_stmt_execute"
,
(
char
*
)
&
com_stmt_execute
,
SHOW_LONG
},
{
"Com_stmt_send_long_data"
,
(
char
*
)
&
com_stmt_send_long_data
,
SHOW_LONG
},
{
"Com_stmt_reset"
,
(
char
*
)
&
com_stmt_reset
,
SHOW_LONG
},
{
"Com_stmt_close"
,
(
char
*
)
&
com_stmt_close
,
SHOW_LONG
},
{
"Com_truncate"
,
(
char
*
)
(
com_stat
+
(
uint
)
SQLCOM_TRUNCATE
),
SHOW_LONG
},
{
"Com_truncate"
,
(
char
*
)
(
com_stat
+
(
uint
)
SQLCOM_TRUNCATE
),
SHOW_LONG
},
{
"Com_unlock_tables"
,
(
char
*
)
(
com_stat
+
(
uint
)
SQLCOM_UNLOCK_TABLES
),
SHOW_LONG
},
{
"Com_unlock_tables"
,
(
char
*
)
(
com_stat
+
(
uint
)
SQLCOM_UNLOCK_TABLES
),
SHOW_LONG
},
{
"Com_update"
,
(
char
*
)
(
com_stat
+
(
uint
)
SQLCOM_UPDATE
),
SHOW_LONG
},
{
"Com_update"
,
(
char
*
)
(
com_stat
+
(
uint
)
SQLCOM_UPDATE
),
SHOW_LONG
},
...
@@ -6084,6 +6098,9 @@ get_one_option(int optid, const struct my_option *opt __attribute__((unused)),
...
@@ -6084,6 +6098,9 @@ get_one_option(int optid, const struct my_option *opt __attribute__((unused)),
case
(
int
)
OPT_SLOW_QUERY_LOG
:
case
(
int
)
OPT_SLOW_QUERY_LOG
:
opt_slow_log
=
1
;
opt_slow_log
=
1
;
break
;
break
;
case
(
int
)
OPT_LOG_SLOW_ADMIN_STATEMENTS
:
opt_log_slow_admin_statements
=
1
;
break
;
case
(
int
)
OPT_SKIP_NEW
:
case
(
int
)
OPT_SKIP_NEW
:
opt_specialflag
|=
SPECIAL_NO_NEW_FUNC
;
opt_specialflag
|=
SPECIAL_NO_NEW_FUNC
;
delay_key_write_options
=
(
uint
)
DELAY_KEY_WRITE_NONE
;
delay_key_write_options
=
(
uint
)
DELAY_KEY_WRITE_NONE
;
...
@@ -6443,6 +6460,9 @@ static void get_options(int argc,char **argv)
...
@@ -6443,6 +6460,9 @@ static void get_options(int argc,char **argv)
if
(
opt_bdb
)
if
(
opt_bdb
)
sql_print_warning
(
"this binary does not contain BDB storage engine"
);
sql_print_warning
(
"this binary does not contain BDB storage engine"
);
#endif
#endif
if
((
opt_log_slow_admin_statements
||
opt_log_queries_not_using_indexes
)
&&
!
opt_slow_log
)
sql_print_warning
(
"options --log-slow-admin-statements and --log-queries-not-using-indexes have no effect if --log-slow-queries is not set"
);
/*
/*
Check that the default storage engine is actually available.
Check that the default storage engine is actually available.
...
...
sql/sql_class.h
View file @
32734072
...
@@ -916,7 +916,7 @@ public:
...
@@ -916,7 +916,7 @@ public:
bool
query_error
,
bootstrap
,
cleanup_done
;
bool
query_error
,
bootstrap
,
cleanup_done
;
bool
tmp_table_used
;
bool
tmp_table_used
;
bool
charset_is_system_charset
,
charset_is_collation_connection
;
bool
charset_is_system_charset
,
charset_is_collation_connection
;
bool
slow_command
;
bool
enable_slow_log
;
/* enable slow log for current statement */
my_bool
volatile
killed
;
my_bool
volatile
killed
;
/*
/*
...
...
sql/sql_parse.cc
View file @
32734072
...
@@ -59,7 +59,6 @@ static void remove_escape(char *name);
...
@@ -59,7 +59,6 @@ static void remove_escape(char *name);
static
void
refresh_status
(
void
);
static
void
refresh_status
(
void
);
static
bool
append_file_to_dir
(
THD
*
thd
,
const
char
**
filename_ptr
,
static
bool
append_file_to_dir
(
THD
*
thd
,
const
char
**
filename_ptr
,
const
char
*
table_name
);
const
char
*
table_name
);
static
void
log_slow_query
(
THD
*
thd
);
const
char
*
any_db
=
"*any*"
;
// Special symbol for check_access
const
char
*
any_db
=
"*any*"
;
// Special symbol for check_access
...
@@ -1342,10 +1341,10 @@ bool dispatch_command(enum enum_server_command command, THD *thd,
...
@@ -1342,10 +1341,10 @@ bool dispatch_command(enum enum_server_command command, THD *thd,
thd
->
command
=
command
;
thd
->
command
=
command
;
/*
/*
Commands which
will always take a long time should be marked with
Commands which
always take a long time are logged into
th
is so that they will not get logged to the slow query log
th
e slow log only if opt_log_slow_admin_statements is set.
*/
*/
thd
->
slow_command
=
FALS
E
;
thd
->
enable_slow_log
=
TRU
E
;
thd
->
set_time
();
thd
->
set_time
();
VOID
(
pthread_mutex_lock
(
&
LOCK_thread_count
));
VOID
(
pthread_mutex_lock
(
&
LOCK_thread_count
));
thd
->
query_id
=
query_id
;
thd
->
query_id
=
query_id
;
...
@@ -1383,7 +1382,7 @@ bool dispatch_command(enum enum_server_command command, THD *thd,
...
@@ -1383,7 +1382,7 @@ bool dispatch_command(enum enum_server_command command, THD *thd,
uint
tbl_len
=
*
(
uchar
*
)
(
packet
+
db_len
+
1
);
uint
tbl_len
=
*
(
uchar
*
)
(
packet
+
db_len
+
1
);
statistic_increment
(
com_other
,
&
LOCK_status
);
statistic_increment
(
com_other
,
&
LOCK_status
);
thd
->
slow_command
=
TRUE
;
thd
->
enable_slow_log
=
opt_log_slow_admin_statements
;
db
=
thd
->
alloc
(
db_len
+
tbl_len
+
2
);
db
=
thd
->
alloc
(
db_len
+
tbl_len
+
2
);
tbl_name
=
strmake
(
db
,
packet
+
1
,
db_len
)
+
1
;
tbl_name
=
strmake
(
db
,
packet
+
1
,
db_len
)
+
1
;
strmake
(
tbl_name
,
packet
+
db_len
+
2
,
tbl_len
);
strmake
(
tbl_name
,
packet
+
db_len
+
2
,
tbl_len
);
...
@@ -1515,7 +1514,7 @@ bool dispatch_command(enum enum_server_command command, THD *thd,
...
@@ -1515,7 +1514,7 @@ bool dispatch_command(enum enum_server_command command, THD *thd,
#endif
#endif
ulong
length
=
(
ulong
)(
packet_end
-
packet
);
ulong
length
=
(
ulong
)(
packet_end
-
packet
);
log_slow_
query
(
thd
);
log_slow_
statement
(
thd
);
/* Remove garbage at start of query */
/* Remove garbage at start of query */
while
(
my_isspace
(
thd
->
charset
(),
*
packet
)
&&
length
>
0
)
while
(
my_isspace
(
thd
->
charset
(),
*
packet
)
&&
length
>
0
)
...
@@ -1658,7 +1657,7 @@ bool dispatch_command(enum enum_server_command command, THD *thd,
...
@@ -1658,7 +1657,7 @@ bool dispatch_command(enum enum_server_command command, THD *thd,
uint32
slave_server_id
;
uint32
slave_server_id
;
statistic_increment
(
com_other
,
&
LOCK_status
);
statistic_increment
(
com_other
,
&
LOCK_status
);
thd
->
slow_command
=
TRUE
;
thd
->
enable_slow_log
=
opt_log_slow_admin_statements
;
if
(
check_global_access
(
thd
,
REPL_SLAVE_ACL
))
if
(
check_global_access
(
thd
,
REPL_SLAVE_ACL
))
break
;
break
;
...
@@ -1827,7 +1826,7 @@ bool dispatch_command(enum enum_server_command command, THD *thd,
...
@@ -1827,7 +1826,7 @@ bool dispatch_command(enum enum_server_command command, THD *thd,
if
(
thd
->
is_fatal_error
)
if
(
thd
->
is_fatal_error
)
send_error
(
thd
,
0
);
// End of memory ?
send_error
(
thd
,
0
);
// End of memory ?
log_slow_
query
(
thd
);
log_slow_
statement
(
thd
);
thd
->
proc_info
=
"cleaning up"
;
thd
->
proc_info
=
"cleaning up"
;
VOID
(
pthread_mutex_lock
(
&
LOCK_thread_count
));
// For process list
VOID
(
pthread_mutex_lock
(
&
LOCK_thread_count
));
// For process list
...
@@ -1843,13 +1842,16 @@ bool dispatch_command(enum enum_server_command command, THD *thd,
...
@@ -1843,13 +1842,16 @@ bool dispatch_command(enum enum_server_command command, THD *thd,
}
}
static
void
log_slow_query
(
THD
*
thd
)
void
log_slow_statement
(
THD
*
thd
)
{
{
time_t
start_of_query
=
thd
->
start_time
;
time_t
start_of_query
=
thd
->
start_time
;
thd
->
end_time
();
// Set start time
thd
->
end_time
();
// Set start time
/* If not reading from backup and if the query took too long */
/*
if
(
!
thd
->
slow_command
&&
!
thd
->
user_time
)
// do not log 'slow_command' queries
Do not log administrative statements unless the appropriate option is
set; do not log into slow log if reading from backup.
*/
if
(
thd
->
enable_slow_log
&&
!
thd
->
user_time
)
{
{
thd
->
proc_info
=
"logging slow query"
;
thd
->
proc_info
=
"logging slow query"
;
...
@@ -2190,6 +2192,8 @@ mysql_execute_command(THD *thd)
...
@@ -2190,6 +2192,8 @@ mysql_execute_command(THD *thd)
DBUG_PRINT
(
"info"
,
(
"DEALLOCATE PREPARE: %.*s
\n
"
,
DBUG_PRINT
(
"info"
,
(
"DEALLOCATE PREPARE: %.*s
\n
"
,
lex
->
prepared_stmt_name
.
length
,
lex
->
prepared_stmt_name
.
length
,
lex
->
prepared_stmt_name
.
str
));
lex
->
prepared_stmt_name
.
str
));
/* We account deallocate in the same manner as mysql_stmt_close */
statistic_increment
(
com_stmt_close
,
&
LOCK_status
);
if
((
stmt
=
thd
->
stmt_map
.
find_by_name
(
&
lex
->
prepared_stmt_name
)))
if
((
stmt
=
thd
->
stmt_map
.
find_by_name
(
&
lex
->
prepared_stmt_name
)))
{
{
thd
->
stmt_map
.
erase
(
stmt
);
thd
->
stmt_map
.
erase
(
stmt
);
...
@@ -2292,7 +2296,7 @@ mysql_execute_command(THD *thd)
...
@@ -2292,7 +2296,7 @@ mysql_execute_command(THD *thd)
check_table_access
(
thd
,
SELECT_ACL
,
tables
,
0
)
||
check_table_access
(
thd
,
SELECT_ACL
,
tables
,
0
)
||
check_global_access
(
thd
,
FILE_ACL
))
check_global_access
(
thd
,
FILE_ACL
))
goto
error
;
/* purecov: inspected */
goto
error
;
/* purecov: inspected */
thd
->
slow_command
=
TRUE
;
thd
->
enable_slow_log
=
opt_log_slow_admin_statements
;
res
=
mysql_backup_table
(
thd
,
tables
);
res
=
mysql_backup_table
(
thd
,
tables
);
break
;
break
;
...
@@ -2303,7 +2307,7 @@ mysql_execute_command(THD *thd)
...
@@ -2303,7 +2307,7 @@ mysql_execute_command(THD *thd)
check_table_access
(
thd
,
INSERT_ACL
,
tables
,
0
)
||
check_table_access
(
thd
,
INSERT_ACL
,
tables
,
0
)
||
check_global_access
(
thd
,
FILE_ACL
))
check_global_access
(
thd
,
FILE_ACL
))
goto
error
;
/* purecov: inspected */
goto
error
;
/* purecov: inspected */
thd
->
slow_command
=
TRUE
;
thd
->
enable_slow_log
=
opt_log_slow_admin_statements
;
res
=
mysql_restore_table
(
thd
,
tables
);
res
=
mysql_restore_table
(
thd
,
tables
);
break
;
break
;
}
}
...
@@ -2538,7 +2542,7 @@ unsent_create_error:
...
@@ -2538,7 +2542,7 @@ unsent_create_error:
case
SQLCOM_CREATE_INDEX
:
case
SQLCOM_CREATE_INDEX
:
if
(
check_one_table_access
(
thd
,
INDEX_ACL
,
tables
))
if
(
check_one_table_access
(
thd
,
INDEX_ACL
,
tables
))
goto
error
;
/* purecov: inspected */
goto
error
;
/* purecov: inspected */
thd
->
slow_command
=
TRUE
;
thd
->
enable_slow_log
=
opt_log_slow_admin_statements
;
if
(
end_active_trans
(
thd
))
if
(
end_active_trans
(
thd
))
res
=
-
1
;
res
=
-
1
;
else
else
...
@@ -2624,7 +2628,7 @@ unsent_create_error:
...
@@ -2624,7 +2628,7 @@ unsent_create_error:
res
=
-
1
;
res
=
-
1
;
else
else
{
{
thd
->
slow_command
=
TRUE
;
thd
->
enable_slow_log
=
opt_log_slow_admin_statements
;
res
=
mysql_alter_table
(
thd
,
select_lex
->
db
,
lex
->
name
,
res
=
mysql_alter_table
(
thd
,
select_lex
->
db
,
lex
->
name
,
&
lex
->
create_info
,
&
lex
->
create_info
,
tables
,
lex
->
create_list
,
tables
,
lex
->
create_list
,
...
@@ -2716,7 +2720,7 @@ unsent_create_error:
...
@@ -2716,7 +2720,7 @@ unsent_create_error:
if
(
check_db_used
(
thd
,
tables
)
||
if
(
check_db_used
(
thd
,
tables
)
||
check_table_access
(
thd
,
SELECT_ACL
|
INSERT_ACL
,
tables
,
0
))
check_table_access
(
thd
,
SELECT_ACL
|
INSERT_ACL
,
tables
,
0
))
goto
error
;
/* purecov: inspected */
goto
error
;
/* purecov: inspected */
thd
->
slow_command
=
TRUE
;
thd
->
enable_slow_log
=
opt_log_slow_admin_statements
;
res
=
mysql_repair_table
(
thd
,
tables
,
&
lex
->
check_opt
);
res
=
mysql_repair_table
(
thd
,
tables
,
&
lex
->
check_opt
);
/* ! we write after unlocking the table */
/* ! we write after unlocking the table */
if
(
!
res
&&
!
lex
->
no_write_to_binlog
)
if
(
!
res
&&
!
lex
->
no_write_to_binlog
)
...
@@ -2736,7 +2740,7 @@ unsent_create_error:
...
@@ -2736,7 +2740,7 @@ unsent_create_error:
if
(
check_db_used
(
thd
,
tables
)
||
if
(
check_db_used
(
thd
,
tables
)
||
check_table_access
(
thd
,
SELECT_ACL
|
EXTRA_ACL
,
tables
,
0
))
check_table_access
(
thd
,
SELECT_ACL
|
EXTRA_ACL
,
tables
,
0
))
goto
error
;
/* purecov: inspected */
goto
error
;
/* purecov: inspected */
thd
->
slow_command
=
TRUE
;
thd
->
enable_slow_log
=
opt_log_slow_admin_statements
;
res
=
mysql_check_table
(
thd
,
tables
,
&
lex
->
check_opt
);
res
=
mysql_check_table
(
thd
,
tables
,
&
lex
->
check_opt
);
break
;
break
;
}
}
...
@@ -2745,7 +2749,7 @@ unsent_create_error:
...
@@ -2745,7 +2749,7 @@ unsent_create_error:
if
(
check_db_used
(
thd
,
tables
)
||
if
(
check_db_used
(
thd
,
tables
)
||
check_table_access
(
thd
,
SELECT_ACL
|
INSERT_ACL
,
tables
,
0
))
check_table_access
(
thd
,
SELECT_ACL
|
INSERT_ACL
,
tables
,
0
))
goto
error
;
/* purecov: inspected */
goto
error
;
/* purecov: inspected */
thd
->
slow_command
=
TRUE
;
thd
->
enable_slow_log
=
opt_log_slow_admin_statements
;
res
=
mysql_analyze_table
(
thd
,
tables
,
&
lex
->
check_opt
);
res
=
mysql_analyze_table
(
thd
,
tables
,
&
lex
->
check_opt
);
/* ! we write after unlocking the table */
/* ! we write after unlocking the table */
if
(
!
res
&&
!
lex
->
no_write_to_binlog
)
if
(
!
res
&&
!
lex
->
no_write_to_binlog
)
...
@@ -2766,7 +2770,7 @@ unsent_create_error:
...
@@ -2766,7 +2770,7 @@ unsent_create_error:
if
(
check_db_used
(
thd
,
tables
)
||
if
(
check_db_used
(
thd
,
tables
)
||
check_table_access
(
thd
,
SELECT_ACL
|
INSERT_ACL
,
tables
,
0
))
check_table_access
(
thd
,
SELECT_ACL
|
INSERT_ACL
,
tables
,
0
))
goto
error
;
/* purecov: inspected */
goto
error
;
/* purecov: inspected */
thd
->
slow_command
=
TRUE
;
thd
->
enable_slow_log
=
opt_log_slow_admin_statements
;
res
=
(
specialflag
&
(
SPECIAL_SAFE_MODE
|
SPECIAL_NO_NEW_FUNC
))
?
res
=
(
specialflag
&
(
SPECIAL_SAFE_MODE
|
SPECIAL_NO_NEW_FUNC
))
?
mysql_recreate_table
(
thd
,
tables
,
1
)
:
mysql_recreate_table
(
thd
,
tables
,
1
)
:
mysql_optimize_table
(
thd
,
tables
,
&
lex
->
check_opt
);
mysql_optimize_table
(
thd
,
tables
,
&
lex
->
check_opt
);
...
...
sql/sql_prepare.cc
View file @
32734072
...
@@ -820,7 +820,8 @@ static bool insert_params_from_vars_with_log(Prepared_statement *stmt,
...
@@ -820,7 +820,8 @@ static bool insert_params_from_vars_with_log(Prepared_statement *stmt,
DBUG_ENTER
(
"insert_params_from_vars"
);
DBUG_ENTER
(
"insert_params_from_vars"
);
List_iterator
<
LEX_STRING
>
var_it
(
varnames
);
List_iterator
<
LEX_STRING
>
var_it
(
varnames
);
String
str
;
String
buf
;
const
String
*
val
;
uint32
length
=
0
;
uint32
length
=
0
;
if
(
query
->
copy
(
stmt
->
query
,
stmt
->
query_length
,
default_charset_info
))
if
(
query
->
copy
(
stmt
->
query
,
stmt
->
query_length
,
default_charset_info
))
DBUG_RETURN
(
1
);
DBUG_RETURN
(
1
);
...
@@ -831,32 +832,35 @@ static bool insert_params_from_vars_with_log(Prepared_statement *stmt,
...
@@ -831,32 +832,35 @@ static bool insert_params_from_vars_with_log(Prepared_statement *stmt,
varname
=
var_it
++
;
varname
=
var_it
++
;
if
(
get_var_with_binlog
(
stmt
->
thd
,
*
varname
,
&
entry
))
if
(
get_var_with_binlog
(
stmt
->
thd
,
*
varname
,
&
entry
))
DBUG_RETURN
(
1
);
DBUG_RETURN
(
1
);
DBUG_ASSERT
(
entry
);
if
(
param
->
set_from_user_var
(
stmt
->
thd
,
entry
))
if
(
param
->
set_from_user_var
(
stmt
->
thd
,
entry
))
DBUG_RETURN
(
1
);
DBUG_RETURN
(
1
);
/* Insert @'escaped-varname' instead of parameter in the query */
/* Insert @'escaped-varname' instead of parameter in the query */
char
*
buf
,
*
ptr
;
if
(
entry
)
str
.
length
(
0
);
{
if
(
str
.
reserve
(
entry
->
name
.
length
*
2
+
3
))
char
*
begin
,
*
ptr
;
DBUG_RETURN
(
1
);
buf
.
length
(
0
);
if
(
buf
.
reserve
(
entry
->
name
.
length
*
2
+
3
))
DBUG_RETURN
(
1
);
buf
=
str
.
c_ptr_quick
();
begin
=
ptr
=
buf
.
c_ptr_quick
();
ptr
=
buf
;
*
ptr
++=
'@'
;
*
ptr
++=
'@'
;
*
ptr
++=
'\''
;
*
ptr
++=
'\''
;
ptr
+=
escape_string_for_mysql
(
&
my_charset_utf8_general_ci
,
ptr
+=
ptr
,
entry
->
name
.
str
,
entry
->
name
.
length
);
escape_string_for_mysql
(
&
my_charset_utf8_general_ci
,
*
ptr
++=
'\''
;
ptr
,
entry
->
name
.
str
,
entry
->
name
.
length
);
buf
.
length
(
ptr
-
begin
);
*
ptr
++=
'\''
;
val
=
&
buf
;
str
.
length
(
ptr
-
buf
);
}
else
val
=
&
my_null_string
;
if
(
param
->
convert_str_value
(
stmt
->
thd
))
if
(
param
->
convert_str_value
(
stmt
->
thd
))
DBUG_RETURN
(
1
);
/* out of memory */
DBUG_RETURN
(
1
);
/* out of memory */
if
(
query
->
replace
(
param
->
pos_in_query
+
length
,
1
,
str
))
if
(
query
->
replace
(
param
->
pos_in_query
+
length
,
1
,
*
val
))
DBUG_RETURN
(
1
);
DBUG_RETURN
(
1
);
length
+=
str
.
length
()
-
1
;
length
+=
val
->
length
()
-
1
;
}
}
DBUG_RETURN
(
0
);
DBUG_RETURN
(
0
);
}
}
...
@@ -1558,6 +1562,13 @@ int mysql_stmt_prepare(THD *thd, char *packet, uint packet_length,
...
@@ -1558,6 +1562,13 @@ int mysql_stmt_prepare(THD *thd, char *packet, uint packet_length,
DBUG_PRINT
(
"prep_query"
,
(
"%s"
,
packet
));
DBUG_PRINT
(
"prep_query"
,
(
"%s"
,
packet
));
/*
If this is an SQLCOM_PREPARE, we also increase Com_prepare_sql.
However, it seems handy if com_stmt_prepare is increased always,
no matter what kind of prepare is processed.
*/
statistic_increment
(
com_stmt_prepare
,
&
LOCK_status
);
if
(
stmt
==
0
)
if
(
stmt
==
0
)
{
{
send_error
(
thd
,
ER_OUT_OF_RESOURCES
);
send_error
(
thd
,
ER_OUT_OF_RESOURCES
);
...
@@ -1596,7 +1607,7 @@ int mysql_stmt_prepare(THD *thd, char *packet, uint packet_length,
...
@@ -1596,7 +1607,7 @@ int mysql_stmt_prepare(THD *thd, char *packet, uint packet_length,
DBUG_RETURN
(
1
);
DBUG_RETURN
(
1
);
}
}
mysql_log
.
write
(
thd
,
COM_PREPARE
,
"[%lu] %s"
,
stmt
->
id
,
packet
);
mysql_log
.
write
(
thd
,
thd
->
command
,
"[%lu] %s"
,
stmt
->
id
,
packet
);
thd
->
current_arena
=
stmt
;
thd
->
current_arena
=
stmt
;
mysql_init_query
(
thd
,
(
uchar
*
)
thd
->
query
,
thd
->
query_length
);
mysql_init_query
(
thd
,
(
uchar
*
)
thd
->
query
,
thd
->
query_length
);
...
@@ -1763,6 +1774,7 @@ void mysql_stmt_execute(THD *thd, char *packet, uint packet_length)
...
@@ -1763,6 +1774,7 @@ void mysql_stmt_execute(THD *thd, char *packet, uint packet_length)
packet
+=
9
;
/* stmt_id + 5 bytes of flags */
packet
+=
9
;
/* stmt_id + 5 bytes of flags */
statistic_increment
(
com_stmt_execute
,
&
LOCK_status
);
if
(
!
(
stmt
=
find_prepared_statement
(
thd
,
stmt_id
,
"mysql_stmt_execute"
,
if
(
!
(
stmt
=
find_prepared_statement
(
thd
,
stmt_id
,
"mysql_stmt_execute"
,
SEND_ERROR
)))
SEND_ERROR
)))
DBUG_VOID_RETURN
;
DBUG_VOID_RETURN
;
...
@@ -1796,9 +1808,6 @@ void mysql_stmt_execute(THD *thd, char *packet, uint packet_length)
...
@@ -1796,9 +1808,6 @@ void mysql_stmt_execute(THD *thd, char *packet, uint packet_length)
if
(
stmt
->
param_count
&&
stmt
->
set_params_data
(
stmt
,
&
expanded_query
))
if
(
stmt
->
param_count
&&
stmt
->
set_params_data
(
stmt
,
&
expanded_query
))
goto
set_params_data_err
;
goto
set_params_data_err
;
#endif
#endif
mysql_log
.
write
(
thd
,
COM_EXECUTE
,
"[%lu] %s"
,
stmt
->
id
,
expanded_query
.
length
()
?
expanded_query
.
c_ptr
()
:
stmt
->
query
);
thd
->
protocol
=
&
thd
->
protocol_prep
;
// Switch to binary protocol
thd
->
protocol
=
&
thd
->
protocol_prep
;
// Switch to binary protocol
execute_stmt
(
thd
,
stmt
,
&
expanded_query
,
TRUE
);
execute_stmt
(
thd
,
stmt
,
&
expanded_query
,
TRUE
);
thd
->
protocol
=
&
thd
->
protocol_simple
;
// Use normal protocol
thd
->
protocol
=
&
thd
->
protocol_simple
;
// Use normal protocol
...
@@ -1827,6 +1836,8 @@ void mysql_sql_stmt_execute(THD *thd, LEX_STRING *stmt_name)
...
@@ -1827,6 +1836,8 @@ void mysql_sql_stmt_execute(THD *thd, LEX_STRING *stmt_name)
String
expanded_query
;
String
expanded_query
;
DBUG_ENTER
(
"mysql_sql_stmt_execute"
);
DBUG_ENTER
(
"mysql_sql_stmt_execute"
);
/* See comment for statistics_increment in mysql_stmt_prepare */
statistic_increment
(
com_stmt_execute
,
&
LOCK_status
);
if
(
!
(
stmt
=
(
Prepared_statement
*
)
thd
->
stmt_map
.
find_by_name
(
stmt_name
)))
if
(
!
(
stmt
=
(
Prepared_statement
*
)
thd
->
stmt_map
.
find_by_name
(
stmt_name
)))
{
{
my_error
(
ER_UNKNOWN_STMT_HANDLER
,
MYF
(
0
),
stmt_name
->
length
,
my_error
(
ER_UNKNOWN_STMT_HANDLER
,
MYF
(
0
),
stmt_name
->
length
,
...
@@ -1853,6 +1864,7 @@ void mysql_sql_stmt_execute(THD *thd, LEX_STRING *stmt_name)
...
@@ -1853,6 +1864,7 @@ void mysql_sql_stmt_execute(THD *thd, LEX_STRING *stmt_name)
my_error
(
ER_WRONG_ARGUMENTS
,
MYF
(
0
),
"EXECUTE"
);
my_error
(
ER_WRONG_ARGUMENTS
,
MYF
(
0
),
"EXECUTE"
);
send_error
(
thd
);
send_error
(
thd
);
}
}
thd
->
command
=
COM_EXECUTE
;
/* For nice messages in general log */
execute_stmt
(
thd
,
stmt
,
&
expanded_query
,
FALSE
);
execute_stmt
(
thd
,
stmt
,
&
expanded_query
,
FALSE
);
DBUG_VOID_RETURN
;
DBUG_VOID_RETURN
;
}
}
...
@@ -1887,6 +1899,7 @@ static void execute_stmt(THD *thd, Prepared_statement *stmt,
...
@@ -1887,6 +1899,7 @@ static void execute_stmt(THD *thd, Prepared_statement *stmt,
my_error
(
ER_OUTOFMEMORY
,
0
,
expanded_query
->
length
());
my_error
(
ER_OUTOFMEMORY
,
0
,
expanded_query
->
length
());
DBUG_VOID_RETURN
;
DBUG_VOID_RETURN
;
}
}
mysql_log
.
write
(
thd
,
thd
->
command
,
"[%lu] %s"
,
stmt
->
id
,
thd
->
query
);
/*
/*
At first execution of prepared statement we will perform logical
At first execution of prepared statement we will perform logical
transformations of the query tree (i.e. negations elimination).
transformations of the query tree (i.e. negations elimination).
...
@@ -1900,6 +1913,14 @@ static void execute_stmt(THD *thd, Prepared_statement *stmt,
...
@@ -1900,6 +1913,14 @@ static void execute_stmt(THD *thd, Prepared_statement *stmt,
thd
->
lex
->
unit
.
cleanup
();
thd
->
lex
->
unit
.
cleanup
();
if
(
!
(
specialflag
&
SPECIAL_NO_PRIOR
))
if
(
!
(
specialflag
&
SPECIAL_NO_PRIOR
))
my_pthread_setprio
(
pthread_self
(),
WAIT_PRIOR
);
my_pthread_setprio
(
pthread_self
(),
WAIT_PRIOR
);
/*
'start_time' is set in dispatch_command, but THD::query will
be freed when we return from this function. So let's log the slow
query here.
*/
log_slow_statement
(
thd
);
/* Prevent from second logging in the end of dispatch_command */
thd
->
enable_slow_log
=
FALSE
;
/* Free Items that were created during this execution of the PS. */
/* Free Items that were created during this execution of the PS. */
free_items
(
thd
->
free_list
);
free_items
(
thd
->
free_list
);
...
@@ -1941,6 +1962,7 @@ void mysql_stmt_reset(THD *thd, char *packet)
...
@@ -1941,6 +1962,7 @@ void mysql_stmt_reset(THD *thd, char *packet)
DBUG_ENTER
(
"mysql_stmt_reset"
);
DBUG_ENTER
(
"mysql_stmt_reset"
);
statistic_increment
(
com_stmt_reset
,
&
LOCK_status
);
if
(
!
(
stmt
=
find_prepared_statement
(
thd
,
stmt_id
,
"mysql_stmt_reset"
,
if
(
!
(
stmt
=
find_prepared_statement
(
thd
,
stmt_id
,
"mysql_stmt_reset"
,
SEND_ERROR
)))
SEND_ERROR
)))
DBUG_VOID_RETURN
;
DBUG_VOID_RETURN
;
...
@@ -1973,6 +1995,7 @@ void mysql_stmt_free(THD *thd, char *packet)
...
@@ -1973,6 +1995,7 @@ void mysql_stmt_free(THD *thd, char *packet)
DBUG_ENTER
(
"mysql_stmt_free"
);
DBUG_ENTER
(
"mysql_stmt_free"
);
statistic_increment
(
com_stmt_close
,
&
LOCK_status
);
if
(
!
(
stmt
=
find_prepared_statement
(
thd
,
stmt_id
,
"mysql_stmt_close"
,
if
(
!
(
stmt
=
find_prepared_statement
(
thd
,
stmt_id
,
"mysql_stmt_close"
,
DONT_SEND_ERROR
)))
DONT_SEND_ERROR
)))
DBUG_VOID_RETURN
;
DBUG_VOID_RETURN
;
...
@@ -2012,6 +2035,7 @@ void mysql_stmt_get_longdata(THD *thd, char *packet, ulong packet_length)
...
@@ -2012,6 +2035,7 @@ void mysql_stmt_get_longdata(THD *thd, char *packet, ulong packet_length)
DBUG_ENTER
(
"mysql_stmt_get_longdata"
);
DBUG_ENTER
(
"mysql_stmt_get_longdata"
);
statistic_increment
(
com_stmt_send_long_data
,
&
LOCK_status
);
#ifndef EMBEDDED_LIBRARY
#ifndef EMBEDDED_LIBRARY
/* Minimal size of long data packet is 6 bytes */
/* Minimal size of long data packet is 6 bytes */
if
((
ulong
)
(
packet_end
-
packet
)
<
MYSQL_LONG_DATA_HEADER
)
if
((
ulong
)
(
packet_end
-
packet
)
<
MYSQL_LONG_DATA_HEADER
)
...
@@ -2068,10 +2092,12 @@ Prepared_statement::Prepared_statement(THD *thd_arg)
...
@@ -2068,10 +2092,12 @@ Prepared_statement::Prepared_statement(THD *thd_arg)
*
last_error
=
'\0'
;
*
last_error
=
'\0'
;
}
}
void
Prepared_statement
::
setup_set_params
()
void
Prepared_statement
::
setup_set_params
()
{
{
/* Setup binary logging */
/* Setup binary logging */
if
(
mysql_bin_log
.
is_open
()
&&
is_update_query
(
lex
->
sql_command
))
if
(
mysql_bin_log
.
is_open
()
&&
is_update_query
(
lex
->
sql_command
)
||
mysql_log
.
is_open
()
||
mysql_slow_log
.
is_open
())
{
{
set_params_from_vars
=
insert_params_from_vars_with_log
;
set_params_from_vars
=
insert_params_from_vars_with_log
;
#ifndef EMBEDDED_LIBRARY
#ifndef EMBEDDED_LIBRARY
...
@@ -2091,6 +2117,7 @@ void Prepared_statement::setup_set_params()
...
@@ -2091,6 +2117,7 @@ void Prepared_statement::setup_set_params()
}
}
}
}
Prepared_statement
::~
Prepared_statement
()
Prepared_statement
::~
Prepared_statement
()
{
{
free_items
(
free_list
);
free_items
(
free_list
);
...
...
sql/sql_select.cc
View file @
32734072
...
@@ -28,6 +28,8 @@
...
@@ -28,6 +28,8 @@
#include <hash.h>
#include <hash.h>
#include <ft_global.h>
#include <ft_global.h>
typedef
uint32
cache_rec_length_type
;
const
char
*
join_type_str
[]
=
{
"UNKNOWN"
,
"system"
,
"const"
,
"eq_ref"
,
"ref"
,
const
char
*
join_type_str
[]
=
{
"UNKNOWN"
,
"system"
,
"const"
,
"eq_ref"
,
"ref"
,
"MAYBE_REF"
,
"ALL"
,
"range"
,
"index"
,
"fulltext"
,
"MAYBE_REF"
,
"ALL"
,
"range"
,
"index"
,
"fulltext"
,
"ref_or_null"
,
"unique_subquery"
,
"index_subquery"
"ref_or_null"
,
"unique_subquery"
,
"index_subquery"
...
@@ -8067,7 +8069,7 @@ used_blob_length(CACHE_FIELD **ptr)
...
@@ -8067,7 +8069,7 @@ used_blob_length(CACHE_FIELD **ptr)
static
bool
static
bool
store_record_in_cache
(
JOIN_CACHE
*
cache
)
store_record_in_cache
(
JOIN_CACHE
*
cache
)
{
{
ulong
length
;
cache_rec_length_type
length
;
uchar
*
pos
;
uchar
*
pos
;
CACHE_FIELD
*
copy
,
*
end_field
;
CACHE_FIELD
*
copy
,
*
end_field
;
bool
last_record
;
bool
last_record
;
...
@@ -8112,9 +8114,9 @@ store_record_in_cache(JOIN_CACHE *cache)
...
@@ -8112,9 +8114,9 @@ store_record_in_cache(JOIN_CACHE *cache)
end
>
str
&&
end
[
-
1
]
==
' '
;
end
>
str
&&
end
[
-
1
]
==
' '
;
end
--
)
;
end
--
)
;
length
=
(
uint
)
(
end
-
str
);
length
=
(
uint
)
(
end
-
str
);
memcpy
(
pos
+
sizeof
(
uint
),
str
,
length
);
memcpy
(
pos
+
sizeof
(
length
),
str
,
length
);
*
((
uint
*
)
pos
)
=
length
;
memcpy_fixed
(
pos
,
&
length
,
sizeof
(
length
))
;
pos
+=
length
+
sizeof
(
uint
);
pos
+=
length
+
sizeof
(
length
);
}
}
else
else
{
{
...
@@ -8148,7 +8150,7 @@ static void
...
@@ -8148,7 +8150,7 @@ static void
read_cached_record
(
JOIN_TAB
*
tab
)
read_cached_record
(
JOIN_TAB
*
tab
)
{
{
uchar
*
pos
;
uchar
*
pos
;
uint
length
;
cache_rec_length_type
length
;
bool
last_record
;
bool
last_record
;
CACHE_FIELD
*
copy
,
*
end_field
;
CACHE_FIELD
*
copy
,
*
end_field
;
...
@@ -8177,9 +8179,10 @@ read_cached_record(JOIN_TAB *tab)
...
@@ -8177,9 +8179,10 @@ read_cached_record(JOIN_TAB *tab)
{
{
if
(
copy
->
strip
)
if
(
copy
->
strip
)
{
{
memcpy
(
copy
->
str
,
pos
+
sizeof
(
uint
),
length
=
*
((
uint
*
)
pos
));
memcpy_fixed
(
&
length
,
pos
,
sizeof
(
length
));
memcpy
(
copy
->
str
,
pos
+
sizeof
(
length
),
length
);
memset
(
copy
->
str
+
length
,
' '
,
copy
->
length
-
length
);
memset
(
copy
->
str
+
length
,
' '
,
copy
->
length
-
length
);
pos
+=
sizeof
(
uint
)
+
length
;
pos
+=
sizeof
(
length
)
+
length
;
}
}
else
else
{
{
...
...
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