Commit b558abf4 authored by Marko Mäkelä's avatar Marko Mäkelä

Disable instant ADD/DROP/reorder if FULLTEXT INDEX exists

parent ba5168fd
...@@ -439,11 +439,17 @@ tt CREATE TABLE `tt` ( ...@@ -439,11 +439,17 @@ tt CREATE TABLE `tt` (
FULLTEXT KEY `ct` (`ct`) FULLTEXT KEY `ct` (`ct`)
) ENGINE=InnoDB DEFAULT CHARSET=latin1 ) ENGINE=InnoDB DEFAULT CHARSET=latin1
ALTER TABLE tt ADD COLUMN c CHAR(1) NOT NULL FIRST, LOCK=NONE; ALTER TABLE tt ADD COLUMN c CHAR(1) NOT NULL FIRST, LOCK=NONE;
ERROR 0A000: LOCK=NONE is not supported. Reason: InnoDB presently supports one FULLTEXT index creation at a time. Try LOCK=SHARED
ALTER TABLE tt ADD COLUMN c CHAR(1) NOT NULL, LOCK=NONE;
ERROR 0A000: LOCK=NONE is not supported. Reason: InnoDB presently supports one FULLTEXT index creation at a time. Try LOCK=SHARED
CREATE TABLE tu ( CREATE TABLE tu (
pk INT PRIMARY KEY, FTS_DOC_ID BIGINT UNSIGNED NOT NULL, t TEXT, pk INT PRIMARY KEY, FTS_DOC_ID BIGINT UNSIGNED NOT NULL, t TEXT,
FULLTEXT INDEX(t) FULLTEXT INDEX(t)
) ENGINE=InnoDB; ) ENGINE=InnoDB;
ALTER TABLE tu ADD COLUMN c CHAR(1) NOT NULL FIRST, LOCK=NONE; ALTER TABLE tu ADD COLUMN c CHAR(1) NOT NULL FIRST, LOCK=NONE;
ERROR 0A000: LOCK=NONE is not supported. Reason: InnoDB presently supports one FULLTEXT index creation at a time. Try LOCK=SHARED
ALTER TABLE tu ADD COLUMN c CHAR(1) NOT NULL, LOCK=NONE;
ERROR 0A000: LOCK=NONE is not supported. Reason: InnoDB presently supports one FULLTEXT index creation at a time. Try LOCK=SHARED
DROP TABLE tu; DROP TABLE tu;
CREATE TABLE tv ( CREATE TABLE tv (
pk INT PRIMARY KEY, FTS_DOC_ID BIGINT UNSIGNED NOT NULL, t TEXT, pk INT PRIMARY KEY, FTS_DOC_ID BIGINT UNSIGNED NOT NULL, t TEXT,
...@@ -451,6 +457,9 @@ UNIQUE INDEX FTS_DOC_ID_INDEX(FTS_DOC_ID), ...@@ -451,6 +457,9 @@ UNIQUE INDEX FTS_DOC_ID_INDEX(FTS_DOC_ID),
FULLTEXT INDEX(t) FULLTEXT INDEX(t)
) ENGINE=InnoDB; ) ENGINE=InnoDB;
ALTER TABLE tv ADD COLUMN c CHAR(1) NOT NULL FIRST, LOCK=NONE; ALTER TABLE tv ADD COLUMN c CHAR(1) NOT NULL FIRST, LOCK=NONE;
ERROR 0A000: LOCK=NONE is not supported. Reason: InnoDB presently supports one FULLTEXT index creation at a time. Try LOCK=SHARED
ALTER TABLE tv ADD COLUMN c CHAR(1) NOT NULL, LOCK=NONE;
ERROR 0A000: LOCK=NONE is not supported. Reason: InnoDB presently supports one FULLTEXT index creation at a time. Try LOCK=SHARED
DROP TABLE tv; DROP TABLE tv;
ALTER TABLE t1o CHANGE c1 dB_row_Id INT, ALGORITHM=COPY; ALTER TABLE t1o CHANGE c1 dB_row_Id INT, ALGORITHM=COPY;
ERROR 42000: Incorrect column name 'dB_row_Id' ERROR 42000: Incorrect column name 'dB_row_Id'
......
...@@ -193,13 +193,21 @@ ALGORITHM=INPLACE, LOCK=SHARED; ...@@ -193,13 +193,21 @@ ALGORITHM=INPLACE, LOCK=SHARED;
-- source suite/innodb/include/innodb_dict.inc -- source suite/innodb/include/innodb_dict.inc
SHOW CREATE TABLE tt; SHOW CREATE TABLE tt;
# Non-instant ADD COLUMN would require the table to be rebuilt.
--error ER_ALTER_OPERATION_NOT_SUPPORTED_REASON
ALTER TABLE tt ADD COLUMN c CHAR(1) NOT NULL FIRST, LOCK=NONE; ALTER TABLE tt ADD COLUMN c CHAR(1) NOT NULL FIRST, LOCK=NONE;
# This is still non-instant ADD COLUMN, because FTS_DOC_ID is hidden.
--error ER_ALTER_OPERATION_NOT_SUPPORTED_REASON
ALTER TABLE tt ADD COLUMN c CHAR(1) NOT NULL, LOCK=NONE;
CREATE TABLE tu ( CREATE TABLE tu (
pk INT PRIMARY KEY, FTS_DOC_ID BIGINT UNSIGNED NOT NULL, t TEXT, pk INT PRIMARY KEY, FTS_DOC_ID BIGINT UNSIGNED NOT NULL, t TEXT,
FULLTEXT INDEX(t) FULLTEXT INDEX(t)
) ENGINE=InnoDB; ) ENGINE=InnoDB;
--error ER_ALTER_OPERATION_NOT_SUPPORTED_REASON
ALTER TABLE tu ADD COLUMN c CHAR(1) NOT NULL FIRST, LOCK=NONE; ALTER TABLE tu ADD COLUMN c CHAR(1) NOT NULL FIRST, LOCK=NONE;
--error ER_ALTER_OPERATION_NOT_SUPPORTED_REASON
ALTER TABLE tu ADD COLUMN c CHAR(1) NOT NULL, LOCK=NONE;
DROP TABLE tu; DROP TABLE tu;
CREATE TABLE tv ( CREATE TABLE tv (
...@@ -207,7 +215,10 @@ CREATE TABLE tv ( ...@@ -207,7 +215,10 @@ CREATE TABLE tv (
UNIQUE INDEX FTS_DOC_ID_INDEX(FTS_DOC_ID), UNIQUE INDEX FTS_DOC_ID_INDEX(FTS_DOC_ID),
FULLTEXT INDEX(t) FULLTEXT INDEX(t)
) ENGINE=InnoDB; ) ENGINE=InnoDB;
--error ER_ALTER_OPERATION_NOT_SUPPORTED_REASON
ALTER TABLE tv ADD COLUMN c CHAR(1) NOT NULL FIRST, LOCK=NONE; ALTER TABLE tv ADD COLUMN c CHAR(1) NOT NULL FIRST, LOCK=NONE;
--error ER_ALTER_OPERATION_NOT_SUPPORTED_REASON
ALTER TABLE tv ADD COLUMN c CHAR(1) NOT NULL, LOCK=NONE;
DROP TABLE tv; DROP TABLE tv;
# DB_ROW_ID, DB_TRX_ID, DB_ROLL_PTR are reserved InnoDB system column names. # DB_ROW_ID, DB_TRX_ID, DB_ROLL_PTR are reserved InnoDB system column names.
......
...@@ -1239,7 +1239,12 @@ ha_innobase::check_if_supported_inplace_alter( ...@@ -1239,7 +1239,12 @@ ha_innobase::check_if_supported_inplace_alter(
} }
const bool supports_instant = m_prebuilt->table->supports_instant() const bool supports_instant = m_prebuilt->table->supports_instant()
&& instant_alter_column_possible(ha_alter_info, table); && instant_alter_column_possible(ha_alter_info, table)
#if 1 // FIXME: adjust fts_fetch_doc_from_rec() and friends, and remove this
&& !innobase_fulltext_exist(altered_table)
&& !innobase_fulltext_exist(table)
#endif
;
bool add_drop_v_cols = false; bool add_drop_v_cols = false;
...@@ -5694,8 +5699,11 @@ prepare_inplace_alter_table_dict( ...@@ -5694,8 +5699,11 @@ prepare_inplace_alter_table_dict(
if (ctx->need_rebuild() && user_table->supports_instant() if (ctx->need_rebuild() && user_table->supports_instant()
&& instant_alter_column_possible(ha_alter_info, old_table) && instant_alter_column_possible(ha_alter_info, old_table)
&& (!innobase_fulltext_exist(old_table) #if 1 // FIXME: adjust fts_fetch_doc_from_rec() and friends, and remove this
|| innobase_fulltext_exist(altered_table))) { && !innobase_fulltext_exist(altered_table)
&& !innobase_fulltext_exist(old_table)
#endif
) {
for (uint a = 0; a < ctx->num_to_add_index; a++) { for (uint a = 0; a < ctx->num_to_add_index; a++) {
ctx->add_index[a]->table = ctx->new_table; ctx->add_index[a]->table = ctx->new_table;
ctx->add_index[a] = dict_index_add_to_cache( ctx->add_index[a] = dict_index_add_to_cache(
......
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