Merge 10.0 into 10.1

This commit is contained in:
Marko Mäkelä 2018-11-05 17:08:21 +02:00
commit bae21bfb5d
16 changed files with 102 additions and 152 deletions

View File

@ -1,6 +1,6 @@
/***************************************************************************** /*****************************************************************************
Copyright (c) 1996, 2018, Oracle and/or its affiliates. All Rights Reserved. Copyright (c) 1996, 2016, Oracle and/or its affiliates. All Rights Reserved.
Copyright (c) 2012, Facebook Inc. Copyright (c) 2012, Facebook Inc.
Copyright (c) 2013, 2018, MariaDB Corporation. Copyright (c) 2013, 2018, MariaDB Corporation.
@ -3381,10 +3381,7 @@ dict_foreign_find_index(
table, col_names, columns, n_cols, table, col_names, columns, n_cols,
index, types_idx, index, types_idx,
check_charsets, check_null, check_charsets, check_null,
error, err_col_no,err_index) error, err_col_no,err_index)) {
&& (!(index->online_status ==
ONLINE_INDEX_ABORTED_DROPPED
||index->online_status == ONLINE_INDEX_ABORTED))) {
if (error) { if (error) {
*error = DB_SUCCESS; *error = DB_SUCCESS;
} }

View File

@ -870,19 +870,19 @@ fts_drop_index(
err = fts_drop_index_tables(trx, index); err = fts_drop_index_tables(trx, index);
while (index->index_fts_syncing while (index->index_fts_syncing
&& !trx_is_interrupted(trx)) { && !trx_is_interrupted(trx)) {
DICT_BG_YIELD(trx); DICT_BG_YIELD(trx);
} }
fts_free(table); fts_free(table);
return(err); return(err);
} }
while (index->index_fts_syncing while (index->index_fts_syncing
&& !trx_is_interrupted(trx)) { && !trx_is_interrupted(trx)) {
DICT_BG_YIELD(trx); DICT_BG_YIELD(trx);
} }
current_doc_id = table->fts->cache->next_doc_id; current_doc_id = table->fts->cache->next_doc_id;
first_doc_id = table->fts->cache->first_doc_id; first_doc_id = table->fts->cache->first_doc_id;
@ -901,9 +901,9 @@ fts_drop_index(
if (index_cache != NULL) { if (index_cache != NULL) {
while (index->index_fts_syncing while (index->index_fts_syncing
&& !trx_is_interrupted(trx)) { && !trx_is_interrupted(trx)) {
DICT_BG_YIELD(trx); DICT_BG_YIELD(trx);
} }
if (index_cache->words) { if (index_cache->words) {
fts_words_free(index_cache->words); fts_words_free(index_cache->words);
rbt_free(index_cache->words); rbt_free(index_cache->words);

View File

@ -2357,11 +2357,6 @@ innobase_get_lower_case_table_names(void)
{ {
return(lower_case_table_names); return(lower_case_table_names);
} }
/** return one of the tmpdir path
@return tmpdir path*/
UNIV_INTERN
char*
innobase_mysql_tmpdir(void) { return (mysql_tmpdir); }
/** Create a temporary file in the location specified by the parameter /** Create a temporary file in the location specified by the parameter
path. If the path is null, then it will be created in tmpdir. path. If the path is null, then it will be created in tmpdir.
@ -12872,36 +12867,35 @@ innobase_rename_table(
row_mysql_lock_data_dictionary(trx); row_mysql_lock_data_dictionary(trx);
dict_table_t* table = NULL; dict_table_t* table = dict_table_open_on_name(norm_from, TRUE, FALSE,
table = dict_table_open_on_name(norm_from, TRUE, FALSE, DICT_ERR_IGNORE_NONE);
DICT_ERR_IGNORE_NONE);
/* Since DICT_BG_YIELD has sleep for 250 milliseconds, /* Since DICT_BG_YIELD has sleep for 250 milliseconds,
Convert lock_wait_timeout unit from second to 250 milliseconds */ Convert lock_wait_timeout unit from second to 250 milliseconds */
long int lock_wait_timeout = thd_lock_wait_timeout(thd) * 4; long int lock_wait_timeout = thd_lock_wait_timeout(thd) * 4;
if (table != NULL) { if (table != NULL) {
for (dict_index_t* index = dict_table_get_first_index(table); for (dict_index_t* index = dict_table_get_first_index(table);
index != NULL; index != NULL;
index = dict_table_get_next_index(index)) { index = dict_table_get_next_index(index)) {
if (index->type & DICT_FTS) { if (index->type & DICT_FTS) {
/* Found */ /* Found */
while (index->index_fts_syncing while (index->index_fts_syncing
&& !trx_is_interrupted(trx) && !trx_is_interrupted(trx)
&& (lock_wait_timeout--) > 0) { && (lock_wait_timeout--) > 0) {
DICT_BG_YIELD(trx); DICT_BG_YIELD(trx);
} }
} }
} }
dict_table_close(table, TRUE, FALSE); dict_table_close(table, TRUE, FALSE);
} }
/* FTS sync is in progress. We shall timeout this operation */ /* FTS sync is in progress. We shall timeout this operation */
if (lock_wait_timeout < 0) { if (lock_wait_timeout < 0) {
error = DB_LOCK_WAIT_TIMEOUT; error = DB_LOCK_WAIT_TIMEOUT;
row_mysql_unlock_data_dictionary(trx); row_mysql_unlock_data_dictionary(trx);
DBUG_RETURN(error); DBUG_RETURN(error);
} }
/* Transaction must be flagged as a locking transaction or it hasn't /* Transaction must be flagged as a locking transaction or it hasn't
been started yet. */ been started yet. */
@ -13056,14 +13050,12 @@ ha_innobase::rename_table(
my_error(ER_TABLE_EXISTS_ERROR, MYF(0), to); my_error(ER_TABLE_EXISTS_ERROR, MYF(0), to);
error = DB_ERROR; error = DB_ERROR;
} else if (error == DB_LOCK_WAIT_TIMEOUT) {
my_error(ER_LOCK_WAIT_TIMEOUT, MYF(0), to);
error = DB_LOCK_WAIT;
} }
else if (error == DB_LOCK_WAIT_TIMEOUT) {
my_error(ER_LOCK_WAIT_TIMEOUT, MYF(0), to);
error = DB_LOCK_WAIT;
}
DBUG_RETURN(convert_error_code_to_mysql(error, 0, NULL)); DBUG_RETURN(convert_error_code_to_mysql(error, 0, NULL));
} }

