summaryrefslogtreecommitdiff
path: root/sql/log_event.cc
diff options
context:
space:
mode:
authorguilhem@mysql.com <>2004-09-07 14:57:54 +0200
committerguilhem@mysql.com <>2004-09-07 14:57:54 +0200
commit168e4c9c6b476e7153860dc66ef8e18beabccd14 (patch)
tree790661e2d03e6fbacccd70957d8f9df8397563ee /sql/log_event.cc
parent491adcb589331ac08522fe36ffdbf8ebda867007 (diff)
downloadmariadb-git-168e4c9c6b476e7153860dc66ef8e18beabccd14.tar.gz
when we update thd->db in replication, it's safer to update thd->db_length too.
This does not fix any known bug, but is still a good idea.
Diffstat (limited to 'sql/log_event.cc')
-rw-r--r--sql/log_event.cc14
1 files changed, 10 insertions, 4 deletions
diff --git a/sql/log_event.cc b/sql/log_event.cc
index 5526795c9d1..f707eabebd5 100644
--- a/sql/log_event.cc
+++ b/sql/log_event.cc
@@ -1806,7 +1806,7 @@ int Query_log_event::exec_event(struct st_relay_log_info* rli)
{
int expected_error, actual_error= 0;
init_sql_alloc(&thd->mem_root, thd->variables.query_alloc_block_size,0);
- thd->db= (char*) rewrite_db(db);
+ thd->db= (char*) rewrite_db(db); // thd->db_length is set later if needed
/*
InnoDB internally stores the master log position it has processed so far;
@@ -1836,6 +1836,11 @@ int Query_log_event::exec_event(struct st_relay_log_info* rli)
{
thd->set_time((time_t)when);
thd->current_tablenr = 0;
+ /*
+ We cannot use db_len from event to fill thd->db_length, because
+ rewrite_db() may have changed db.
+ */
+ thd->db_length= thd->db ? strlen(thd->db) : 0;
thd->query_length= q_len;
thd->query= (char *) query;
VOID(pthread_mutex_lock(&LOCK_thread_count));
@@ -1930,7 +1935,7 @@ end:
VOID(pthread_mutex_lock(&LOCK_thread_count));
thd->db= 0; // prevent db from being freed
thd->query= 0; // just to be sure
- thd->query_length= 0;
+ thd->query_length= thd->db_length =0;
VOID(pthread_mutex_unlock(&LOCK_thread_count));
close_thread_tables(thd);
free_root(&thd->mem_root,MYF(MY_KEEP_PREALLOC));
@@ -1968,7 +1973,7 @@ int Load_log_event::exec_event(NET* net, struct st_relay_log_info* rli,
{
char *load_data_query= 0;
init_sql_alloc(&thd->mem_root, thd->variables.query_alloc_block_size, 0);
- thd->db= (char*) rewrite_db(db);
+ thd->db= (char*) rewrite_db(db); // thd->db_length is set later if needed
DBUG_ASSERT(thd->query == 0);
clear_all_errors(thd, rli);
@@ -2001,6 +2006,7 @@ int Load_log_event::exec_event(NET* net, struct st_relay_log_info* rli,
{
thd->set_time((time_t)when);
thd->current_tablenr = 0;
+ thd->db_length= thd->db ? strlen(thd->db) : 0;
VOID(pthread_mutex_lock(&LOCK_thread_count));
thd->query_id = query_id++;
VOID(pthread_mutex_unlock(&LOCK_thread_count));
@@ -2117,7 +2123,7 @@ Slave: load data infile on table '%s' at log position %s in log \
VOID(pthread_mutex_lock(&LOCK_thread_count));
thd->db= 0;
thd->query= 0;
- thd->query_length= 0;
+ thd->query_length= thd->db_length= 0;
VOID(pthread_mutex_unlock(&LOCK_thread_count));
close_thread_tables(thd);
if (load_data_query)