Commit a009a4e5 authored by Konstantin Osipov's avatar Konstantin Osipov

next-mr -> next-4284 merge:

Change the error code for ER_WARN_I_S_SKIPPED_TABLE, to not
upset the tests that rely on ER_SLAVE_CONVERSION_ERROR error
code = 1667.
Fix a merge bug with binlogging of CREATE TABLE (temporary tables).
parent 74542833
...@@ -2064,7 +2064,7 @@ select column_name from information_schema.columns ...@@ -2064,7 +2064,7 @@ select column_name from information_schema.columns
where table_schema='test' and table_name='t2'; where table_schema='test' and table_name='t2';
column_name column_name
Warnings: Warnings:
Warning 1652 Table 'test'.'t2' was skipped since its definition is being modified by concurrent DDL statement Warning 1684 Table 'test'.'t2' was skipped since its definition is being modified by concurrent DDL statement
# Finally, test for I_S query which does full-blown table open. # Finally, test for I_S query which does full-blown table open.
# #
# Query below should not be blocked. Warning message should be # Query below should not be blocked. Warning message should be
......
...@@ -6241,8 +6241,6 @@ ER_SLAVE_IGNORE_SERVER_IDS ...@@ -6241,8 +6241,6 @@ ER_SLAVE_IGNORE_SERVER_IDS
eng "The requested server id %d clashes with the slave startup option --replicate-same-server-id" eng "The requested server id %d clashes with the slave startup option --replicate-same-server-id"
ER_QUERY_CACHE_DISABLED ER_QUERY_CACHE_DISABLED
eng "Query cache is disabled; restart the server with query_cache_type=1 to enable it" eng "Query cache is disabled; restart the server with query_cache_type=1 to enable it"
ER_WARN_I_S_SKIPPED_TABLE
eng "Table '%s'.'%s' was skipped since its definition is being modified by concurrent DDL statement"
ER_SAME_NAME_PARTITION_FIELD ER_SAME_NAME_PARTITION_FIELD
eng "Duplicate partition field name '%-.192s'" eng "Duplicate partition field name '%-.192s'"
ER_PARTITION_COLUMN_LIST_ERROR ER_PARTITION_COLUMN_LIST_ERROR
...@@ -6313,3 +6311,5 @@ ER_WRONG_NATIVE_TABLE_STRUCTURE ...@@ -6313,3 +6311,5 @@ ER_WRONG_NATIVE_TABLE_STRUCTURE
ER_WRONG_PERFSCHEMA_USAGE ER_WRONG_PERFSCHEMA_USAGE
eng "Invalid performance_schema usage." eng "Invalid performance_schema usage."
ER_WARN_I_S_SKIPPED_TABLE
eng "Table '%s'.'%s' was skipped since its definition is being modified by concurrent DDL statement"
...@@ -5230,8 +5230,7 @@ bool mysql_create_like_table(THD* thd, TABLE_LIST* table, TABLE_LIST* src_table, ...@@ -5230,8 +5230,7 @@ bool mysql_create_like_table(THD* thd, TABLE_LIST* table, TABLE_LIST* src_table,
if ((res= mysql_create_table_no_lock(thd, table->db, table->table_name, if ((res= mysql_create_table_no_lock(thd, table->db, table->table_name,
&local_create_info, &local_alter_info, &local_create_info, &local_alter_info,
FALSE, 0)) || FALSE, 0)))
local_create_info.table_existed)
goto err; goto err;
/* /*
...@@ -5239,6 +5238,7 @@ bool mysql_create_like_table(THD* thd, TABLE_LIST* table, TABLE_LIST* src_table, ...@@ -5239,6 +5238,7 @@ bool mysql_create_like_table(THD* thd, TABLE_LIST* table, TABLE_LIST* src_table,
non-temporary table. non-temporary table.
*/ */
DBUG_ASSERT((create_info->options & HA_LEX_CREATE_TMP_TABLE) || DBUG_ASSERT((create_info->options & HA_LEX_CREATE_TMP_TABLE) ||
local_create_info.table_existed ||
thd->mdl_context.is_lock_owner(MDL_key::TABLE, table->db, thd->mdl_context.is_lock_owner(MDL_key::TABLE, table->db,
table->table_name, table->table_name,
MDL_EXCLUSIVE)); MDL_EXCLUSIVE));
...@@ -5271,33 +5271,42 @@ bool mysql_create_like_table(THD* thd, TABLE_LIST* table, TABLE_LIST* src_table, ...@@ -5271,33 +5271,42 @@ bool mysql_create_like_table(THD* thd, TABLE_LIST* table, TABLE_LIST* src_table,
String query(buf, sizeof(buf), system_charset_info); String query(buf, sizeof(buf), system_charset_info);
query.length(0); // Have to zero it since constructor doesn't query.length(0); // Have to zero it since constructor doesn't
Open_table_context ot_ctx_unused(thd); Open_table_context ot_ctx_unused(thd);
/* /*
Here we open the destination table, on which we already have The condition avoids a crash as described in BUG#48506. Other
exclusive metadata lock. This is needed for store_create_info() binlogging problems related to CREATE TABLE IF NOT EXISTS LIKE
to work. The table will be closed by close_thread_table() at when the existing object is a view will be solved by BUG 47442.
the end of this branch.
*/ */
if (open_table(thd, table, thd->mem_root, &ot_ctx_unused, if (!table->view)
MYSQL_OPEN_REOPEN)) {
goto err; /*
Here we open the destination table, on which we already have
exclusive metadata lock. This is needed for store_create_info()
to work. The table will be closed by close_thread_table() at
the end of this branch.
*/
if (open_table(thd, table, thd->mem_root, &ot_ctx_unused,
MYSQL_OPEN_REOPEN))
goto err;
int result __attribute__((unused))= int result __attribute__((unused))=
store_create_info(thd, table, &query, store_create_info(thd, table, &query,
create_info, FALSE /* show_database */); create_info, FALSE /* show_database */);
DBUG_ASSERT(result == 0); // store_create_info() always return 0 DBUG_ASSERT(result == 0); // store_create_info() always return 0
if (write_bin_log(thd, TRUE, query.ptr(), query.length())) if (write_bin_log(thd, TRUE, query.ptr(), query.length()))
goto err; goto err;
DBUG_ASSERT(thd->open_tables == table->table); DBUG_ASSERT(thd->open_tables == table->table);
mysql_mutex_lock(&LOCK_open); mysql_mutex_lock(&LOCK_open);
/* /*
When opening the table, we ignored the locked tables When opening the table, we ignored the locked tables
(MYSQL_OPEN_GET_NEW_TABLE). Now we can close the table without (MYSQL_OPEN_GET_NEW_TABLE). Now we can close the table without
risking to close some locked table. risking to close some locked table.
*/ */
close_thread_table(thd, &thd->open_tables); close_thread_table(thd, &thd->open_tables);
mysql_mutex_unlock(&LOCK_open); mysql_mutex_unlock(&LOCK_open);
}
} }
else // Case 1 else // Case 1
if (write_bin_log(thd, TRUE, thd->query(), thd->query_length())) if (write_bin_log(thd, TRUE, thd->query(), thd->query_length()))
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment