Commit 60c790d6 authored by Marko Mäkelä's avatar Marko Mäkelä

Merge 10.1 into 10.2

parents 12614af1 a5e268a2
connect con1, localhost, root,,;
connection default;
CREATE TABLE t1 ENGINE=InnoDB SELECT * FROM seq_1_to_100000000;
connection con1;
KILL QUERY @id;
disconnect con1;
connection default;
ERROR 70100: Query execution was interrupted
CREATE TABLE t1 (a SERIAL) ENGINE=InnoDB;
DROP TABLE t1;
--source include/have_innodb.inc
--source include/have_sequence.inc
--source include/count_sessions.inc
let $ID= `SELECT @id := CONNECTION_ID()`;
connect (con1, localhost, root,,);
let $ignore= `SELECT @id := $ID`;
connection default;
send CREATE TABLE t1 ENGINE=InnoDB SELECT * FROM seq_1_to_100000000;
connection con1;
let $wait_condition=
select count(*) = 1 from information_schema.processlist
where state = 'Sending data'
and info = 'CREATE TABLE t1 ENGINE=InnoDB SELECT * FROM seq_1_to_100000000';
--source include/wait_condition.inc
KILL QUERY @id;
disconnect con1;
connection default;
--error ER_QUERY_INTERRUPTED
reap;
CREATE TABLE t1 (a SERIAL) ENGINE=InnoDB;
DROP TABLE t1;
--source include/wait_until_count_sessions.inc
...@@ -3382,7 +3382,9 @@ row_drop_table_for_mysql( ...@@ -3382,7 +3382,9 @@ row_drop_table_for_mysql(
calling btr_search_drop_page_hash_index() while we calling btr_search_drop_page_hash_index() while we
hold the InnoDB dictionary lock, we will drop any hold the InnoDB dictionary lock, we will drop any
adaptive hash index entries upfront. */ adaptive hash index entries upfront. */
bool immune = is_temp_name const bool immune = is_temp_name
|| create_failed
|| sqlcom == SQLCOM_CREATE_TABLE
|| strstr(table->name.m_name, "/FTS"); || strstr(table->name.m_name, "/FTS");
while (buf_LRU_drop_page_hash_for_tablespace(table)) { while (buf_LRU_drop_page_hash_for_tablespace(table)) {
......
...@@ -13146,11 +13146,12 @@ ha_innobase::delete_table( ...@@ -13146,11 +13146,12 @@ ha_innobase::delete_table(
++trx->will_lock; ++trx->will_lock;
trx->ddl = true; trx->ddl = true;
const int sqlcom = thd_sql_command(thd);
/* Drop the table in InnoDB */ /* Drop the table in InnoDB */
err = row_drop_table_for_mysql( err = row_drop_table_for_mysql(
norm_name, trx, thd_sql_command(thd) == SQLCOM_DROP_DB, norm_name, trx, sqlcom == SQLCOM_DROP_DB,
FALSE); sqlcom == SQLCOM_CREATE_TABLE /* CREATE TABLE ... SELECT */);
if (err == DB_TABLE_NOT_FOUND if (err == DB_TABLE_NOT_FOUND
&& innobase_get_lower_case_table_names() == 1) { && innobase_get_lower_case_table_names() == 1) {
...@@ -13180,8 +13181,9 @@ ha_innobase::delete_table( ...@@ -13180,8 +13181,9 @@ ha_innobase::delete_table(
#endif #endif
err = row_drop_table_for_mysql( err = row_drop_table_for_mysql(
par_case_name, trx, par_case_name, trx,
thd_sql_command(thd) == SQLCOM_DROP_DB, sqlcom == SQLCOM_DROP_DB,
FALSE); sqlcom == SQLCOM_CREATE_TABLE
/* CREATE TABLE ... SELECT */);
} }
} }
......
/***************************************************************************** /*****************************************************************************
Copyright (c) 2000, 2017, Oracle and/or its affiliates. All Rights Reserved. Copyright (c) 2000, 2017, Oracle and/or its affiliates. All Rights Reserved.
Copyright (c) 2017, MariaDB Corporation. Copyright (c) 2017, 2019, MariaDB Corporation.
This program is free software; you can redistribute it and/or modify it under This program is free software; you can redistribute it and/or modify it under
the terms of the GNU General Public License as published by the Free Software the terms of the GNU General Public License as published by the Free Software
...@@ -493,7 +493,7 @@ row_drop_table_for_mysql( ...@@ -493,7 +493,7 @@ row_drop_table_for_mysql(
const char* name, /*!< in: table name */ const char* name, /*!< in: table name */
trx_t* trx, /*!< in: dictionary transaction handle */ trx_t* trx, /*!< in: dictionary transaction handle */
bool drop_db,/*!< in: true=dropping whole database */ bool drop_db,/*!< in: true=dropping whole database */
ibool create_failed,/*!<in: TRUE=create table failed bool create_failed,/*!<in: TRUE=create table failed
because e.g. foreign key column because e.g. foreign key column
type mismatch. */ type mismatch. */
bool nonatomic = true) bool nonatomic = true)
......
...@@ -3893,7 +3893,7 @@ row_drop_table_for_mysql( ...@@ -3893,7 +3893,7 @@ row_drop_table_for_mysql(
const char* name, /*!< in: table name */ const char* name, /*!< in: table name */
trx_t* trx, /*!< in: transaction handle */ trx_t* trx, /*!< in: transaction handle */
bool drop_db,/*!< in: true=dropping whole database */ bool drop_db,/*!< in: true=dropping whole database */
ibool create_failed,/*!<in: TRUE=create table failed bool create_failed,/*!<in: TRUE=create table failed
because e.g. foreign key column because e.g. foreign key column
type mismatch. */ type mismatch. */
bool nonatomic) bool nonatomic)
...@@ -4233,12 +4233,13 @@ row_drop_table_for_mysql( ...@@ -4233,12 +4233,13 @@ row_drop_table_for_mysql(
calling btr_search_drop_page_hash_index() while we calling btr_search_drop_page_hash_index() while we
hold the InnoDB dictionary lock, we will drop any hold the InnoDB dictionary lock, we will drop any
adaptive hash index entries upfront. */ adaptive hash index entries upfront. */
const bool is_temp = dict_table_is_temporary(table) const bool immune = create_failed
|| dict_table_is_temporary(table)
|| strncmp(tablename_minus_db, tmp_file_prefix, || strncmp(tablename_minus_db, tmp_file_prefix,
tmp_file_prefix_length) tmp_file_prefix_length)
|| strncmp(tablename_minus_db, "FTS_", 4); || strncmp(tablename_minus_db, "FTS_", 4);
while (buf_LRU_drop_page_hash_for_tablespace(table)) { while (buf_LRU_drop_page_hash_for_tablespace(table)) {
if ((!is_temp && trx_is_interrupted(trx)) if ((!immune && trx_is_interrupted(trx))
|| srv_shutdown_state != SRV_SHUTDOWN_NONE) { || srv_shutdown_state != SRV_SHUTDOWN_NONE) {
err = DB_INTERRUPTED; err = DB_INTERRUPTED;
goto funct_exit; goto funct_exit;
......
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