mirror of
https://github.com/MariaDB/server.git
synced 2025-01-31 02:51:44 +01:00
5.6.40
This commit is contained in:
parent
3dfe148074
commit
5883c6905b
5 changed files with 54 additions and 32 deletions
|
@ -1,6 +1,6 @@
|
|||
/*****************************************************************************
|
||||
|
||||
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) 2009, Percona Inc.
|
||||
Copyright (c) 2012, Facebook Inc.
|
||||
|
@ -12225,6 +12225,7 @@ ha_innobase::start_stmt(
|
|||
case SQLCOM_INSERT:
|
||||
case SQLCOM_UPDATE:
|
||||
case SQLCOM_DELETE:
|
||||
case SQLCOM_REPLACE:
|
||||
init_table_handle_for_HANDLER();
|
||||
prebuilt->select_lock_type = LOCK_X;
|
||||
prebuilt->stored_select_lock_type = LOCK_X;
|
||||
|
|
|
@ -1,6 +1,6 @@
|
|||
/*****************************************************************************
|
||||
|
||||
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
|
||||
the terms of the GNU General Public License as published by the Free Software
|
||||
|
@ -4604,13 +4604,15 @@ processed_field:
|
|||
}
|
||||
|
||||
/** Get the auto-increment value of the table on commit.
|
||||
@param ha_alter_info Data used during in-place alter
|
||||
@param ctx In-place ALTER TABLE context
|
||||
@param altered_table MySQL table that is being altered
|
||||
@param old_table MySQL table as it is before the ALTER operation
|
||||
@return the next auto-increment value (0 if not present) */
|
||||
@param[in] ha_alter_info Data used during in-place alter
|
||||
@param[in,out] ctx In-place ALTER TABLE context
|
||||
return autoinc value in ctx->max_autoinc
|
||||
@param altered_table[in] MySQL table that is being altered
|
||||
@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))
|
||||
ulonglong
|
||||
bool
|
||||
commit_get_autoinc(
|
||||
/*===============*/
|
||||
Alter_inplace_info* ha_alter_info,
|
||||
|
@ -4618,23 +4620,28 @@ commit_get_autoinc(
|
|||
const TABLE* altered_table,
|
||||
const TABLE* old_table)
|
||||
{
|
||||
ulonglong max_autoinc;
|
||||
|
||||
DBUG_ENTER("commit_get_autoinc");
|
||||
|
||||
if (!altered_table->found_next_number_field) {
|
||||
/* There is no AUTO_INCREMENT column in the table
|
||||
after the ALTER operation. */
|
||||
max_autoinc = 0;
|
||||
ctx->max_autoinc = 0;
|
||||
} else if (ctx->add_autoinc != ULINT_UNDEFINED) {
|
||||
/* An AUTO_INCREMENT column was added. Get the last
|
||||
value from the sequence, which may be based on a
|
||||
supplied AUTO_INCREMENT value. */
|
||||
max_autoinc = ctx->sequence.last();
|
||||
ctx->max_autoinc = ctx->sequence.last();
|
||||
} else if ((ha_alter_info->handler_flags
|
||||
& Alter_inplace_info::CHANGE_CREATE_OPTION)
|
||||
&& (ha_alter_info->create_info->used_fields
|
||||
& 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
|
||||
rebuilt. Get the user-supplied value or the last value from the
|
||||
sequence. */
|
||||
|
@ -4647,7 +4654,8 @@ commit_get_autoinc(
|
|||
dict_index_t* index = dict_table_get_index_on_first_col(
|
||||
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);
|
||||
|
||||
|
@ -4656,8 +4664,8 @@ commit_get_autoinc(
|
|||
|
||||
if (err != DB_SUCCESS) {
|
||||
ut_ad(0);
|
||||
max_autoinc = 0;
|
||||
} else if (max_autoinc <= max_value_table) {
|
||||
ctx->max_autoinc = 0;
|
||||
} else if (ctx->max_autoinc <= max_value_table) {
|
||||
ulonglong col_max_value;
|
||||
ulonglong offset;
|
||||
|
||||
|
@ -4665,7 +4673,7 @@ commit_get_autoinc(
|
|||
old_table->found_next_number_field);
|
||||
|
||||
offset = ctx->prebuilt->autoinc_offset;
|
||||
max_autoinc = innobase_next_autoinc(
|
||||
ctx->max_autoinc = innobase_next_autoinc(
|
||||
max_value_table, 1, 1, offset,
|
||||
col_max_value);
|
||||
}
|
||||
|
@ -4675,11 +4683,11 @@ commit_get_autoinc(
|
|||
Read the old counter value from the table. */
|
||||
ut_ad(old_table->found_next_number_field);
|
||||
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);
|
||||
}
|
||||
|
||||
DBUG_RETURN(max_autoinc);
|
||||
DBUG_RETURN(false);
|
||||
}
|
||||
|
||||
/** Add or drop foreign key constraints to the data dictionary tables,
|
||||
|
@ -5660,8 +5668,13 @@ ha_innobase::commit_inplace_alter_table(
|
|||
|
||||
DBUG_ASSERT(new_clustered == ctx->need_rebuild());
|
||||
|
||||
ctx->max_autoinc = commit_get_autoinc(
|
||||
ha_alter_info, ctx, altered_table, table);
|
||||
if (commit_get_autoinc(ha_alter_info, ctx, altered_table,
|
||||
table)) {
|
||||
fail = true;
|
||||
my_error(ER_TABLESPACE_DISCARDED, MYF(0),
|
||||
table->s->table_name.str);
|
||||
goto rollback_trx;
|
||||
}
|
||||
|
||||
if (ctx->need_rebuild()) {
|
||||
ctx->tmp_name = dict_mem_create_temporary_tablename(
|
||||
|
@ -5693,6 +5706,8 @@ ha_innobase::commit_inplace_alter_table(
|
|||
#endif
|
||||
}
|
||||
|
||||
rollback_trx:
|
||||
|
||||
/* Commit or roll back the changes to the data dictionary. */
|
||||
|
||||
if (fail) {
|
||||
|
|
|
@ -1,6 +1,6 @@
|
|||
/*****************************************************************************
|
||||
|
||||
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
|
||||
the terms of the GNU General Public License as published by the Free Software
|
||||
|
@ -1827,12 +1827,6 @@ PageConverter::update_records(
|
|||
|
||||
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);
|
||||
|
||||
/* For the clustered index we have to adjust the BLOB
|
||||
|
@ -1934,6 +1928,10 @@ PageConverter::update_index_page(
|
|||
return(DB_SUCCESS);
|
||||
}
|
||||
|
||||
if (!page_is_leaf(block->frame)) {
|
||||
return (DB_SUCCESS);
|
||||
}
|
||||
|
||||
return(update_records(block));
|
||||
}
|
||||
|
||||
|
|
|
@ -1,6 +1,6 @@
|
|||
/*****************************************************************************
|
||||
|
||||
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
|
||||
the terms of the GNU General Public License as published by the Free Software
|
||||
|
@ -2720,7 +2720,15 @@ all_done:
|
|||
|
||||
while (!trx_is_interrupted(trx)) {
|
||||
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) {
|
||||
/* We are applying operations from a different
|
||||
|
|
|
@ -1,6 +1,6 @@
|
|||
/*****************************************************************************
|
||||
|
||||
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
|
||||
the terms of the GNU General Public License as published by the Free Software
|
||||
|
@ -1426,8 +1426,7 @@ error_exit:
|
|||
doc_ids difference should not exceed
|
||||
FTS_DOC_ID_MAX_STEP value. */
|
||||
|
||||
if (next_doc_id > 1
|
||||
&& doc_id - next_doc_id >= FTS_DOC_ID_MAX_STEP) {
|
||||
if (doc_id - next_doc_id >= FTS_DOC_ID_MAX_STEP) {
|
||||
fprintf(stderr,
|
||||
"InnoDB: Doc ID " UINT64PF " is too"
|
||||
" big. Its difference with largest"
|
||||
|
@ -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)) {
|
||||
err = fts_rename_aux_tables(table, new_name, trx);
|
||||
if (err != DB_TABLE_NOT_FOUND) {
|
||||
|
|
Loading…
Add table
Reference in a new issue