View File

@ -4283,23 +4283,11 @@ oom:
table. Either way, we should be seeing and table. Either way, we should be seeing and
reporting a bogus duplicate key error. */ reporting a bogus duplicate key error. */
dup_key = NULL; dup_key = NULL;
} else if (prebuilt->trx->error_key_num == 0) { } else {
DBUG_ASSERT(prebuilt->trx->error_key_num
< ha_alter_info->key_count);
dup_key = &ha_alter_info->key_info_buffer[ dup_key = &ha_alter_info->key_info_buffer[
prebuilt->trx->error_key_num]; prebuilt->trx->error_key_num];
} else {
/* Check if there is generated cluster index column */
if (ctx->num_to_add_index > ha_alter_info->key_count) {
DBUG_ASSERT(prebuilt->trx->error_key_num
<= ha_alter_info->key_count);
dup_key = &ha_alter_info->key_info_buffer[
prebuilt->trx->error_key_num - 1];
}
else {
DBUG_ASSERT(prebuilt->trx->error_key_num
< ha_alter_info->key_count);
dup_key = &ha_alter_info->key_info_buffer[
prebuilt->trx->error_key_num];
}
} }
print_keydup_error(altered_table, dup_key, MYF(0)); print_keydup_error(altered_table, dup_key, MYF(0));
break; break;
@ -5234,18 +5222,9 @@ commit_try_rebuild(
FTS_DOC_ID. */ FTS_DOC_ID. */
dup_key = NULL; dup_key = NULL;
} else { } else {
if (ctx->num_to_add_index > ha_alter_info->key_count) { DBUG_ASSERT(err_key < ha_alter_info->key_count);
DBUG_ASSERT(err_key <= dup_key = &ha_alter_info
ha_alter_info->key_count); ->key_info_buffer[err_key];
dup_key = &ha_alter_info
->key_info_buffer[err_key - 1];
}
else {
DBUG_ASSERT(err_key <
ha_alter_info->key_count);
dup_key = &ha_alter_info
->key_info_buffer[err_key];
}
} }
print_keydup_error(altered_table, dup_key, MYF(0)); print_keydup_error(altered_table, dup_key, MYF(0));

