summaryrefslogtreecommitdiff
path: root/sql/sql_insert.cc
diff options
context:
space:
mode:
authorMarko Mäkelä <marko.makela@mariadb.com>2019-12-27 18:20:28 +0200
committerMarko Mäkelä <marko.makela@mariadb.com>2019-12-27 18:20:28 +0200
commit4c25e75ce766440694553e0baf03cc5c6e803fc3 (patch)
treef75cea6e472054b7a15466ea5e31c862ae9e77cc /sql/sql_insert.cc
parent4c57ab34d4852387da4ef8eac862045d1458de1e (diff)
parent808bc919eb94ac888f2014275b443ebdaf733ae5 (diff)
downloadmariadb-git-4c25e75ce766440694553e0baf03cc5c6e803fc3.tar.gz
Merge 10.3 into 10.4
Diffstat (limited to 'sql/sql_insert.cc')
-rw-r--r--sql/sql_insert.cc41
1 files changed, 11 insertions, 30 deletions
diff --git a/sql/sql_insert.cc b/sql/sql_insert.cc
index c8f4ac05efc..807dd94c6f0 100644
--- a/sql/sql_insert.cc
+++ b/sql/sql_insert.cc
@@ -2193,36 +2193,16 @@ public:
passed from connection thread to the handler thread.
*/
MDL_request grl_protection;
- my_thread_id orig_thread_id;
- void set_default_user()
- {
- thd.security_ctx->user=(char*) delayed_user;
- thd.security_ctx->host=(char*) my_localhost;
- thd.security_ctx->ip= NULL;
- thd.query_id= 0;
- thd.thread_id= orig_thread_id;
- }
-
- void set_user_from_row(const delayed_row *r)
- {
- if (r)
- {
- thd.security_ctx->user= r->user;
- thd.security_ctx->host= r->host;
- thd.security_ctx->ip= r->ip;
- thd.query_id= r->query_id;
- thd.thread_id= r->thread_id;
- }
- }
-
Delayed_insert(SELECT_LEX *current_select)
:locks_in_memory(0), thd(next_thread_id()),
table(0),tables_in_use(0), stacked_inserts(0),
status(0), retry(0), handler_thread_initialized(FALSE), group_count(0)
{
DBUG_ENTER("Delayed_insert constructor");
- orig_thread_id= thd.thread_id;
- set_default_user();
+ thd.security_ctx->user=(char*) delayed_user;
+ thd.security_ctx->host=(char*) my_localhost;
+ thd.security_ctx->ip= NULL;
+ thd.query_id= 0;
strmake_buf(thd.security_ctx->priv_user, thd.security_ctx->user);
thd.current_tablenr=0;
thd.set_command(COM_DELAYED_INSERT);
@@ -3208,7 +3188,6 @@ pthread_handler_t handle_delayed_insert(void *arg)
if (di->tables_in_use && ! thd->lock &&
(!thd->killed || di->stacked_inserts))
{
- di->set_user_from_row(di->rows.head());
/*
Request for new delayed insert.
Lock the table, but avoid to be blocked by a global read lock.
@@ -3230,16 +3209,18 @@ pthread_handler_t handle_delayed_insert(void *arg)
{
delayed_row *row;
I_List_iterator<delayed_row> it(di->rows);
+ my_thread_id cur_thd= di->thd.thread_id;
+
while ((row= it++))
{
- if (di->thd.thread_id != row->thread_id)
+ if (cur_thd != row->thread_id)
{
- di->set_user_from_row(row);
- mysql_audit_external_lock(&di->thd, di->table->s, F_WRLCK);
+ mysql_audit_external_lock_ex(&di->thd, row->thread_id,
+ row->user, row->host, row->ip, row->query_id,
+ di->table->s, F_WRLCK);
+ cur_thd= row->thread_id;
}
}
- di->set_default_user();
-
if (di->handle_inserts())
{
/* Some fatal error */