Commit 5883c690 authored by Sergei Golubchik's avatar Sergei Golubchik

5.6.40

parent 3dfe1480
/***************************************************************************** /*****************************************************************************
Copyright (c) 2000, 2017, Oracle and/or its affiliates. All Rights Reserved. Copyright (c) 2000, 2018, Oracle and/or its affiliates. All Rights Reserved.
Copyright (c) 2008, 2009 Google Inc. Copyright (c) 2008, 2009 Google Inc.
Copyright (c) 2009, Percona Inc. Copyright (c) 2009, Percona Inc.
Copyright (c) 2012, Facebook Inc. Copyright (c) 2012, Facebook Inc.
...@@ -12225,6 +12225,7 @@ ha_innobase::start_stmt( ...@@ -12225,6 +12225,7 @@ ha_innobase::start_stmt(
case SQLCOM_INSERT: case SQLCOM_INSERT:
case SQLCOM_UPDATE: case SQLCOM_UPDATE:
case SQLCOM_DELETE: case SQLCOM_DELETE:
case SQLCOM_REPLACE:
init_table_handle_for_HANDLER(); init_table_handle_for_HANDLER();
prebuilt->select_lock_type = LOCK_X; prebuilt->select_lock_type = LOCK_X;
prebuilt->stored_select_lock_type = LOCK_X; prebuilt->stored_select_lock_type = LOCK_X;
......
/***************************************************************************** /*****************************************************************************
Copyright (c) 2005, 2017, Oracle and/or its affiliates. All Rights Reserved. Copyright (c) 2005, 2018, Oracle and/or its affiliates. All Rights Reserved.
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
...@@ -4604,13 +4604,15 @@ innobase_rename_columns_cache( ...@@ -4604,13 +4604,15 @@ innobase_rename_columns_cache(
} }
/** Get the auto-increment value of the table on commit. /** Get the auto-increment value of the table on commit.
@param ha_alter_info Data used during in-place alter @param[in] ha_alter_info Data used during in-place alter
@param ctx In-place ALTER TABLE context @param[in,out] ctx In-place ALTER TABLE context
@param altered_table MySQL table that is being altered return autoinc value in ctx->max_autoinc
@param old_table MySQL table as it is before the ALTER operation @param altered_table[in] MySQL table that is being altered
@return the next auto-increment value (0 if not present) */ @param old_table[in] MySQL table as it is before the ALTER operation
retval true Failure
@retval false Success*/
static MY_ATTRIBUTE((nonnull, warn_unused_result)) static MY_ATTRIBUTE((nonnull, warn_unused_result))
ulonglong bool
commit_get_autoinc( commit_get_autoinc(
/*===============*/ /*===============*/
Alter_inplace_info* ha_alter_info, Alter_inplace_info* ha_alter_info,
...@@ -4618,23 +4620,28 @@ commit_get_autoinc( ...@@ -4618,23 +4620,28 @@ commit_get_autoinc(
const TABLE* altered_table, const TABLE* altered_table,
const TABLE* old_table) const TABLE* old_table)
{ {
ulonglong max_autoinc;
DBUG_ENTER("commit_get_autoinc"); DBUG_ENTER("commit_get_autoinc");
if (!altered_table->found_next_number_field) { if (!altered_table->found_next_number_field) {
/* There is no AUTO_INCREMENT column in the table /* There is no AUTO_INCREMENT column in the table
after the ALTER operation. */ after the ALTER operation. */
max_autoinc = 0; ctx->max_autoinc = 0;
} else if (ctx->add_autoinc != ULINT_UNDEFINED) { } else if (ctx->add_autoinc != ULINT_UNDEFINED) {
/* An AUTO_INCREMENT column was added. Get the last /* An AUTO_INCREMENT column was added. Get the last
value from the sequence, which may be based on a value from the sequence, which may be based on a
supplied AUTO_INCREMENT value. */ supplied AUTO_INCREMENT value. */
max_autoinc = ctx->sequence.last(); ctx->max_autoinc = ctx->sequence.last();
} else if ((ha_alter_info->handler_flags } else if ((ha_alter_info->handler_flags
& Alter_inplace_info::CHANGE_CREATE_OPTION) & Alter_inplace_info::CHANGE_CREATE_OPTION)
&& (ha_alter_info->create_info->used_fields && (ha_alter_info->create_info->used_fields
& HA_CREATE_USED_AUTO)) { & HA_CREATE_USED_AUTO)) {
/* Check if the table is discarded */
if(dict_table_is_discarded(ctx->old_table)) {
DBUG_RETURN(true);
}
/* An AUTO_INCREMENT value was supplied, but the table was not /* An AUTO_INCREMENT value was supplied, but the table was not
rebuilt. Get the user-supplied value or the last value from the rebuilt. Get the user-supplied value or the last value from the
sequence. */ sequence. */
...@@ -4647,7 +4654,8 @@ commit_get_autoinc( ...@@ -4647,7 +4654,8 @@ commit_get_autoinc(
dict_index_t* index = dict_table_get_index_on_first_col( dict_index_t* index = dict_table_get_index_on_first_col(
ctx->old_table, autoinc_field->field_index); ctx->old_table, autoinc_field->field_index);
max_autoinc = ha_alter_info->create_info->auto_increment_value; ctx->max_autoinc =
ha_alter_info->create_info->auto_increment_value;
dict_table_autoinc_lock(ctx->old_table); dict_table_autoinc_lock(ctx->old_table);
...@@ -4656,8 +4664,8 @@ commit_get_autoinc( ...@@ -4656,8 +4664,8 @@ commit_get_autoinc(
if (err != DB_SUCCESS) { if (err != DB_SUCCESS) {
ut_ad(0); ut_ad(0);
max_autoinc = 0; ctx->max_autoinc = 0;
} else if (max_autoinc <= max_value_table) { } else if (ctx->max_autoinc <= max_value_table) {
ulonglong col_max_value; ulonglong col_max_value;
ulonglong offset; ulonglong offset;
...@@ -4665,7 +4673,7 @@ commit_get_autoinc( ...@@ -4665,7 +4673,7 @@ commit_get_autoinc(
old_table->found_next_number_field); old_table->found_next_number_field);
offset = ctx->prebuilt->autoinc_offset; offset = ctx->prebuilt->autoinc_offset;
max_autoinc = innobase_next_autoinc( ctx->max_autoinc = innobase_next_autoinc(
max_value_table, 1, 1, offset, max_value_table, 1, 1, offset,
col_max_value); col_max_value);
} }
...@@ -4675,11 +4683,11 @@ commit_get_autoinc( ...@@ -4675,11 +4683,11 @@ commit_get_autoinc(
Read the old counter value from the table. */ Read the old counter value from the table. */
ut_ad(old_table->found_next_number_field); ut_ad(old_table->found_next_number_field);
dict_table_autoinc_lock(ctx->old_table); dict_table_autoinc_lock(ctx->old_table);
max_autoinc = ctx->old_table->autoinc; ctx->max_autoinc = ctx->old_table->autoinc;
dict_table_autoinc_unlock(ctx->old_table); dict_table_autoinc_unlock(ctx->old_table);
} }
DBUG_RETURN(max_autoinc); DBUG_RETURN(false);
} }
/** Add or drop foreign key constraints to the data dictionary tables, /** Add or drop foreign key constraints to the data dictionary tables,
...@@ -5660,8 +5668,13 @@ ha_innobase::commit_inplace_alter_table( ...@@ -5660,8 +5668,13 @@ ha_innobase::commit_inplace_alter_table(
DBUG_ASSERT(new_clustered == ctx->need_rebuild()); DBUG_ASSERT(new_clustered == ctx->need_rebuild());
ctx->max_autoinc = commit_get_autoinc( if (commit_get_autoinc(ha_alter_info, ctx, altered_table,
ha_alter_info, ctx, altered_table, table); table)) {
fail = true;
my_error(ER_TABLESPACE_DISCARDED, MYF(0),
table->s->table_name.str);
goto rollback_trx;
}
if (ctx->need_rebuild()) { if (ctx->need_rebuild()) {
ctx->tmp_name = dict_mem_create_temporary_tablename( ctx->tmp_name = dict_mem_create_temporary_tablename(
...@@ -5693,6 +5706,8 @@ ha_innobase::commit_inplace_alter_table( ...@@ -5693,6 +5706,8 @@ ha_innobase::commit_inplace_alter_table(
#endif #endif
} }
rollback_trx:
/* Commit or roll back the changes to the data dictionary. */ /* Commit or roll back the changes to the data dictionary. */
if (fail) { if (fail) {
......
/***************************************************************************** /*****************************************************************************
Copyright (c) 2012, 2016, Oracle and/or its affiliates. All Rights Reserved. Copyright (c) 2012, 2018, Oracle and/or its affiliates. All Rights Reserved.
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
...@@ -1827,12 +1827,6 @@ PageConverter::update_records( ...@@ -1827,12 +1827,6 @@ PageConverter::update_records(
rec_t* rec = m_rec_iter.current(); rec_t* rec = m_rec_iter.current();
/* FIXME: Move out of the loop */
if (rec_get_status(rec) == REC_STATUS_NODE_PTR) {
break;
}
ibool deleted = rec_get_deleted_flag(rec, comp); ibool deleted = rec_get_deleted_flag(rec, comp);
/* For the clustered index we have to adjust the BLOB /* For the clustered index we have to adjust the BLOB
...@@ -1934,6 +1928,10 @@ PageConverter::update_index_page( ...@@ -1934,6 +1928,10 @@ PageConverter::update_index_page(
return(DB_SUCCESS); return(DB_SUCCESS);
} }
if (!page_is_leaf(block->frame)) {
return (DB_SUCCESS);
}
return(update_records(block)); return(update_records(block));
} }
......
/***************************************************************************** /*****************************************************************************
Copyright (c) 2011, 2016, Oracle and/or its affiliates. All Rights Reserved. Copyright (c) 2011, 2018, Oracle and/or its affiliates. All Rights Reserved.
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
...@@ -2720,7 +2720,15 @@ row_log_table_apply_ops( ...@@ -2720,7 +2720,15 @@ row_log_table_apply_ops(
while (!trx_is_interrupted(trx)) { while (!trx_is_interrupted(trx)) {
mrec = next_mrec; mrec = next_mrec;
ut_ad(mrec < mrec_end); ut_ad(mrec <= mrec_end);
if (mrec == mrec_end) {
/* We are at the end of the log.
Mark the replay all_done. */
if (has_index_lock) {
goto all_done;
}
}
if (!has_index_lock) { if (!has_index_lock) {
/* We are applying operations from a different /* We are applying operations from a different
......
/***************************************************************************** /*****************************************************************************
Copyright (c) 2000, 2017, Oracle and/or its affiliates. All Rights Reserved. Copyright (c) 2000, 2018, Oracle and/or its affiliates. All Rights Reserved.
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
...@@ -1426,8 +1426,7 @@ row_insert_for_mysql( ...@@ -1426,8 +1426,7 @@ row_insert_for_mysql(
doc_ids difference should not exceed doc_ids difference should not exceed
FTS_DOC_ID_MAX_STEP value. */ FTS_DOC_ID_MAX_STEP value. */
if (next_doc_id > 1 if (doc_id - next_doc_id >= FTS_DOC_ID_MAX_STEP) {
&& doc_id - next_doc_id >= FTS_DOC_ID_MAX_STEP) {
fprintf(stderr, fprintf(stderr,
"InnoDB: Doc ID " UINT64PF " is too" "InnoDB: Doc ID " UINT64PF " is too"
" big. Its difference with largest" " big. Its difference with largest"
...@@ -5086,7 +5085,8 @@ row_rename_table_for_mysql( ...@@ -5086,7 +5085,8 @@ row_rename_table_for_mysql(
} }
} }
if (dict_table_has_fts_index(table) if ((dict_table_has_fts_index(table)
|| DICT_TF2_FLAG_IS_SET(table, DICT_TF2_FTS_HAS_DOC_ID))
&& !dict_tables_have_same_db(old_name, new_name)) { && !dict_tables_have_same_db(old_name, new_name)) {
err = fts_rename_aux_tables(table, new_name, trx); err = fts_rename_aux_tables(table, new_name, trx);
if (err != DB_TABLE_NOT_FOUND) { if (err != DB_TABLE_NOT_FOUND) {
......
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