View File

@ -1,6 +1,6 @@
/*********************************************************************** /***********************************************************************
Copyright (c) 1995, 2018, Oracle and/or its affiliates. All Rights Reserved. Copyright (c) 1995, 2017, Oracle and/or its affiliates. All Rights Reserved.
Copyright (c) 2009, Percona Inc. Copyright (c) 2009, Percona Inc.
Copyright (c) 2013, 2017, MariaDB Corporation. Copyright (c) 2013, 2017, MariaDB Corporation.
@ -1323,10 +1323,6 @@ os_file_get_status(
file can be opened in RW mode */ file can be opened in RW mode */
#if !defined(UNIV_HOTBACKUP) #if !defined(UNIV_HOTBACKUP)
/** return one of the tmpdir path
@return tmpdir path*/
char *innobase_mysql_tmpdir(void);
/** Create a temporary file in the location specified by the parameter /** Create a temporary file in the location specified by the parameter
path. If the path is null, then it will be created in tmpdir. path. If the path is null, then it will be created in tmpdir.
@param[in] path location for creating temporary file @param[in] path location for creating temporary file

View File

@ -1,6 +1,6 @@
/***************************************************************************** /*****************************************************************************
Copyright (c) 2005, 2018, Oracle and/or its affiliates. All Rights Reserved. Copyright (c) 2005, 2017, Oracle and/or its affiliates. All Rights Reserved.
Copyright (c) 2014, 2018, MariaDB Corporation. Copyright (c) 2014, 2018, 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
@ -3339,10 +3339,9 @@ row_merge_file_create_low(
file APIs, add instrumentation to register with file APIs, add instrumentation to register with
performance schema */ performance schema */
struct PSI_file_locker* locker = NULL; struct PSI_file_locker* locker = NULL;
PSI_file_locker_state state; PSI_file_locker_state state;
if (!path) { if (!path) {
path = innobase_mysql_tmpdir(); path = mysql_tmpdir;
} }
static const char label[] = "/Innodb Merge Temp File"; static const char label[] = "/Innodb Merge Temp File";
char* name = static_cast<char*>( char* name = static_cast<char*>(

View File

@ -1,6 +1,6 @@
/***************************************************************************** /*****************************************************************************
Copyright (c) 1997, 2018, Oracle and/or its affiliates. All Rights Reserved. Copyright (c) 1997, 2017, Oracle and/or its affiliates. All Rights Reserved.
Copyright (c) 2008, Google Inc. Copyright (c) 2008, Google Inc.
Copyright (c) 2015, 2018, MariaDB Corporation. Copyright (c) 2015, 2018, MariaDB Corporation.
@ -4721,7 +4721,7 @@ no_gap_lock:
prebuilt->new_rec_locks = 1; prebuilt->new_rec_locks = 1;
} }
err = DB_SUCCESS; err = DB_SUCCESS;
break; /* fall through */
case DB_SUCCESS: case DB_SUCCESS:
break; break;
case DB_LOCK_WAIT: case DB_LOCK_WAIT:

View File

@ -1,6 +1,6 @@
/***************************************************************************** /*****************************************************************************
Copyright (c) 1996, 2018, Oracle and/or its affiliates. All Rights Reserved. Copyright (c) 1996, 2017, Oracle and/or its affiliates. All Rights Reserved.
Copyright (c) 2012, Facebook Inc. Copyright (c) 2012, Facebook Inc.
Copyright (c) 2013, 2018, MariaDB Corporation. Copyright (c) 2013, 2018, MariaDB Corporation.
@ -3394,10 +3394,7 @@ dict_foreign_find_index(
table, col_names, columns, n_cols, table, col_names, columns, n_cols,
index, types_idx, index, types_idx,
check_charsets, check_null, check_charsets, check_null,
error, err_col_no,err_index) error, err_col_no,err_index)) {
&& (!(index->online_status ==
ONLINE_INDEX_ABORTED_DROPPED
||index->online_status == ONLINE_INDEX_ABORTED))) {
if (error) { if (error) {
*error = DB_SUCCESS; *error = DB_SUCCESS;
} }

View File

@ -870,19 +870,19 @@ fts_drop_index(
err = fts_drop_index_tables(trx, index); err = fts_drop_index_tables(trx, index);
while (index->index_fts_syncing while (index->index_fts_syncing
&& !trx_is_interrupted(trx)) { && !trx_is_interrupted(trx)) {
DICT_BG_YIELD(trx); DICT_BG_YIELD(trx);
} }
fts_free(table); fts_free(table);
return(err); return(err);
} }
while (index->index_fts_syncing while (index->index_fts_syncing
&& !trx_is_interrupted(trx)) { && !trx_is_interrupted(trx)) {
DICT_BG_YIELD(trx); DICT_BG_YIELD(trx);
} }
current_doc_id = table->fts->cache->next_doc_id; current_doc_id = table->fts->cache->next_doc_id;
first_doc_id = table->fts->cache->first_doc_id; first_doc_id = table->fts->cache->first_doc_id;
@ -901,9 +901,9 @@ fts_drop_index(
if (index_cache != NULL) { if (index_cache != NULL) {
while (index->index_fts_syncing while (index->index_fts_syncing
&& !trx_is_interrupted(trx)) { && !trx_is_interrupted(trx)) {
DICT_BG_YIELD(trx); DICT_BG_YIELD(trx);
} }
if (index_cache->words) { if (index_cache->words) {
fts_words_free(index_cache->words); fts_words_free(index_cache->words);
rbt_free(index_cache->words); rbt_free(index_cache->words);

View File

@ -106,8 +106,8 @@ extern int ftserror(const char* p);
typedef int (*fts_scanner)(YYSTYPE* val, yyscan_t yyscanner); typedef int (*fts_scanner)(YYSTYPE* val, yyscan_t yyscanner);
struct fts_lexer_t { struct fts_lexer_t {
fts_scanner scanner; fts_scanner scanner;
void* yyscanner; void* yyscanner;
}; };

View File

@ -52,8 +52,8 @@ extern int ftserror(const char* p);
typedef int (*fts_scanner)(YYSTYPE* val, yyscan_t yyscanner); typedef int (*fts_scanner)(YYSTYPE* val, yyscan_t yyscanner);
struct fts_lexer_struct { struct fts_lexer_struct {
fts_scanner scanner; fts_scanner scanner;
void* yyscanner; void* yyscanner;
}; };
%} %}

View File

@ -13464,36 +13464,35 @@ innobase_rename_table(
row_mysql_lock_data_dictionary(trx); row_mysql_lock_data_dictionary(trx);
dict_table_t* table = NULL; dict_table_t* table = dict_table_open_on_name(norm_from, TRUE, FALSE,
table = dict_table_open_on_name(norm_from, TRUE, FALSE, DICT_ERR_IGNORE_NONE);
DICT_ERR_IGNORE_NONE);
/* Since DICT_BG_YIELD has sleep for 250 milliseconds, /* Since DICT_BG_YIELD has sleep for 250 milliseconds,
Convert lock_wait_timeout unit from second to 250 milliseconds */ Convert lock_wait_timeout unit from second to 250 milliseconds */
long int lock_wait_timeout = thd_lock_wait_timeout(thd) * 4; long int lock_wait_timeout = thd_lock_wait_timeout(thd) * 4;
if (table != NULL) { if (table != NULL) {
for (dict_index_t* index = dict_table_get_first_index(table); for (dict_index_t* index = dict_table_get_first_index(table);
index != NULL; index != NULL;
index = dict_table_get_next_index(index)) { index = dict_table_get_next_index(index)) {
if (index->type & DICT_FTS) { if (index->type & DICT_FTS) {
/* Found */ /* Found */
while (index->index_fts_syncing while (index->index_fts_syncing
&& !trx_is_interrupted(trx) && !trx_is_interrupted(trx)
&& (lock_wait_timeout--) > 0) { && (lock_wait_timeout--) > 0) {
DICT_BG_YIELD(trx); DICT_BG_YIELD(trx);
} }
} }
} }
dict_table_close(table, TRUE, FALSE); dict_table_close(table, TRUE, FALSE);
} }
/* FTS sync is in progress. We shall timeout this operation */ /* FTS sync is in progress. We shall timeout this operation */
if (lock_wait_timeout < 0) { if (lock_wait_timeout < 0) {
error = DB_LOCK_WAIT_TIMEOUT; error = DB_LOCK_WAIT_TIMEOUT;
row_mysql_unlock_data_dictionary(trx); row_mysql_unlock_data_dictionary(trx);
DBUG_RETURN(error); DBUG_RETURN(error);
} }
/* Transaction must be flagged as a locking transaction or it hasn't /* Transaction must be flagged as a locking transaction or it hasn't
been started yet. */ been started yet. */
@ -13659,12 +13658,6 @@ ha_innobase::rename_table(
error = DB_LOCK_WAIT; error = DB_LOCK_WAIT;
} }
else if (error == DB_LOCK_WAIT_TIMEOUT) {
my_error(ER_LOCK_WAIT_TIMEOUT, MYF(0), to);
error = DB_LOCK_WAIT;
}
DBUG_RETURN(convert_error_code_to_mysql(error, 0, NULL)); DBUG_RETURN(convert_error_code_to_mysql(error, 0, NULL));
} }

