mirror of
https://github.com/MariaDB/server.git
synced 2025-01-16 03:52:35 +01:00
Merge 10.3 into 10.4
This commit is contained in:
commit
aa4b2c1509
15 changed files with 90 additions and 58 deletions
|
@ -512,7 +512,8 @@ datafile_open(const char *file, datafile_cur_t *cursor, uint thread_n)
|
|||
5.6+. We want to make "local" copies for the backup. */
|
||||
strncpy(cursor->rel_path,
|
||||
xb_get_relative_path(cursor->abs_path, FALSE),
|
||||
sizeof(cursor->rel_path));
|
||||
(sizeof cursor->rel_path) - 1);
|
||||
cursor->rel_path[(sizeof cursor->rel_path) - 1] = '\0';
|
||||
|
||||
cursor->file = os_file_create_simple_no_error_handling(
|
||||
0, cursor->abs_path,
|
||||
|
|
|
@ -123,7 +123,8 @@ void encryption_plugin_backup_init(MYSQL *mysql)
|
|||
|
||||
/* Required to load the plugin later.*/
|
||||
add_to_plugin_load_list(plugin_load.c_str());
|
||||
strncpy(opt_plugin_dir, dir, FN_REFLEN);
|
||||
strncpy(opt_plugin_dir, dir, FN_REFLEN - 1);
|
||||
opt_plugin_dir[FN_REFLEN - 1] = '\0';
|
||||
|
||||
oss << "plugin_dir=" << '"' << dir << '"' << std::endl;
|
||||
|
||||
|
@ -193,7 +194,10 @@ void encryption_plugin_prepare_init(int argc, char **argv)
|
|||
add_to_plugin_load_list(plugin_load.c_str());
|
||||
|
||||
if (xb_plugin_dir)
|
||||
strncpy(opt_plugin_dir, xb_plugin_dir, FN_REFLEN);
|
||||
{
|
||||
strncpy(opt_plugin_dir, xb_plugin_dir, FN_REFLEN - 1);
|
||||
opt_plugin_dir[FN_REFLEN - 1] = '\0';
|
||||
}
|
||||
|
||||
char **new_argv = new char *[argc + 1];
|
||||
new_argv[0] = XTRABACKUP_EXE;
|
||||
|
|
|
@ -147,7 +147,8 @@ xb_fil_cur_open(
|
|||
|
||||
cursor->space_id = node->space->id;
|
||||
|
||||
strncpy(cursor->abs_path, node->name, sizeof(cursor->abs_path));
|
||||
strncpy(cursor->abs_path, node->name, (sizeof cursor->abs_path) - 1);
|
||||
cursor->abs_path[(sizeof cursor->abs_path) - 1] = '\0';
|
||||
|
||||
/* Get the relative path for the destination tablespace name, i.e. the
|
||||
one that can be appended to the backup root directory. Non-system
|
||||
|
@ -155,7 +156,8 @@ xb_fil_cur_open(
|
|||
We want to make "local" copies for the backup. */
|
||||
strncpy(cursor->rel_path,
|
||||
xb_get_relative_path(cursor->abs_path, cursor->is_system()),
|
||||
sizeof(cursor->rel_path));
|
||||
(sizeof cursor->rel_path) - 1);
|
||||
cursor->rel_path[(sizeof cursor->rel_path) - 1] = '\0';
|
||||
|
||||
/* In the backup mode we should already have a tablespace handle created
|
||||
by fil_ibd_load() unless it is a system
|
||||
|
|
|
@ -2406,8 +2406,9 @@ check_if_skip_table(
|
|||
return(FALSE);
|
||||
}
|
||||
|
||||
strncpy(buf, dbname, FN_REFLEN);
|
||||
buf[tbname - 1 - dbname] = 0;
|
||||
strncpy(buf, dbname, FN_REFLEN - 1);
|
||||
buf[FN_REFLEN - 1] = '\0';
|
||||
buf[tbname - 1 - dbname] = '\0';
|
||||
|
||||
const skip_database_check_result skip_database =
|
||||
check_if_skip_database(buf);
|
||||
|
@ -2415,7 +2416,6 @@ check_if_skip_table(
|
|||
return (TRUE);
|
||||
}
|
||||
|
||||
buf[FN_REFLEN - 1] = '\0';
|
||||
buf[tbname - 1 - dbname] = '.';
|
||||
|
||||
/* Check if there's a suffix in the table name. If so, truncate it. We
|
||||
|
@ -4857,7 +4857,8 @@ xtrabackup_apply_delta(
|
|||
}
|
||||
dst_path[strlen(dst_path) - 6] = '\0';
|
||||
|
||||
strncpy(space_name, filename, FN_REFLEN);
|
||||
strncpy(space_name, filename, FN_REFLEN - 1);
|
||||
space_name[FN_REFLEN - 1] = '\0';
|
||||
space_name[strlen(space_name) - 6] = 0;
|
||||
|
||||
if (!get_meta_path(src_path, meta_path)) {
|
||||
|
|
|
@ -95,7 +95,7 @@ INFORMATION_SCHEMA.GLOBAL_STATUS
|
|||
WHERE
|
||||
VARIABLE_NAME='SLOW_QUERIES';
|
||||
Slow_queries_increment
|
||||
0
|
||||
1
|
||||
# Although this query is disallowed by log_slow_filter, it should still increment Slow_queries
|
||||
SET log_slow_filter=filesort;
|
||||
SELECT sleep(0.2) INTO @tmp FROM DUAL;
|
||||
|
@ -110,7 +110,7 @@ INFORMATION_SCHEMA.GLOBAL_STATUS
|
|||
WHERE
|
||||
VARIABLE_NAME='SLOW_QUERIES';
|
||||
Slow_queries_increment
|
||||
0
|
||||
1
|
||||
SET log_slow_filter=DEFAULT;
|
||||
SET @@long_query_time=default;
|
||||
SET GLOBAL slow_query_log= @org_slow_query_log;
|
||||
|
|
|
@ -7,3 +7,12 @@ DROP TABLE t1;
|
|||
CREATE TABLE t1(a VARCHAR(2) CHARACTER SET big5 COLLATE big5_chinese_ci,
|
||||
FULLTEXT(a)) ENGINE=<default_engine>;
|
||||
DROP TABLE t1;
|
||||
CREATE TABLE t1 (a SERIAL, t TEXT, FULLTEXT f1(t), FULLTEXT f2(t)) ENGINE=InnoDB;
|
||||
Warnings:
|
||||
Note 1831 Duplicate index `f2`. This is deprecated and will be disallowed in a future release
|
||||
INSERT INTO t1 (a,t) VALUES (1,'1'),(2,'1');
|
||||
ALTER TABLE t1 ADD COLUMN g TEXT GENERATED ALWAYS AS (t) VIRTUAL;
|
||||
DELETE FROM t1 WHERE a = 1;
|
||||
ALTER TABLE t1 DROP INDEX f1;
|
||||
INSERT INTO t1 (a,t) VALUES (1,'1');
|
||||
DROP TABLE t1;
|
||||
|
|
|
@ -35,3 +35,12 @@ FULLTEXT(a)) ENGINE=$default_engine;
|
|||
DROP TABLE t1;
|
||||
|
||||
# End of 5.1 tests
|
||||
|
||||
|
||||
CREATE TABLE t1 (a SERIAL, t TEXT, FULLTEXT f1(t), FULLTEXT f2(t)) ENGINE=InnoDB;
|
||||
INSERT INTO t1 (a,t) VALUES (1,'1'),(2,'1');
|
||||
ALTER TABLE t1 ADD COLUMN g TEXT GENERATED ALWAYS AS (t) VIRTUAL;
|
||||
DELETE FROM t1 WHERE a = 1;
|
||||
ALTER TABLE t1 DROP INDEX f1;
|
||||
INSERT INTO t1 (a,t) VALUES (1,'1');
|
||||
DROP TABLE t1;
|
||||
|
|
|
@ -5041,8 +5041,6 @@ public:
|
|||
|
||||
inline void prepare_logs_for_admin_command()
|
||||
{
|
||||
enable_slow_log&= !MY_TEST(variables.log_slow_disabled_statements &
|
||||
LOG_SLOW_DISABLE_ADMIN);
|
||||
query_plan_flags|= QPLAN_ADMIN;
|
||||
}
|
||||
|
||||
|
|
|
@ -2454,6 +2454,11 @@ dispatch_end:
|
|||
thd->packet.shrink(thd->variables.net_buffer_length); // Reclaim some memory
|
||||
|
||||
thd->reset_kill_query(); /* Ensure that killed_errmsg is released */
|
||||
/*
|
||||
LEX::m_sql_cmd can point to Sql_cmd allocated on thd->mem_root.
|
||||
Unlink it now, before freeing the root.
|
||||
*/
|
||||
thd->lex->m_sql_cmd= NULL;
|
||||
free_root(thd->mem_root,MYF(MY_KEEP_PREALLOC));
|
||||
|
||||
#if defined(ENABLED_PROFILING)
|
||||
|
@ -7760,7 +7765,7 @@ void THD::reset_for_next_command(bool do_clear_error)
|
|||
if (opt_bin_log)
|
||||
reset_dynamic(&user_var_events);
|
||||
DBUG_ASSERT(user_var_events_alloc == &main_mem_root);
|
||||
enable_slow_log= variables.sql_log_slow;
|
||||
enable_slow_log= true;
|
||||
get_stmt_da()->reset_for_next_command();
|
||||
rand_used= 0;
|
||||
m_sent_row_count= m_examined_row_count= 0;
|
||||
|
|
|
@ -1571,13 +1571,8 @@ dict_table_rename_in_cache(
|
|||
ut_ad(mutex_own(&dict_sys->mutex));
|
||||
|
||||
/* store the old/current name to an automatic variable */
|
||||
if (strlen(table->name.m_name) + 1 <= sizeof(old_name)) {
|
||||
strcpy(old_name, table->name.m_name);
|
||||
} else {
|
||||
ib::fatal() << "Too long table name: "
|
||||
<< table->name
|
||||
<< ", max length is " << MAX_FULL_NAME_LEN;
|
||||
}
|
||||
ut_a(strlen(table->name.m_name) < sizeof old_name);
|
||||
strcpy(old_name, table->name.m_name);
|
||||
|
||||
fold = ut_fold_string(new_name);
|
||||
|
||||
|
@ -1767,7 +1762,7 @@ dict_table_rename_in_cache(
|
|||
|
||||
ulint db_len;
|
||||
char* old_id;
|
||||
char old_name_cs_filename[MAX_TABLE_NAME_LEN+20];
|
||||
char old_name_cs_filename[MAX_FULL_NAME_LEN+1];
|
||||
uint errors = 0;
|
||||
|
||||
/* All table names are internally stored in charset
|
||||
|
@ -1784,7 +1779,8 @@ dict_table_rename_in_cache(
|
|||
in old_name_cs_filename */
|
||||
|
||||
strncpy(old_name_cs_filename, old_name,
|
||||
MAX_TABLE_NAME_LEN);
|
||||
MAX_FULL_NAME_LEN);
|
||||
old_name_cs_filename[MAX_FULL_NAME_LEN] = '\0';
|
||||
if (strstr(old_name, TEMP_TABLE_PATH_PREFIX) == NULL) {
|
||||
|
||||
innobase_convert_to_system_charset(
|
||||
|
@ -1806,7 +1802,9 @@ dict_table_rename_in_cache(
|
|||
/* Old name already in
|
||||
my_charset_filename */
|
||||
strncpy(old_name_cs_filename, old_name,
|
||||
MAX_TABLE_NAME_LEN);
|
||||
MAX_FULL_NAME_LEN);
|
||||
old_name_cs_filename[MAX_FULL_NAME_LEN]
|
||||
= '\0';
|
||||
}
|
||||
}
|
||||
|
||||
|
@ -1832,7 +1830,7 @@ dict_table_rename_in_cache(
|
|||
|
||||
/* This is a generated >= 4.0.18 format id */
|
||||
|
||||
char table_name[MAX_TABLE_NAME_LEN] = "";
|
||||
char table_name[MAX_TABLE_NAME_LEN + 1];
|
||||
uint errors = 0;
|
||||
|
||||
if (strlen(table->name.m_name)
|
||||
|
@ -1847,6 +1845,7 @@ dict_table_rename_in_cache(
|
|||
/* Convert the table name to UTF-8 */
|
||||
strncpy(table_name, table->name.m_name,
|
||||
MAX_TABLE_NAME_LEN);
|
||||
table_name[MAX_TABLE_NAME_LEN] = '\0';
|
||||
innobase_convert_to_system_charset(
|
||||
strchr(table_name, '/') + 1,
|
||||
strchr(table->name.m_name, '/') + 1,
|
||||
|
@ -1856,9 +1855,10 @@ dict_table_rename_in_cache(
|
|||
/* Table name could not be converted
|
||||
from charset my_charset_filename to
|
||||
UTF-8. This means that the table name
|
||||
is already in UTF-8 (#mysql#50). */
|
||||
is already in UTF-8 (#mysql50#). */
|
||||
strncpy(table_name, table->name.m_name,
|
||||
MAX_TABLE_NAME_LEN);
|
||||
table_name[MAX_TABLE_NAME_LEN] = '\0';
|
||||
}
|
||||
|
||||
/* Replace the prefix 'databasename/tablename'
|
||||
|
|
|
@ -1,7 +1,7 @@
|
|||
/*****************************************************************************
|
||||
|
||||
Copyright (c) 2011, 2018, Oracle and/or its affiliates. All Rights Reserved.
|
||||
Copyright (c) 2016, 2018, MariaDB Corporation.
|
||||
Copyright (c) 2016, 2019, MariaDB Corporation.
|
||||
|
||||
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
|
||||
|
@ -726,6 +726,7 @@ fts_reset_get_doc(
|
|||
memset(get_doc, 0x0, sizeof(*get_doc));
|
||||
|
||||
get_doc->index_cache = ind_cache;
|
||||
get_doc->cache = cache;
|
||||
}
|
||||
|
||||
ut_ad(ib_vector_size(cache->get_docs)
|
||||
|
@ -4759,12 +4760,12 @@ fts_tokenize_document(
|
|||
ut_a(!doc->tokens);
|
||||
ut_a(doc->charset);
|
||||
|
||||
doc->tokens = rbt_create_arg_cmp(
|
||||
sizeof(fts_token_t), innobase_fts_text_cmp, (void*) doc->charset);
|
||||
doc->tokens = rbt_create_arg_cmp(sizeof(fts_token_t),
|
||||
innobase_fts_text_cmp,
|
||||
(void*) doc->charset);
|
||||
|
||||
if (parser != NULL) {
|
||||
fts_tokenize_param_t fts_param;
|
||||
|
||||
fts_param.result_doc = (result != NULL) ? result : doc;
|
||||
fts_param.add_pos = 0;
|
||||
|
||||
|
|
|
@ -1,7 +1,7 @@
|
|||
/*****************************************************************************
|
||||
|
||||
Copyright (c) 2007, 2018, Oracle and/or its affiliates. All Rights Reserved.
|
||||
Copyright (c) 2016, 2018, MariaDB Corporation.
|
||||
Copyright (c) 2016, 2019, MariaDB Corporation.
|
||||
|
||||
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
|
||||
|
@ -674,25 +674,27 @@ fts_fetch_index_words(
|
|||
fts_zip_t* zip = static_cast<fts_zip_t*>(user_arg);
|
||||
que_node_t* exp = sel_node->select_list;
|
||||
dfield_t* dfield = que_node_get_val(exp);
|
||||
short len = static_cast<short>(dfield_get_len(dfield));
|
||||
|
||||
ut_a(dfield_get_len(dfield) <= FTS_MAX_WORD_LEN);
|
||||
|
||||
uint16 len = uint16(dfield_get_len(dfield));
|
||||
void* data = dfield_get_data(dfield);
|
||||
|
||||
/* Skip the duplicate words. */
|
||||
if (zip->word.f_len == static_cast<ulint>(len)
|
||||
&& !memcmp(zip->word.f_str, data, zip->word.f_len)) {
|
||||
|
||||
if (zip->word.f_len == len && !memcmp(zip->word.f_str, data, len)) {
|
||||
return(TRUE);
|
||||
}
|
||||
|
||||
ut_a(len <= FTS_MAX_WORD_LEN);
|
||||
|
||||
zip->word.f_len = ulint(len);
|
||||
memcpy(zip->word.f_str, data, zip->word.f_len);
|
||||
memcpy(zip->word.f_str, data, len);
|
||||
zip->word.f_len = len;
|
||||
|
||||
ut_a(zip->zp->avail_in == 0);
|
||||
ut_a(zip->zp->next_in == NULL);
|
||||
|
||||
/* The string is prefixed by len. */
|
||||
/* FIXME: This is not byte order agnostic (InnoDB data files
|
||||
with FULLTEXT INDEX are not portable between little-endian and
|
||||
big-endian systems!) */
|
||||
zip->zp->next_in = reinterpret_cast<byte*>(&len);
|
||||
zip->zp->avail_in = sizeof(len);
|
||||
|
||||
|
@ -720,14 +722,13 @@ fts_fetch_index_words(
|
|||
ut_a(len <= FTS_MAX_WORD_LEN);
|
||||
len = 0;
|
||||
}
|
||||
break;
|
||||
continue;
|
||||
|
||||
case Z_STREAM_END:
|
||||
case Z_BUF_ERROR:
|
||||
case Z_STREAM_ERROR:
|
||||
default:
|
||||
ut_error;
|
||||
break;
|
||||
}
|
||||
}
|
||||
|
||||
|
|
|
@ -1,6 +1,7 @@
|
|||
/*****************************************************************************
|
||||
|
||||
Copyright (c) 1996, 2016, Oracle and/or its affiliates. All Rights Reserved.
|
||||
Copyright (c) 2019, MariaDB Corporation.
|
||||
|
||||
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
|
||||
|
@ -68,11 +69,11 @@ dict_create_add_foreign_id(
|
|||
sprintf(id, "%s_ibfk_%lu", name,
|
||||
(ulong) (*id_nr)++);
|
||||
} else {
|
||||
char table_name[MAX_TABLE_NAME_LEN + 20] = "";
|
||||
char table_name[MAX_TABLE_NAME_LEN + 21];
|
||||
uint errors = 0;
|
||||
|
||||
strncpy(table_name, name,
|
||||
MAX_TABLE_NAME_LEN + 20);
|
||||
strncpy(table_name, name, (sizeof table_name) - 1);
|
||||
table_name[(sizeof table_name) - 1] = '\0';
|
||||
|
||||
innobase_convert_to_system_charset(
|
||||
strchr(table_name, '/') + 1,
|
||||
|
@ -81,7 +82,8 @@ dict_create_add_foreign_id(
|
|||
|
||||
if (errors) {
|
||||
strncpy(table_name, name,
|
||||
MAX_TABLE_NAME_LEN + 20);
|
||||
(sizeof table_name) - 1);
|
||||
table_name[(sizeof table_name) - 1] = '\0';
|
||||
}
|
||||
|
||||
/* no overflow if number < 1e13 */
|
||||
|
|
|
@ -96,8 +96,8 @@ row_merge_create_fts_sort_index(
|
|||
field = dict_index_get_nth_field(new_index, 0);
|
||||
field->name = NULL;
|
||||
field->prefix_len = 0;
|
||||
field->col = static_cast<dict_col_t*>(
|
||||
mem_heap_alloc(new_index->heap, sizeof(dict_col_t)));
|
||||
field->col = new(mem_heap_zalloc(new_index->heap, sizeof(dict_col_t)))
|
||||
dict_col_t();
|
||||
field->col->prtype = idx_field->col->prtype | DATA_NOT_NULL;
|
||||
field->col->mtype = charset == &my_charset_latin1
|
||||
? DATA_VARCHAR : DATA_VARMYSQL;
|
||||
|
@ -111,8 +111,8 @@ row_merge_create_fts_sort_index(
|
|||
field = dict_index_get_nth_field(new_index, 1);
|
||||
field->name = NULL;
|
||||
field->prefix_len = 0;
|
||||
field->col = static_cast<dict_col_t*>(
|
||||
mem_heap_alloc(new_index->heap, sizeof(dict_col_t)));
|
||||
field->col = new(mem_heap_zalloc(new_index->heap, sizeof(dict_col_t)))
|
||||
dict_col_t();
|
||||
field->col->mtype = DATA_INT;
|
||||
*opt_doc_id_size = FALSE;
|
||||
|
||||
|
@ -146,21 +146,16 @@ row_merge_create_fts_sort_index(
|
|||
|
||||
field->col->prtype = DATA_NOT_NULL | DATA_BINARY_TYPE;
|
||||
|
||||
field->col->mbminlen = 0;
|
||||
field->col->mbmaxlen = 0;
|
||||
|
||||
/* The third field is on the word's position in the original doc */
|
||||
field = dict_index_get_nth_field(new_index, 2);
|
||||
field->name = NULL;
|
||||
field->prefix_len = 0;
|
||||
field->col = static_cast<dict_col_t*>(
|
||||
mem_heap_alloc(new_index->heap, sizeof(dict_col_t)));
|
||||
field->col = new(mem_heap_zalloc(new_index->heap, sizeof(dict_col_t)))
|
||||
dict_col_t();
|
||||
field->col->mtype = DATA_INT;
|
||||
field->col->len = 4 ;
|
||||
field->fixed_len = 4;
|
||||
field->col->prtype = DATA_NOT_NULL;
|
||||
field->col->mbminlen = 0;
|
||||
field->col->mbmaxlen = 0;
|
||||
|
||||
return(new_index);
|
||||
}
|
||||
|
|
|
@ -4368,11 +4368,12 @@ row_rename_table_for_mysql(
|
|||
|
||||
if (!new_is_tmp) {
|
||||
/* Rename all constraints. */
|
||||
char new_table_name[MAX_TABLE_NAME_LEN] = "";
|
||||
char old_table_utf8[MAX_TABLE_NAME_LEN] = "";
|
||||
char new_table_name[MAX_TABLE_NAME_LEN + 1];
|
||||
char old_table_utf8[MAX_TABLE_NAME_LEN + 1];
|
||||
uint errors = 0;
|
||||
|
||||
strncpy(old_table_utf8, old_name, MAX_TABLE_NAME_LEN);
|
||||
old_table_utf8[MAX_TABLE_NAME_LEN] = '\0';
|
||||
innobase_convert_to_system_charset(
|
||||
strchr(old_table_utf8, '/') + 1,
|
||||
strchr(old_name, '/') +1,
|
||||
|
@ -4383,6 +4384,7 @@ row_rename_table_for_mysql(
|
|||
my_charset_filename to UTF-8. This means that the
|
||||
table name is already in UTF-8 (#mysql#50). */
|
||||
strncpy(old_table_utf8, old_name, MAX_TABLE_NAME_LEN);
|
||||
old_table_utf8[MAX_TABLE_NAME_LEN] = '\0';
|
||||
}
|
||||
|
||||
info = pars_info_create();
|
||||
|
@ -4393,6 +4395,7 @@ row_rename_table_for_mysql(
|
|||
old_table_utf8);
|
||||
|
||||
strncpy(new_table_name, new_name, MAX_TABLE_NAME_LEN);
|
||||
new_table_name[MAX_TABLE_NAME_LEN] = '\0';
|
||||
innobase_convert_to_system_charset(
|
||||
strchr(new_table_name, '/') + 1,
|
||||
strchr(new_name, '/') +1,
|
||||
|
@ -4403,6 +4406,7 @@ row_rename_table_for_mysql(
|
|||
my_charset_filename to UTF-8. This means that the
|
||||
table name is already in UTF-8 (#mysql#50). */
|
||||
strncpy(new_table_name, new_name, MAX_TABLE_NAME_LEN);
|
||||
new_table_name[MAX_TABLE_NAME_LEN] = '\0';
|
||||
}
|
||||
|
||||
pars_info_add_str_literal(info, "new_table_utf8", new_table_name);
|
||||
|
|
Loading…
Reference in a new issue