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
62dacf08
Commit
62dacf08
authored
Jun 17, 2005
by
konstantin@mysql.com
Browse files
Options
Browse Files
Download
Plain Diff
Manual merge (4.1->5.0)
parents
ad223c9c
dcb0e65d
Changes
5
Hide whitespace changes
Inline
Side-by-side
Showing
5 changed files
with
106 additions
and
47 deletions
+106
-47
mysql-test/r/ps_grant.result
mysql-test/r/ps_grant.result
+1
-1
sql/mysqld.cc
sql/mysqld.cc
+22
-3
sql/sql_class.h
sql/sql_class.h
+8
-1
sql/sql_parse.cc
sql/sql_parse.cc
+23
-19
sql/sql_prepare.cc
sql/sql_prepare.cc
+52
-23
No files found.
mysql-test/r/ps_grant.result
View file @
62dacf08
...
...
@@ -90,5 +90,5 @@ drop user drop_user@localhost;
prepare stmt4 from ' show full processlist ';
execute stmt4;
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
deallocate prepare stmt4;
sql/mysqld.cc
View file @
62dacf08
...
...
@@ -326,6 +326,7 @@ ulong opt_ndb_nodeid;
my_bool
opt_readonly
,
use_temp_pool
,
relay_log_purge
;
my_bool
opt_sync_frm
,
opt_allow_suspicious_udfs
;
my_bool
opt_secure_auth
=
0
;
my_bool
opt_log_slow_admin_statements
=
0
;
my_bool
lower_case_file_system
=
0
;
my_bool
opt_large_pages
=
0
;
uint
opt_large_page_size
=
0
;
...
...
@@ -4333,7 +4334,8 @@ enum options_mysqld
OPT_AUTO_INCREMENT
,
OPT_AUTO_INCREMENT_OFFSET
,
OPT_ENABLE_LARGE_PAGES
,
OPT_TIMED_MUTEXES
,
OPT_OLD_STYLE_USER_LIMITS
OPT_OLD_STYLE_USER_LIMITS
,
OPT_LOG_SLOW_ADMIN_STATEMENTS
};
...
...
@@ -4658,7 +4660,7 @@ Disable with --skip-innodb-doublewrite.", (gptr*) &innobase_use_doublewrite,
"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
},
{
"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
,
0
,
GET_BOOL
,
NO_ARG
,
0
,
0
,
0
,
0
,
0
,
0
},
{
"log-short-format"
,
OPT_SHORT_LOG_FORMAT
,
...
...
@@ -4669,8 +4671,13 @@ Disable with --skip-innodb-doublewrite.", (gptr*) &innobase_use_doublewrite,
"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
,
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 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
,
0
,
0
,
0
,
0
,
0
,
0
},
{
"log-tc"
,
OPT_LOG_TC
,
...
...
@@ -5718,6 +5725,12 @@ struct show_var_st status_vars[]= {
{
"Com_show_warnings"
,
(
char
*
)
offsetof
(
STATUS_VAR
,
com_stat
[(
uint
)
SQLCOM_SHOW_WARNS
]),
SHOW_LONG_STATUS
},
{
"Com_slave_start"
,
(
char
*
)
offsetof
(
STATUS_VAR
,
com_stat
[(
uint
)
SQLCOM_SLAVE_START
]),
SHOW_LONG_STATUS
},
{
"Com_slave_stop"
,
(
char
*
)
offsetof
(
STATUS_VAR
,
com_stat
[(
uint
)
SQLCOM_SLAVE_STOP
]),
SHOW_LONG_STATUS
},
{
"Com_stmt_prepare"
,
(
char
*
)
offsetof
(
STATUS_VAR
,
com_stmt_prepare
),
SHOW_LONG
},
{
"Com_stmt_execute"
,
(
char
*
)
offsetof
(
STATUS_VAR
,
com_stmt_execute
),
SHOW_LONG
},
{
"Com_stmt_fetch"
,
(
char
*
)
offsetof
(
STATUS_VAR
,
com_stmt_fetch
),
SHOW_LONG
},
{
"Com_stmt_send_long_data"
,
(
char
*
)
offsetof
(
STATUS_VAR
,
com_stmt_send_long_data
),
SHOW_LONG
},
{
"Com_stmt_reset"
,
(
char
*
)
offsetof
(
STATUS_VAR
,
com_stmt_reset
),
SHOW_LONG
},
{
"Com_stmt_close"
,
(
char
*
)
offsetof
(
STATUS_VAR
,
com_stmt_close
),
SHOW_LONG
},
{
"Com_truncate"
,
(
char
*
)
offsetof
(
STATUS_VAR
,
com_stat
[(
uint
)
SQLCOM_TRUNCATE
]),
SHOW_LONG_STATUS
},
{
"Com_unlock_tables"
,
(
char
*
)
offsetof
(
STATUS_VAR
,
com_stat
[(
uint
)
SQLCOM_UNLOCK_TABLES
]),
SHOW_LONG_STATUS
},
{
"Com_update"
,
(
char
*
)
offsetof
(
STATUS_VAR
,
com_stat
[(
uint
)
SQLCOM_UPDATE
]),
SHOW_LONG_STATUS
},
...
...
@@ -6345,6 +6358,9 @@ get_one_option(int optid, const struct my_option *opt __attribute__((unused)),
case
(
int
)
OPT_SLOW_QUERY_LOG
:
opt_slow_log
=
1
;
break
;
case
(
int
)
OPT_LOG_SLOW_ADMIN_STATEMENTS
:
opt_log_slow_admin_statements
=
1
;
break
;
case
(
int
)
OPT_SKIP_NEW
:
opt_specialflag
|=
SPECIAL_NO_NEW_FUNC
;
delay_key_write_options
=
(
uint
)
DELAY_KEY_WRITE_NONE
;
...
...
@@ -6733,6 +6749,9 @@ static void get_options(int argc,char **argv)
if
(
opt_bdb
)
sql_print_warning
(
"this binary does not contain BDB storage engine"
);
#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.
...
...
sql/sql_class.h
View file @
62dacf08
...
...
@@ -631,6 +631,13 @@ typedef struct system_status_var
ulong
filesort_range_count
;
ulong
filesort_rows
;
ulong
filesort_scan_count
;
/* Ppepared statements and binary protocol */
ulong
com_stmt_prepare
;
ulong
com_stmt_execute
;
ulong
com_stmt_send_long_data
;
ulong
com_stmt_fetch
;
ulong
com_stmt_reset
;
ulong
com_stmt_close
;
double
last_query_cost
;
}
STATUS_VAR
;
...
...
@@ -1186,7 +1193,7 @@ class THD :public ilink,
bool
query_error
,
bootstrap
,
cleanup_done
;
bool
tmp_table_used
;
bool
charset_is_system_charset
,
charset_is_collation_connection
;
bool
slow_command
;
bool
enable_slow_log
;
/* enable slow log for current statement */
bool
no_trans_update
,
abort_on_warning
;
bool
got_warning
;
/* Set on call to push_warning() */
bool
no_warnings_for_error
;
/* no warnings on call to my_error() */
...
...
sql/sql_parse.cc
View file @
62dacf08
...
...
@@ -71,7 +71,6 @@ static void remove_escape(char *name);
static
void
refresh_status
(
void
);
static
bool
append_file_to_dir
(
THD
*
thd
,
const
char
**
filename_ptr
,
const
char
*
table_name
);
static
void
log_slow_query
(
THD
*
thd
);
const
char
*
any_db
=
"*any*"
;
// Special symbol for check_access
...
...
@@ -1508,10 +1507,10 @@ bool dispatch_command(enum enum_server_command command, THD *thd,
thd
->
command
=
command
;
/*
Commands which
will always take a long time should be marked with
th
is so that they will not get logged to the slow query log
Commands which
always take a long time are logged into
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
->
lex
->
sql_command
=
SQLCOM_END
;
/* to avoid confusing VIEW detectors */
thd
->
set_time
();
VOID
(
pthread_mutex_lock
(
&
LOCK_thread_count
));
...
...
@@ -1551,7 +1550,7 @@ bool dispatch_command(enum enum_server_command command, THD *thd,
uint
tbl_len
=
*
(
uchar
*
)
(
packet
+
db_len
+
1
);
statistic_increment
(
thd
->
status_var
.
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
);
tbl_name
=
strmake
(
db
,
packet
+
1
,
db_len
)
+
1
;
strmake
(
tbl_name
,
packet
+
db_len
+
2
,
tbl_len
);
...
...
@@ -1689,7 +1688,7 @@ bool dispatch_command(enum enum_server_command command, THD *thd,
#endif
ulong
length
=
(
ulong
)(
packet_end
-
packet
);
log_slow_
query
(
thd
);
log_slow_
statement
(
thd
);
/* Remove garbage at start of query */
while
(
my_isspace
(
thd
->
charset
(),
*
packet
)
&&
length
>
0
)
...
...
@@ -1858,7 +1857,7 @@ bool dispatch_command(enum enum_server_command command, THD *thd,
uint32
slave_server_id
;
statistic_increment
(
thd
->
status_var
.
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
))
break
;
...
...
@@ -2043,7 +2042,7 @@ bool dispatch_command(enum enum_server_command command, THD *thd,
if
(
thd
->
net
.
report_error
)
net_send_error
(
thd
);
log_slow_
query
(
thd
);
log_slow_
statement
(
thd
);
thd
->
proc_info
=
"cleaning up"
;
VOID
(
pthread_mutex_lock
(
&
LOCK_thread_count
));
// For process list
...
...
@@ -2059,13 +2058,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
;
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"
;
...
...
@@ -2520,6 +2522,8 @@ mysql_execute_command(THD *thd)
DBUG_PRINT
(
"info"
,
(
"DEALLOCATE PREPARE: %.*s
\n
"
,
lex
->
prepared_stmt_name
.
length
,
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
)))
{
thd
->
stmt_map
.
erase
(
stmt
);
...
...
@@ -2637,7 +2641,7 @@ mysql_execute_command(THD *thd)
check_table_access
(
thd
,
SELECT_ACL
,
all_tables
,
0
)
||
check_global_access
(
thd
,
FILE_ACL
))
goto
error
;
/* purecov: inspected */
thd
->
slow_command
=
TRUE
;
thd
->
enable_slow_log
=
opt_log_slow_admin_statements
;
res
=
mysql_backup_table
(
thd
,
first_table
);
break
;
...
...
@@ -2649,7 +2653,7 @@ mysql_execute_command(THD *thd)
check_table_access
(
thd
,
INSERT_ACL
,
all_tables
,
0
)
||
check_global_access
(
thd
,
FILE_ACL
))
goto
error
;
/* purecov: inspected */
thd
->
slow_command
=
TRUE
;
thd
->
enable_slow_log
=
opt_log_slow_admin_statements
;
res
=
mysql_restore_table
(
thd
,
first_table
);
break
;
}
...
...
@@ -2920,7 +2924,7 @@ mysql_execute_command(THD *thd)
DBUG_ASSERT
(
first_table
==
all_tables
&&
first_table
!=
0
);
if
(
check_one_table_access
(
thd
,
INDEX_ACL
,
all_tables
))
goto
error
;
/* purecov: inspected */
thd
->
slow_command
=
TRUE
;
thd
->
enable_slow_log
=
opt_log_slow_admin_statements
;
if
(
end_active_trans
(
thd
))
goto
error
;
else
...
...
@@ -3009,7 +3013,7 @@ mysql_execute_command(THD *thd)
goto
error
;
else
{
thd
->
slow_command
=
TRUE
;
thd
->
enable_slow_log
=
opt_log_slow_admin_statements
;
res
=
mysql_alter_table
(
thd
,
select_lex
->
db
,
lex
->
name
,
&
lex
->
create_info
,
first_table
,
lex
->
create_list
,
...
...
@@ -3108,7 +3112,7 @@ mysql_execute_command(THD *thd)
if
(
check_db_used
(
thd
,
all_tables
)
||
check_table_access
(
thd
,
SELECT_ACL
|
INSERT_ACL
,
all_tables
,
0
))
goto
error
;
/* purecov: inspected */
thd
->
slow_command
=
TRUE
;
thd
->
enable_slow_log
=
opt_log_slow_admin_statements
;
res
=
mysql_repair_table
(
thd
,
first_table
,
&
lex
->
check_opt
);
/* ! we write after unlocking the table */
if
(
!
res
&&
!
lex
->
no_write_to_binlog
)
...
...
@@ -3128,7 +3132,7 @@ mysql_execute_command(THD *thd)
if
(
check_db_used
(
thd
,
all_tables
)
||
check_table_access
(
thd
,
SELECT_ACL
|
EXTRA_ACL
,
all_tables
,
0
))
goto
error
;
/* purecov: inspected */
thd
->
slow_command
=
TRUE
;
thd
->
enable_slow_log
=
opt_log_slow_admin_statements
;
res
=
mysql_check_table
(
thd
,
first_table
,
&
lex
->
check_opt
);
break
;
}
...
...
@@ -3138,7 +3142,7 @@ mysql_execute_command(THD *thd)
if
(
check_db_used
(
thd
,
all_tables
)
||
check_table_access
(
thd
,
SELECT_ACL
|
INSERT_ACL
,
all_tables
,
0
))
goto
error
;
/* purecov: inspected */
thd
->
slow_command
=
TRUE
;
thd
->
enable_slow_log
=
opt_log_slow_admin_statements
;
res
=
mysql_analyze_table
(
thd
,
first_table
,
&
lex
->
check_opt
);
/* ! we write after unlocking the table */
if
(
!
res
&&
!
lex
->
no_write_to_binlog
)
...
...
@@ -3159,7 +3163,7 @@ mysql_execute_command(THD *thd)
if
(
check_db_used
(
thd
,
all_tables
)
||
check_table_access
(
thd
,
SELECT_ACL
|
INSERT_ACL
,
all_tables
,
0
))
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
))
?
mysql_recreate_table
(
thd
,
first_table
,
1
)
:
mysql_optimize_table
(
thd
,
first_table
,
&
lex
->
check_opt
);
...
...
sql/sql_prepare.cc
View file @
62dacf08
...
...
@@ -839,7 +839,8 @@ static bool insert_params_from_vars_with_log(Prepared_statement *stmt,
DBUG_ENTER
(
"insert_params_from_vars"
);
List_iterator
<
LEX_STRING
>
var_it
(
varnames
);
String
str
;
String
buf
;
const
String
*
val
;
uint32
length
=
0
;
if
(
query
->
copy
(
stmt
->
query
,
stmt
->
query_length
,
default_charset_info
))
DBUG_RETURN
(
1
);
...
...
@@ -850,32 +851,36 @@ static bool insert_params_from_vars_with_log(Prepared_statement *stmt,
varname
=
var_it
++
;
if
(
get_var_with_binlog
(
stmt
->
thd
,
*
varname
,
&
entry
))
DBUG_RETURN
(
1
);
DBUG_ASSERT
(
entry
!=
0
);
if
(
param
->
set_from_user_var
(
stmt
->
thd
,
entry
))
DBUG_RETURN
(
1
);
/* Insert @'escaped-varname' instead of parameter in the query */
char
*
buf
,
*
ptr
;
str
.
length
(
0
);
if
(
str
.
reserve
(
entry
->
name
.
length
*
2
+
3
))
DBUG_RETURN
(
1
);
if
(
entry
)
{
char
*
begin
,
*
ptr
;
buf
.
length
(
0
);
if
(
buf
.
reserve
(
entry
->
name
.
length
*
2
+
3
))
DBUG_RETURN
(
1
);
buf
=
str
.
c_ptr_quick
();
ptr
=
buf
;
*
ptr
++=
'@'
;
*
ptr
++=
'\''
;
ptr
+=
escape_string_for_mysql
(
&
my_charset_utf8_general_ci
,
ptr
,
0
,
entry
->
name
.
str
,
entry
->
name
.
length
);
*
ptr
++=
'\''
;
str
.
length
(
ptr
-
buf
);
begin
=
ptr
=
buf
.
c_ptr_quick
();
*
ptr
++=
'@'
;
*
ptr
++=
'\''
;
ptr
+=
escape_string_for_mysql
(
&
my_charset_utf8_general_ci
,
ptr
,
0
,
entry
->
name
.
str
,
entry
->
name
.
length
);
*
ptr
++=
'\''
;
buf
.
length
(
ptr
-
begin
);
val
=
&
buf
;
}
else
val
=
&
my_null_string
;
if
(
param
->
convert_str_value
(
stmt
->
thd
))
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
);
length
+=
str
.
length
()
-
1
;
length
+=
val
->
length
()
-
1
;
}
DBUG_RETURN
(
0
);
}
...
...
@@ -1706,6 +1711,13 @@ bool mysql_stmt_prepare(THD *thd, char *packet, uint packet_length,
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
)
DBUG_RETURN
(
TRUE
);
...
...
@@ -1738,7 +1750,7 @@ bool mysql_stmt_prepare(THD *thd, char *packet, uint packet_length,
DBUG_RETURN
(
TRUE
);
}
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
;
mysql_init_query
(
thd
,
(
uchar
*
)
thd
->
query
,
thd
->
query_length
);
...
...
@@ -1950,6 +1962,7 @@ void mysql_stmt_execute(THD *thd, char *packet, uint packet_length)
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"
)))
DBUG_VOID_RETURN
;
...
...
@@ -2024,10 +2037,7 @@ void mysql_stmt_execute(THD *thd, char *packet, uint packet_length)
my_error
(
ER_OUTOFMEMORY
,
0
,
expanded_query
.
length
());
goto
err
;
}
mysql_log
.
write
(
thd
,
COM_EXECUTE
,
"[%lu] %s"
,
stmt
->
id
,
expanded_query
.
length
()
?
expanded_query
.
c_ptr
()
:
stmt
->
query
);
mysql_log
.
write
(
thd
,
thd
->
command
,
"[%lu] %s"
,
stmt
->
id
,
thd
->
query
);
thd
->
protocol
=
&
thd
->
protocol_prep
;
// Switch to binary protocol
if
(
!
(
specialflag
&
SPECIAL_NO_PRIOR
))
...
...
@@ -2081,6 +2091,8 @@ void mysql_sql_stmt_execute(THD *thd, LEX_STRING *stmt_name)
DBUG_ENTER
(
"mysql_sql_stmt_execute"
);
DBUG_ASSERT
(
thd
->
free_list
==
NULL
);
/* See comment for statistic_increment in mysql_stmt_prepare */
statistic_increment
(
com_stmt_execute
,
&
LOCK_status
);
if
(
!
(
stmt
=
(
Prepared_statement
*
)
thd
->
stmt_map
.
find_by_name
(
stmt_name
)))
{
...
...
@@ -2105,6 +2117,7 @@ void mysql_sql_stmt_execute(THD *thd, LEX_STRING *stmt_name)
{
my_error
(
ER_WRONG_ARGUMENTS
,
MYF
(
0
),
"EXECUTE"
);
}
thd
->
command
=
COM_EXECUTE
;
/* For nice messages in general log */
execute_stmt
(
thd
,
stmt
,
&
expanded_query
);
DBUG_VOID_RETURN
;
}
...
...
@@ -2137,6 +2150,7 @@ static void execute_stmt(THD *thd, Prepared_statement *stmt,
my_error
(
ER_OUTOFMEMORY
,
MYF
(
0
),
expanded_query
->
length
());
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
transformations of the query tree (i.e. negations elimination).
...
...
@@ -2149,6 +2163,14 @@ static void execute_stmt(THD *thd, Prepared_statement *stmt,
mysql_execute_command
(
thd
);
if
(
!
(
specialflag
&
SPECIAL_NO_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
;
close_thread_tables
(
thd
);
// to close derived tables
cleanup_stmt_and_thd_after_use
(
stmt
,
thd
);
...
...
@@ -2180,6 +2202,7 @@ void mysql_stmt_fetch(THD *thd, char *packet, uint packet_length)
Prepared_statement
*
stmt
;
DBUG_ENTER
(
"mysql_stmt_fetch"
);
statistic_increment
(
com_stmt_fetch
,
&
LOCK_status
);
if
(
!
(
stmt
=
find_prepared_statement
(
thd
,
stmt_id
,
"mysql_stmt_fetch"
)))
DBUG_VOID_RETURN
;
...
...
@@ -2240,6 +2263,7 @@ void mysql_stmt_reset(THD *thd, char *packet)
Prepared_statement
*
stmt
;
DBUG_ENTER
(
"mysql_stmt_reset"
);
statistic_increment
(
com_stmt_reset
,
&
LOCK_status
);
if
(
!
(
stmt
=
find_prepared_statement
(
thd
,
stmt_id
,
"mysql_stmt_reset"
)))
DBUG_VOID_RETURN
;
...
...
@@ -2274,6 +2298,7 @@ void mysql_stmt_free(THD *thd, char *packet)
DBUG_ENTER
(
"mysql_stmt_free"
);
statistic_increment
(
com_stmt_close
,
&
LOCK_status
);
if
(
!
(
stmt
=
find_prepared_statement
(
thd
,
stmt_id
,
"mysql_stmt_close"
)))
DBUG_VOID_RETURN
;
...
...
@@ -2312,6 +2337,7 @@ void mysql_stmt_get_longdata(THD *thd, char *packet, ulong packet_length)
DBUG_ENTER
(
"mysql_stmt_get_longdata"
);
statistic_increment
(
com_stmt_send_long_data
,
&
LOCK_status
);
#ifndef EMBEDDED_LIBRARY
/* Minimal size of long data packet is 6 bytes */
if
((
ulong
)
(
packet_end
-
packet
)
<
MYSQL_LONG_DATA_HEADER
)
...
...
@@ -2368,10 +2394,12 @@ Prepared_statement::Prepared_statement(THD *thd_arg)
*
last_error
=
'\0'
;
}
void
Prepared_statement
::
setup_set_params
()
{
/* 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
;
#ifndef EMBEDDED_LIBRARY
...
...
@@ -2392,6 +2420,7 @@ void Prepared_statement::setup_set_params()
}
Prepared_statement
::~
Prepared_statement
()
{
if
(
cursor
)
...
...
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