View File

@ -525,7 +525,7 @@ dtype_get_fixed_size_low(
return(0); return(0);
} }
#endif /* UNIV_DEBUG */ #endif /* UNIV_DEBUG */
// fallthrough /* fall through */
case DATA_CHAR: case DATA_CHAR:
case DATA_FIXBINARY: case DATA_FIXBINARY:
case DATA_INT: case DATA_INT:
@ -603,7 +603,7 @@ dtype_get_min_size_low(
return(0); return(0);
} }
#endif /* UNIV_DEBUG */ #endif /* UNIV_DEBUG */
// fallthrough /* fall through */
case DATA_CHAR: case DATA_CHAR:
case DATA_FIXBINARY: case DATA_FIXBINARY:
case DATA_INT: case DATA_INT:

View File

@ -378,7 +378,8 @@ dict_mem_table_add_col(
const char* name, /*!< in: column name, or NULL */ const char* name, /*!< in: column name, or NULL */
ulint mtype, /*!< in: main datatype */ ulint mtype, /*!< in: main datatype */
ulint prtype, /*!< in: precise type */ ulint prtype, /*!< in: precise type */
ulint len); /*!< in: precision */ ulint len) /*!< in: precision */
MY_ATTRIBUTE((nonnull(1)));
/**********************************************************************//** /**********************************************************************//**
Renames a column of a table in the data dictionary cache. */ Renames a column of a table in the data dictionary cache. */
UNIV_INTERN UNIV_INTERN

View File

@ -1,6 +1,6 @@
/***************************************************************************** /*****************************************************************************
Copyright (c) 2012, 2018, Oracle and/or its affiliates. All Rights Reserved. Copyright (c) 2012, 2016, Oracle and/or its affiliates. All Rights Reserved.
Copyright (c) 2015, 2018, MariaDB Corporation. Copyright (c) 2015, 2018, 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
@ -1949,11 +1949,7 @@ PageConverter::update_index_page(
return(DB_SUCCESS); return(DB_SUCCESS);
} }
if (!page_is_leaf(block->frame)) { return page_is_leaf(block->frame) ? update_records(block) : DB_SUCCESS;
return (DB_SUCCESS);
}
return(update_records(block));
} }
/** /**
@ -4239,4 +4235,3 @@ row_import_for_mysql(
return(row_import_cleanup(prebuilt, trx, err)); return(row_import_cleanup(prebuilt, trx, err));
} }

View File

@ -2738,7 +2738,8 @@ row_sel_field_store_in_mysql_format_func(
case DATA_SYS: case DATA_SYS:
/* These column types should never be shipped to MySQL. */ /* These column types should never be shipped to MySQL. */
ut_ad(0); ut_ad(0);
break; /* fall through */
case DATA_CHAR: case DATA_CHAR:
case DATA_FIXBINARY: case DATA_FIXBINARY:
case DATA_FLOAT: case DATA_FLOAT:
@ -4729,7 +4730,7 @@ no_gap_lock:
prebuilt->new_rec_locks = 1; prebuilt->new_rec_locks = 1;
} }
err = DB_SUCCESS; err = DB_SUCCESS;
break; /* fall through */
case DB_SUCCESS: case DB_SUCCESS:
break; break;
case DB_LOCK_WAIT: case DB_LOCK_WAIT: