Merge 10.4 into 10.5

This commit is contained in:
Marko Mäkelä 2019-11-13 20:38:14 +02:00
commit c99470b366
70 changed files with 2877 additions and 171 deletions

View File

@ -569,6 +569,12 @@ public:
} }
T &operator*() { return *static_cast<T *>(node->info); } T &operator*() { return *static_cast<T *>(node->info); }
T *operator->() { return static_cast<T *>(node->info); }
bool operator==(const typename List<T>::iterator &rhs)
{
return node == rhs.node;
}
bool operator!=(const typename List<T>::iterator &rhs) bool operator!=(const typename List<T>::iterator &rhs)
{ {

View File

@ -1161,8 +1161,12 @@ btr_create(
btr_page_set_index_id(page, page_zip, index_id, mtr); btr_page_set_index_id(page, page_zip, index_id, mtr);
/* Set the next node and previous node fields */ /* Set the next node and previous node fields */
btr_page_set_next(page, page_zip, FIL_NULL, mtr); compile_time_assert(FIL_PAGE_NEXT == FIL_PAGE_PREV + 4);
btr_page_set_prev(page, page_zip, FIL_NULL, mtr); compile_time_assert(FIL_NULL == 0xffffffff);
mlog_memset(block, FIL_PAGE_PREV, 8, 0xff, mtr);
if (UNIV_LIKELY_NULL(page_zip)) {
memset(page_zip->data + FIL_PAGE_PREV, 0xff, 8);
}
/* We reset the free bits for the page in a separate /* We reset the free bits for the page in a separate
mini-transaction to allow creation of several trees in the mini-transaction to allow creation of several trees in the
@ -1939,8 +1943,12 @@ btr_root_raise_and_insert(
btr_page_create(new_block, new_page_zip, index, level, mtr); btr_page_create(new_block, new_page_zip, index, level, mtr);
/* Set the next node and previous node fields of new page */ /* Set the next node and previous node fields of new page */
btr_page_set_next(new_page, new_page_zip, FIL_NULL, mtr); compile_time_assert(FIL_PAGE_NEXT == FIL_PAGE_PREV + 4);
btr_page_set_prev(new_page, new_page_zip, FIL_NULL, mtr); compile_time_assert(FIL_NULL == 0xffffffff);
mlog_memset(new_block, FIL_PAGE_PREV, 8, 0xff, mtr);
if (UNIV_LIKELY_NULL(new_page_zip)) {
memset(new_page_zip->data + FIL_PAGE_PREV, 0xff, 8);
}
/* Copy the records from root to the new page one by one. */ /* Copy the records from root to the new page one by one. */

View File

@ -1397,18 +1397,14 @@ check_v_col_in_order(
& ALTER_ADD_VIRTUAL_COLUMN) { & ALTER_ADD_VIRTUAL_COLUMN) {
bool has_new = false; bool has_new = false;
List_iterator_fast<Create_field> cf_it( for (const Create_field& new_field :
ha_alter_info->alter_info->create_list); ha_alter_info->alter_info->create_list) {
if (new_field.stored_in_db()) {
cf_it.rewind();
while (const Create_field* new_field = cf_it++) {
if (new_field->stored_in_db()) {
continue; continue;
} }
/* Found a new added virtual column. */ /* Found a new added virtual column. */
if (!new_field->field) { if (!new_field.field) {
has_new = true; has_new = true;
continue; continue;
} }
@ -2109,9 +2105,6 @@ ha_innobase::check_if_supported_inplace_alter(
bool online = true, need_rebuild = false; bool online = true, need_rebuild = false;
const uint fulltext_indexes = innobase_fulltext_exist(altered_table); const uint fulltext_indexes = innobase_fulltext_exist(altered_table);
List_iterator_fast<Create_field> cf_it(
ha_alter_info->alter_info->create_list);
/* Fix the key parts. */ /* Fix the key parts. */
for (KEY* new_key = ha_alter_info->key_info_buffer; for (KEY* new_key = ha_alter_info->key_info_buffer;
new_key < ha_alter_info->key_info_buffer new_key < ha_alter_info->key_info_buffer
@ -2132,18 +2125,12 @@ ha_innobase::check_if_supported_inplace_alter(
key_part < (new_key->key_part key_part < (new_key->key_part
+ new_key->user_defined_key_parts); + new_key->user_defined_key_parts);
key_part++) { key_part++) {
const Create_field* new_field;
DBUG_ASSERT(key_part->fieldnr DBUG_ASSERT(key_part->fieldnr
< altered_table->s->fields); < altered_table->s->fields);
cf_it.rewind(); const Create_field* new_field
for (uint fieldnr = 0; (new_field = cf_it++); = ha_alter_info->alter_info->create_list.elem(
fieldnr++) { key_part->fieldnr);
if (fieldnr == key_part->fieldnr) {
break;
}
}
DBUG_ASSERT(new_field); DBUG_ASSERT(new_field);
@ -2270,18 +2257,17 @@ ha_innobase::check_if_supported_inplace_alter(
DEFAULT value, ensure that the DEFAULT expression is a constant. DEFAULT value, ensure that the DEFAULT expression is a constant.
Also, in ADD COLUMN, for now we only support a Also, in ADD COLUMN, for now we only support a
constant DEFAULT expression. */ constant DEFAULT expression. */
cf_it.rewind();
Field **af = altered_table->field; Field **af = altered_table->field;
bool fts_need_rebuild = false; bool fts_need_rebuild = false;
need_rebuild = need_rebuild need_rebuild = need_rebuild
|| innobase_need_rebuild(ha_alter_info, table); || innobase_need_rebuild(ha_alter_info, table);
while (Create_field* cf = cf_it++) { for (Create_field& cf : ha_alter_info->alter_info->create_list) {
DBUG_ASSERT(cf->field DBUG_ASSERT(cf.field
|| (ha_alter_info->handler_flags || (ha_alter_info->handler_flags
& ALTER_ADD_COLUMN)); & ALTER_ADD_COLUMN));
if (const Field* f = cf->field) { if (const Field* f = cf.field) {
if (!f->real_maybe_null() || (*af)->real_maybe_null()) if (!f->real_maybe_null() || (*af)->real_maybe_null())
goto next_column; goto next_column;
/* We are changing an existing column /* We are changing an existing column
@ -2873,8 +2859,6 @@ innobase_get_foreign_key_info(
const trx_t* trx, const trx_t* trx,
dict_s_col_list*s_cols) dict_s_col_list*s_cols)
{ {
Key* key;
Foreign_key* fk_key;
dict_table_t* referenced_table = NULL; dict_table_t* referenced_table = NULL;
char* referenced_table_name = NULL; char* referenced_table_name = NULL;
ulint num_fk = 0; ulint num_fk = 0;
@ -2884,10 +2868,8 @@ innobase_get_foreign_key_info(
*n_add_fk = 0; *n_add_fk = 0;
List_iterator<Key> key_iterator(alter_info->key_list); for (Key& key : alter_info->key_list) {
if (key.type != Key::FOREIGN_KEY) {
while ((key=key_iterator++)) {
if (key->type != Key::FOREIGN_KEY) {
continue; continue;
} }
@ -2905,18 +2887,15 @@ innobase_get_foreign_key_info(
char db_name[MAX_DATABASE_NAME_LEN]; char db_name[MAX_DATABASE_NAME_LEN];
char tbl_name[MAX_TABLE_NAME_LEN]; char tbl_name[MAX_TABLE_NAME_LEN];
fk_key = static_cast<Foreign_key*>(key); Foreign_key* fk_key = static_cast<Foreign_key*>(&key);
if (fk_key->columns.elements > 0) { if (fk_key->columns.elements > 0) {
ulint i = 0; ulint i = 0;
Key_part_spec* column;
List_iterator<Key_part_spec> key_part_iterator(
fk_key->columns);
/* Get all the foreign key column info for the /* Get all the foreign key column info for the
current table */ current table */
while ((column = key_part_iterator++)) { for (const Key_part_spec& column : fk_key->columns) {
column_names[i] = column->field_name.str; column_names[i] = column.field_name.str;
ut_ad(i < MAX_NUM_FK_COLUMNS); ut_ad(i < MAX_NUM_FK_COLUMNS);
i++; i++;
} }
@ -3010,13 +2989,10 @@ innobase_get_foreign_key_info(
if (fk_key->ref_columns.elements > 0) { if (fk_key->ref_columns.elements > 0) {
ulint i = 0; ulint i = 0;
Key_part_spec* column;
List_iterator<Key_part_spec> key_part_iterator(
fk_key->ref_columns);
while ((column = key_part_iterator++)) { for (Key_part_spec &column : fk_key->ref_columns) {
referenced_column_names[i] = referenced_column_names[i] =
column->field_name.str; column.field_name.str;
ut_ad(i < MAX_NUM_FK_COLUMNS); ut_ad(i < MAX_NUM_FK_COLUMNS);
i++; i++;
} }
@ -4221,26 +4197,21 @@ innobase_check_foreigns(
dict_foreign_t** drop_fk, dict_foreign_t** drop_fk,
ulint n_drop_fk) ulint n_drop_fk)
{ {
List_iterator_fast<Create_field> cf_it(
ha_alter_info->alter_info->create_list);
for (Field** fp = old_table->field; *fp; fp++) { for (Field** fp = old_table->field; *fp; fp++) {
cf_it.rewind();
const Create_field* new_field;
ut_ad(!(*fp)->real_maybe_null() ut_ad(!(*fp)->real_maybe_null()
== !!((*fp)->flags & NOT_NULL_FLAG)); == !!((*fp)->flags & NOT_NULL_FLAG));
while ((new_field = cf_it++)) { auto end = ha_alter_info->alter_info->create_list.end();
if (new_field->field == *fp) { auto it = std::find_if(
break; ha_alter_info->alter_info->create_list.begin(), end,
} [fp](const Create_field& field) {
} return field.field == *fp;
});
if (!new_field || (new_field->flags & NOT_NULL_FLAG)) { if (it == end || (it->flags & NOT_NULL_FLAG)) {
if (innobase_check_foreigns_low( if (innobase_check_foreigns_low(
user_table, drop_fk, n_drop_fk, user_table, drop_fk, n_drop_fk,
(*fp)->field_name.str, !new_field)) { (*fp)->field_name.str, it == end)) {
return(true); return(true);
} }
} }
@ -4331,8 +4302,6 @@ innobase_build_col_map(
heap, (size_t(old_table->n_cols) + old_n_v_cols) heap, (size_t(old_table->n_cols) + old_n_v_cols)
* sizeof *col_map)); * sizeof *col_map));
List_iterator_fast<Create_field> cf_it(
ha_alter_info->alter_info->create_list);
uint i = 0; uint i = 0;
uint num_v = 0; uint num_v = 0;
@ -4348,14 +4317,15 @@ innobase_build_col_map(
const bool omits_virtual = ha_innobase::omits_virtual_cols(*table->s); const bool omits_virtual = ha_innobase::omits_virtual_cols(*table->s);
while (const Create_field* new_field = cf_it++) { for (const Create_field& new_field :
bool is_v = !new_field->stored_in_db(); ha_alter_info->alter_info->create_list) {
bool is_v = !new_field.stored_in_db();
ulint num_old_v = 0; ulint num_old_v = 0;
for (uint old_i = 0; table->field[old_i]; old_i++) { for (uint old_i = 0; table->field[old_i]; old_i++) {
const Field* field = table->field[old_i]; const Field* field = table->field[old_i];
if (!field->stored_in_db()) { if (!field->stored_in_db()) {
if (is_v && new_field->field == field) { if (is_v && new_field.field == field) {
if (!omits_virtual) { if (!omits_virtual) {
col_map[old_table->n_cols col_map[old_table->n_cols
+ num_v] + num_v]
@ -4368,7 +4338,7 @@ innobase_build_col_map(
continue; continue;
} }
if (new_field->field == field) { if (new_field.field == field) {
const Field* altered_field = const Field* altered_field =
altered_table->field[i + num_v]; altered_table->field[i + num_v];
@ -4520,21 +4490,20 @@ innobase_get_col_names(
mem_heap_zalloc(heap, user_table->n_def * sizeof *cols)); mem_heap_zalloc(heap, user_table->n_def * sizeof *cols));
i = 0; i = 0;
List_iterator_fast<Create_field> cf_it( for (const Create_field& new_field :
ha_alter_info->alter_info->create_list); ha_alter_info->alter_info->create_list) {
while (const Create_field* new_field = cf_it++) {
ulint num_v = 0; ulint num_v = 0;
DBUG_ASSERT(i < altered_table->s->fields); DBUG_ASSERT(i < altered_table->s->fields);
if (!new_field->stored_in_db()) { if (!new_field.stored_in_db()) {
continue; continue;
} }
for (uint old_i = 0; table->field[old_i]; old_i++) { for (uint old_i = 0; table->field[old_i]; old_i++) {
num_v += !table->field[old_i]->stored_in_db(); num_v += !table->field[old_i]->stored_in_db();
if (new_field->field == table->field[old_i]) { if (new_field.field == table->field[old_i]) {
cols[old_i - num_v] = new_field->field_name.str; cols[old_i - num_v] = new_field.field_name.str;
break; break;
} }
} }
@ -4882,13 +4851,11 @@ prepare_inplace_add_virtual(
mem_heap_alloc(ctx->heap, ctx->num_to_add_vcol mem_heap_alloc(ctx->heap, ctx->num_to_add_vcol
* sizeof *ctx->add_vcol_name)); * sizeof *ctx->add_vcol_name));
List_iterator_fast<Create_field> cf_it( for (const Create_field& new_field :
ha_alter_info->alter_info->create_list); ha_alter_info->alter_info->create_list) {
while (const Create_field* new_field = cf_it++) {
const Field* field = altered_table->field[i++]; const Field* field = altered_table->field[i++];
if (new_field->field || field->stored_in_db()) { if (new_field.field || field->stored_in_db()) {
continue; continue;
} }
@ -5971,8 +5938,6 @@ innodb_v_adjust_idx_col(
ulint num_v_dropped, ulint num_v_dropped,
index_def_t* index_def) index_def_t* index_def)
{ {
List_iterator_fast<Create_field> cf_it(
ha_alter_info->alter_info->create_list);
for (ulint i = 0; i < index_def->n_fields; i++) { for (ulint i = 0; i < index_def->n_fields; i++) {
#ifdef UNIV_DEBUG #ifdef UNIV_DEBUG
bool col_found = false; bool col_found = false;
@ -5990,15 +5955,14 @@ innodb_v_adjust_idx_col(
const Field* field = NULL; const Field* field = NULL;
cf_it.rewind();
/* Found the field in the new table */ /* Found the field in the new table */
while (const Create_field* new_field = cf_it++) { for (const Create_field& new_field :
if (new_field->stored_in_db()) { ha_alter_info->alter_info->create_list) {
if (new_field.stored_in_db()) {
continue; continue;
} }
field = new_field->field; field = new_field.field;
if (num_v == index_field->col_no) { if (num_v == index_field->col_no) {
break; break;
@ -6582,18 +6546,16 @@ new_clustered_failed:
uint i = 0; // index of stored columns ctx->new_table->cols[] uint i = 0; // index of stored columns ctx->new_table->cols[]
Field **af = altered_table->field; Field **af = altered_table->field;
List_iterator_fast<Create_field> cf_it( for (const Create_field& new_field :
ha_alter_info->alter_info->create_list); ha_alter_info->alter_info->create_list) {
DBUG_ASSERT(!new_field.field
while (const Create_field* new_field = cf_it++) {
DBUG_ASSERT(!new_field->field
|| std::find(old_table->field, || std::find(old_table->field,
old_table->field old_table->field
+ old_table->s->fields, + old_table->s->fields,
new_field->field) != new_field.field) !=
old_table->field + old_table->s->fields); old_table->field + old_table->s->fields);
DBUG_ASSERT(new_field->field DBUG_ASSERT(new_field.field
|| !strcmp(new_field->field_name.str, || !strcmp(new_field.field_name.str,
(*af)->field_name.str)); (*af)->field_name.str));
if (!(*af)->stored_in_db()) { if (!(*af)->stored_in_db()) {
@ -6608,7 +6570,7 @@ new_clustered_failed:
i))); i)));
DBUG_ASSERT(!col->is_added()); DBUG_ASSERT(!col->is_added());
if (new_field->field) { if (new_field.field) {
/* This is a pre-existing column, /* This is a pre-existing column,
possibly at a different position. */ possibly at a different position. */
} else if ((*af)->is_real_null()) { } else if ((*af)->is_real_null()) {
@ -7567,9 +7529,6 @@ err_exit_no_heap:
already contains. */ already contains. */
if (ha_alter_info->handler_flags if (ha_alter_info->handler_flags
& ALTER_COLUMN_NAME) { & ALTER_COLUMN_NAME) {
List_iterator_fast<Create_field> cf_it(
ha_alter_info->alter_info->create_list);
for (Field** fp = table->field; *fp; fp++) { for (Field** fp = table->field; *fp; fp++) {
if (!((*fp)->flags & FIELD_IS_RENAMED)) { if (!((*fp)->flags & FIELD_IS_RENAMED)) {
continue; continue;
@ -7577,10 +7536,10 @@ err_exit_no_heap:
const char* name = 0; const char* name = 0;
cf_it.rewind(); for (const Create_field& cf :
while (Create_field* cf = cf_it++) { ha_alter_info->alter_info->create_list) {
if (cf->field == *fp) { if (cf.field == *fp) {
name = cf->field_name.str; name = cf.field_name.str;
goto check_if_ok_to_rename; goto check_if_ok_to_rename;
} }
} }
@ -7739,11 +7698,8 @@ check_if_ok_to_rename:
ha_alter_info->alter_info->drop_list.elements ha_alter_info->alter_info->drop_list.elements
* sizeof(dict_foreign_t*))); * sizeof(dict_foreign_t*)));
List_iterator<Alter_drop> drop_it( for (Alter_drop& drop : ha_alter_info->alter_info->drop_list) {
ha_alter_info->alter_info->drop_list); if (drop.type != Alter_drop::FOREIGN_KEY) {
while (Alter_drop* drop = drop_it++) {
if (drop->type != Alter_drop::FOREIGN_KEY) {
continue; continue;
} }
@ -7764,13 +7720,13 @@ check_if_ok_to_rename:
fid = fid ? fid + 1 : foreign->id; fid = fid ? fid + 1 : foreign->id;
if (!my_strcasecmp(system_charset_info, if (!my_strcasecmp(system_charset_info,
fid, drop->name)) { fid, drop.name)) {
goto found_fk; goto found_fk;
} }
} }
my_error(ER_CANT_DROP_FIELD_OR_KEY, MYF(0), my_error(ER_CANT_DROP_FIELD_OR_KEY, MYF(0),
drop->type_name(), drop->name); drop.type_name(), drop.name);
goto err_exit; goto err_exit;
found_fk: found_fk:
for (ulint i = n_drop_fk; i--; ) { for (ulint i = n_drop_fk; i--; ) {
@ -8089,21 +8045,20 @@ err_exit:
/* See if an AUTO_INCREMENT column was added. */ /* See if an AUTO_INCREMENT column was added. */
uint i = 0; uint i = 0;
ulint num_v = 0; ulint num_v = 0;
List_iterator_fast<Create_field> cf_it( for (const Create_field& new_field :
ha_alter_info->alter_info->create_list); ha_alter_info->alter_info->create_list) {
while (const Create_field* new_field = cf_it++) {
const Field* field; const Field* field;
DBUG_ASSERT(i < altered_table->s->fields); DBUG_ASSERT(i < altered_table->s->fields);
for (uint old_i = 0; table->field[old_i]; old_i++) { for (uint old_i = 0; table->field[old_i]; old_i++) {
if (new_field->field == table->field[old_i]) { if (new_field.field == table->field[old_i]) {
goto found_col; goto found_col;
} }
} }
/* This is an added column. */ /* This is an added column. */
DBUG_ASSERT(!new_field->field); DBUG_ASSERT(!new_field.field);
DBUG_ASSERT(ha_alter_info->handler_flags DBUG_ASSERT(ha_alter_info->handler_flags
& ALTER_ADD_COLUMN); & ALTER_ADD_COLUMN);
@ -8127,7 +8082,7 @@ err_exit:
autoinc_col_max_value = innobase_get_int_col_max_value(field); autoinc_col_max_value = innobase_get_int_col_max_value(field);
} }
found_col: found_col:
num_v += !new_field->stored_in_db(); num_v += !new_field.stored_in_db();
i++; i++;
} }
@ -8200,16 +8155,14 @@ alter_templ_needs_rebuild(
dict_table_t* table) dict_table_t* table)
{ {
ulint i = 0; ulint i = 0;
List_iterator_fast<Create_field> cf_it(
ha_alter_info->alter_info->create_list);
for (Field** fp = altered_table->field; *fp; fp++, i++) { for (Field** fp = altered_table->field; *fp; fp++, i++) {
cf_it.rewind(); for (const Create_field& cf :
while (const Create_field* cf = cf_it++) { ha_alter_info->alter_info->create_list) {
for (ulint j=0; j < table->n_cols; j++) { for (ulint j=0; j < table->n_cols; j++) {
dict_col_t* cols dict_col_t* cols
= dict_table_get_nth_col(table, j); = dict_table_get_nth_col(table, j);
if (cf->length > cols->len if (cf.length > cols->len
&& dict_col_in_v_indexes(table, cols)) { && dict_col_in_v_indexes(table, cols)) {
return(true); return(true);
} }
@ -9000,8 +8953,6 @@ innobase_rename_columns_try(
trx_t* trx, trx_t* trx,
const char* table_name) const char* table_name)
{ {
List_iterator_fast<Create_field> cf_it(
ha_alter_info->alter_info->create_list);
uint i = 0; uint i = 0;
ulint num_v = 0; ulint num_v = 0;
@ -9015,14 +8966,13 @@ innobase_rename_columns_try(
goto processed_field; goto processed_field;
} }
cf_it.rewind(); for (const Create_field& cf :
ha_alter_info->alter_info->create_list) {
while (Create_field* cf = cf_it++) { if (cf.field == *fp) {
if (cf->field == *fp) {
if (innobase_rename_column_try( if (innobase_rename_column_try(
*ctx, trx, table_name, *ctx, trx, table_name,
cf->field->field_name.str, cf.field->field_name.str,
cf->field_name.str)) { cf.field_name.str)) {
return(true); return(true);
} }
goto processed_field; goto processed_field;
@ -9196,8 +9146,6 @@ innobase_rename_or_enlarge_columns_try(
DBUG_RETURN(false); DBUG_RETURN(false);
} }
List_iterator_fast<Create_field> cf_it(
ha_alter_info->alter_info->create_list);
ulint i = 0; ulint i = 0;
ulint num_v = 0; ulint num_v = 0;
@ -9205,10 +9153,10 @@ innobase_rename_or_enlarge_columns_try(
const bool is_v = !(*fp)->stored_in_db(); const bool is_v = !(*fp)->stored_in_db();
ulint idx = is_v ? num_v++ : i - num_v; ulint idx = is_v ? num_v++ : i - num_v;
cf_it.rewind();
Field** af = altered_table->field; Field** af = altered_table->field;
while (Create_field* cf = cf_it++) { for (const Create_field& cf :
if (cf->field == *fp) { ha_alter_info->alter_info->create_list) {
if (cf.field == *fp) {
if (innobase_rename_or_enlarge_column_try( if (innobase_rename_or_enlarge_column_try(
ctx, trx, table_name, ctx, trx, table_name,
idx, **af, is_v)) { idx, **af, is_v)) {
@ -9244,18 +9192,16 @@ innobase_rename_or_enlarge_columns_cache(
return; return;
} }
List_iterator_fast<Create_field> cf_it(
ha_alter_info->alter_info->create_list);
uint i = 0; uint i = 0;
ulint num_v = 0; ulint num_v = 0;
for (Field** fp = table->field; *fp; fp++, i++) { for (Field** fp = table->field; *fp; fp++, i++) {
const bool is_virtual = !(*fp)->stored_in_db(); const bool is_virtual = !(*fp)->stored_in_db();
cf_it.rewind();
Field** af = altered_table->field; Field** af = altered_table->field;
while (Create_field* cf = cf_it++) { for (Create_field& cf :
if (cf->field != *fp) { ha_alter_info->alter_info->create_list) {
if (cf.field != *fp) {
af++; af++;
continue; continue;
} }
@ -9282,7 +9228,7 @@ innobase_rename_or_enlarge_columns_cache(
if ((*fp)->flags & FIELD_IS_RENAMED) { if ((*fp)->flags & FIELD_IS_RENAMED) {
dict_mem_table_col_rename( dict_mem_table_col_rename(
user_table, col_n, user_table, col_n,
cf->field->field_name.str, cf.field->field_name.str,
(*af)->field_name.str, is_virtual); (*af)->field_name.str, is_virtual);
} }
@ -9676,27 +9622,24 @@ vers_change_fields_try(
DBUG_ASSERT(ha_alter_info); DBUG_ASSERT(ha_alter_info);
DBUG_ASSERT(ctx); DBUG_ASSERT(ctx);
List_iterator_fast<Create_field> it( for (const Create_field& create_field : ha_alter_info->alter_info->create_list) {
ha_alter_info->alter_info->create_list); if (!create_field.field) {
while (const Create_field* create_field = it++) {
if (!create_field->field) {
continue; continue;
} }
if (create_field->versioning if (create_field.versioning
== Column_definition::VERSIONING_NOT_SET) { == Column_definition::VERSIONING_NOT_SET) {
continue; continue;
} }
const dict_table_t* new_table = ctx->new_table; const dict_table_t* new_table = ctx->new_table;
const uint pos = innodb_col_no(create_field->field); const uint pos = innodb_col_no(create_field.field);
const dict_col_t* col = dict_table_get_nth_col(new_table, pos); const dict_col_t* col = dict_table_get_nth_col(new_table, pos);
DBUG_ASSERT(!col->vers_sys_start()); DBUG_ASSERT(!col->vers_sys_start());
DBUG_ASSERT(!col->vers_sys_end()); DBUG_ASSERT(!col->vers_sys_end());
ulint new_prtype ulint new_prtype
= create_field->versioning = create_field.versioning
== Column_definition::WITHOUT_VERSIONING == Column_definition::WITHOUT_VERSIONING
? col->prtype & ~DATA_VERSIONED ? col->prtype & ~DATA_VERSIONED
: col->prtype | DATA_VERSIONED; : col->prtype | DATA_VERSIONED;
@ -9729,23 +9672,21 @@ vers_change_fields_cache(
DBUG_ASSERT(ctx); DBUG_ASSERT(ctx);
DBUG_ASSERT(ha_alter_info->handler_flags & ALTER_COLUMN_UNVERSIONED); DBUG_ASSERT(ha_alter_info->handler_flags & ALTER_COLUMN_UNVERSIONED);
List_iterator_fast<Create_field> it( for (const Create_field& create_field :
ha_alter_info->alter_info->create_list); ha_alter_info->alter_info->create_list) {
if (!create_field.field || create_field.field->vcol_info) {
while (const Create_field* create_field = it++) {
if (!create_field->field || create_field->field->vcol_info) {
continue; continue;
} }
dict_col_t* col = dict_table_get_nth_col( dict_col_t* col = dict_table_get_nth_col(
ctx->new_table, innodb_col_no(create_field->field)); ctx->new_table, innodb_col_no(create_field.field));
if (create_field->versioning if (create_field.versioning
== Column_definition::WITHOUT_VERSIONING) { == Column_definition::WITHOUT_VERSIONING) {
DBUG_ASSERT(!col->vers_sys_start()); DBUG_ASSERT(!col->vers_sys_start());
DBUG_ASSERT(!col->vers_sys_end()); DBUG_ASSERT(!col->vers_sys_end());
col->prtype &= ~DATA_VERSIONED; col->prtype &= ~DATA_VERSIONED;
} else if (create_field->versioning } else if (create_field.versioning
== Column_definition::WITH_VERSIONING) { == Column_definition::WITH_VERSIONING) {
DBUG_ASSERT(!col->vers_sys_start()); DBUG_ASSERT(!col->vers_sys_start());

View File

@ -37,7 +37,7 @@ extern bool innodb_table_stats_not_found;
extern bool innodb_index_stats_not_found; extern bool innodb_index_stats_not_found;
/** the first table or index ID for other than hard-coded system tables */ /** the first table or index ID for other than hard-coded system tables */
#define DICT_HDR_FIRST_ID 10 constexpr uint8_t DICT_HDR_FIRST_ID= 10;
/********************************************************************//** /********************************************************************//**
Get the database name length in a table name. Get the database name length in a table name.

View File

@ -158,12 +158,12 @@ Otherwise written as 0. @see PAGE_ROOT_AUTO_INC */
not necessarily collation order; not necessarily collation order;
this record may have been deleted */ this record may have been deleted */
/* Directions of cursor movement */ /* Directions of cursor movement (stored in PAGE_DIRECTION field) */
#define PAGE_LEFT 1 constexpr uint16_t PAGE_LEFT= 1;
#define PAGE_RIGHT 2 constexpr uint16_t PAGE_RIGHT= 2;
#define PAGE_SAME_REC 3 constexpr uint16_t PAGE_SAME_REC= 3;
#define PAGE_SAME_PAGE 4 constexpr uint16_t PAGE_SAME_PAGE= 4;
#define PAGE_NO_DIRECTION 5 constexpr uint16_t PAGE_NO_DIRECTION= 5;
#ifndef UNIV_INNOCHECKSUM #ifndef UNIV_INNOCHECKSUM

View File

@ -344,9 +344,9 @@ FIL_PAGE_ARCH_LOG_NO_OR_SPACE_ID. */
/*-------------------------------------------------------------*/ /*-------------------------------------------------------------*/
/** Contents of TRX_SYS_DOUBLEWRITE_MAGIC */ /** Contents of TRX_SYS_DOUBLEWRITE_MAGIC */
#define TRX_SYS_DOUBLEWRITE_MAGIC_N 536853855 constexpr uint32_t TRX_SYS_DOUBLEWRITE_MAGIC_N= 536853855;
/** Contents of TRX_SYS_DOUBLEWRITE_SPACE_ID_STORED */ /** Contents of TRX_SYS_DOUBLEWRITE_SPACE_ID_STORED */
#define TRX_SYS_DOUBLEWRITE_SPACE_ID_STORED_N 1783657386 constexpr uint32_t TRX_SYS_DOUBLEWRITE_SPACE_ID_STORED_N= 1783657386;
/** Size of the doublewrite block in pages */ /** Size of the doublewrite block in pages */
#define TRX_SYS_DOUBLEWRITE_BLOCK_SIZE FSP_EXTENT_SIZE #define TRX_SYS_DOUBLEWRITE_BLOCK_SIZE FSP_EXTENT_SIZE

View File

@ -1,7 +1,7 @@
/***************************************************************************** /*****************************************************************************
Copyright (c) 1996, 2016, Oracle and/or its affiliates. All Rights Reserved. Copyright (c) 1996, 2016, Oracle and/or its affiliates. All Rights Reserved.
Copyright (c) 2017, 2018, MariaDB Corporation. Copyright (c) 2017, 2019, 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
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
@ -308,16 +308,17 @@ trx_undo_mem_create_at_db_start(trx_rseg_t* rseg, ulint id, ulint page_no,
and delete markings: in short, and delete markings: in short,
modifys (the name 'UPDATE' is a modifys (the name 'UPDATE' is a
historical relic) */ historical relic) */
/* States of an undo log segment */ /* TRX_UNDO_STATE values of an undo log segment */
#define TRX_UNDO_ACTIVE 1 /* contains an undo log of an active /** contains an undo log of an active transaction */
transaction */ constexpr uint16_t TRX_UNDO_ACTIVE = 1;
#define TRX_UNDO_CACHED 2 /* cached for quick reuse */ /** cached for quick reuse */
#define TRX_UNDO_TO_FREE 3 /* insert undo segment can be freed */ constexpr uint16_t TRX_UNDO_CACHED = 2;
#define TRX_UNDO_TO_PURGE 4 /* update undo segment will not be /** old_insert undo segment that can be freed */
reused: it can be freed in purge when constexpr uint16_t TRX_UNDO_TO_FREE = 3;
all undo data in it is removed */ /** can be freed in purge when all undo data in it is removed */
#define TRX_UNDO_PREPARED 5 /* contains an undo log of an constexpr uint16_t TRX_UNDO_TO_PURGE = 4;
prepared transaction */ /** contains an undo log of a prepared transaction */
constexpr uint16_t TRX_UNDO_PREPARED = 5;
#ifndef UNIV_INNOCHECKSUM #ifndef UNIV_INNOCHECKSUM

View File

@ -139,6 +139,7 @@ mlog_parse_nbytes(
ut_ad(type <= MLOG_8BYTES || type == MLOG_MEMSET); ut_ad(type <= MLOG_8BYTES || type == MLOG_MEMSET);
ut_a(!page || !page_zip ut_a(!page || !page_zip
|| type == MLOG_MEMSET
|| !fil_page_index_page_check(page)); || !fil_page_index_page_check(page));
if (end_ptr < ptr + 2) { if (end_ptr < ptr + 2) {
return NULL; return NULL;
@ -164,6 +165,8 @@ mlog_parse_nbytes(
if (page) { if (page) {
memset(page + offset, *ptr, val); memset(page + offset, *ptr, val);
if (page_zip) { if (page_zip) {
ut_ad(offset + val <= PAGE_DATA
|| !fil_page_index_page_check(page));
memset(static_cast<page_zip_des_t*>(page_zip) memset(static_cast<page_zip_des_t*>(page_zip)
->data + offset, *ptr, val); ->data + offset, *ptr, val);
} }

View File

@ -0,0 +1,3 @@
--connection master_1
set session spider_direct_dup_insert= @old_spider_direct_dup_insert;
--source load_data_deinit.inc

View File

@ -0,0 +1,4 @@
--source load_data_init.inc
--connection master_1
set @old_spider_direct_dup_insert= @@spider_direct_dup_insert;
set session spider_direct_dup_insert= 0;

View File

@ -0,0 +1,3 @@
--connection master_1
set session spider_direct_dup_insert= @old_spider_direct_dup_insert;
--source load_data_deinit.inc

View File

@ -0,0 +1,4 @@
--source load_data_init.inc
--connection master_1
set @old_spider_direct_dup_insert= @@spider_direct_dup_insert;
set session spider_direct_dup_insert= 1;

View File

@ -0,0 +1,11 @@
--let $MASTER_1_COMMENT_2_1= $MASTER_1_COMMENT_2_1_BACKUP
--let $CHILD2_1_DROP_TABLES= $CHILD2_1_DROP_TABLES_BACKUP
--let $CHILD2_1_CREATE_TABLES= $CHILD2_1_CREATE_TABLES_BACKUP
--let $CHILD2_1_SELECT_TABLES= $CHILD2_1_SELECT_TABLES_BACKUP
--disable_warnings
--disable_query_log
--disable_result_log
--source ../../t/test_deinit.inc
--enable_result_log
--enable_query_log
--enable_warnings

View File

@ -0,0 +1,25 @@
--disable_warnings
--disable_query_log
--disable_result_log
--source ../../t/test_init.inc
--enable_result_log
--enable_query_log
--enable_warnings
--let $MASTER_1_COMMENT_2_1_BACKUP= $MASTER_1_COMMENT_2_1
let $MASTER_1_COMMENT_2_1=
COMMENT='table "tbl_a", srv "s_2_1"';
--let $CHILD2_1_DROP_TABLES_BACKUP= $CHILD2_1_DROP_TABLES
let $CHILD2_1_DROP_TABLES=
DROP TABLE IF EXISTS tbl_a;
--let $CHILD2_1_CREATE_TABLES_BACKUP= $CHILD2_1_CREATE_TABLES
let $CHILD2_1_CREATE_TABLES=
CREATE TABLE tbl_a (
pkey int NOT NULL,
val int NOT NULL,
PRIMARY KEY (pkey)
) $CHILD2_1_ENGINE $CHILD2_1_CHARSET;
--let $CHILD2_1_SELECT_TABLES_BACKUP= $CHILD2_1_SELECT_TABLES
let $CHILD2_1_SELECT_TABLES=
SELECT pkey, val FROM tbl_a ORDER BY pkey;
let $CHILD2_1_SELECT_ARGUMENT1=
SELECT argument FROM mysql.general_log WHERE argument LIKE '%`tbl_a`%';

View File

@ -0,0 +1,75 @@
for master_1
for child2
child2_1
child2_2
child2_3
for child3
connection master_1;
set @old_spider_direct_dup_insert= @@spider_direct_dup_insert;
set session spider_direct_dup_insert= 0;
this test is for MDEV-18987
drop and create databases
connection master_1;
CREATE DATABASE auto_test_local;
USE auto_test_local;
connection child2_1;
SET @old_log_output = @@global.log_output;
SET GLOBAL log_output = 'TABLE,FILE';
CREATE DATABASE auto_test_remote;
USE auto_test_remote;
create table and insert
connection child2_1;
CHILD2_1_CREATE_TABLES
TRUNCATE TABLE mysql.general_log;
connection master_1;
CREATE TABLE tbl_a (
pkey int NOT NULL,
val int NOT NULL,
PRIMARY KEY (pkey)
) MASTER_1_ENGINE MASTER_1_CHARSET MASTER_1_COMMENT_2_1
INSERT INTO tbl_a (pkey,val) VALUES (0,0),(1,1),(2,2),(3,3),(4,4),(5,5),(6,6),(7,7),(8,8),(9,9);
SELECT pkey,val INTO OUTFILE 'MYSQLTEST_VARDIR/tmp/spider_outfile.tsv' FROM tbl_a ORDER BY pkey;
TRUNCATE tbl_a;
select test 1
connection child2_1;
TRUNCATE TABLE mysql.general_log;
connection master_1;
LOAD DATA INFILE 'MYSQLTEST_VARDIR/tmp/spider_outfile.tsv' INTO TABLE tbl_a;
connection child2_1;
SELECT argument FROM mysql.general_log WHERE argument LIKE '%`tbl_a`%';
argument
insert high_priority into `auto_test_remote`.`tbl_a`(`pkey`,`val`)values(0,0),(1,1),(2,2),(3,3),(4,4),(5,5),(6,6),(7,7),(8,8),(9,9)
SELECT argument FROM mysql.general_log WHERE argument LIKE '%`tbl_a`%'
SELECT pkey, val FROM tbl_a ORDER BY pkey;
pkey val
0 0
1 1
2 2
3 3
4 4
5 5
6 6
7 7
8 8
9 9
deinit
connection master_1;
DROP DATABASE IF EXISTS auto_test_local;
connection child2_1;
DROP DATABASE IF EXISTS auto_test_remote;
SET GLOBAL log_output = @old_log_output;
connection master_1;
set session spider_direct_dup_insert= @old_spider_direct_dup_insert;
for master_1
for child2
child2_1
child2_2
child2_3
for child3
end of test

View File

@ -0,0 +1,75 @@
for master_1
for child2
child2_1
child2_2
child2_3
for child3
connection master_1;
set @old_spider_direct_dup_insert= @@spider_direct_dup_insert;
set session spider_direct_dup_insert= 1;
this test is for MDEV-18987
drop and create databases
connection master_1;
CREATE DATABASE auto_test_local;
USE auto_test_local;
connection child2_1;
SET @old_log_output = @@global.log_output;
SET GLOBAL log_output = 'TABLE,FILE';
CREATE DATABASE auto_test_remote;
USE auto_test_remote;
create table and insert
connection child2_1;
CHILD2_1_CREATE_TABLES
TRUNCATE TABLE mysql.general_log;
connection master_1;
CREATE TABLE tbl_a (
pkey int NOT NULL,
val int NOT NULL,
PRIMARY KEY (pkey)
) MASTER_1_ENGINE MASTER_1_CHARSET MASTER_1_COMMENT_2_1
INSERT INTO tbl_a (pkey,val) VALUES (0,0),(1,1),(2,2),(3,3),(4,4),(5,5),(6,6),(7,7),(8,8),(9,9);
SELECT pkey,val INTO OUTFILE 'MYSQLTEST_VARDIR/tmp/spider_outfile.tsv' FROM tbl_a ORDER BY pkey;
TRUNCATE tbl_a;
select test 1
connection child2_1;
TRUNCATE TABLE mysql.general_log;
connection master_1;
LOAD DATA INFILE 'MYSQLTEST_VARDIR/tmp/spider_outfile.tsv' INTO TABLE tbl_a;
connection child2_1;
SELECT argument FROM mysql.general_log WHERE argument LIKE '%`tbl_a`%';
argument
insert high_priority into `auto_test_remote`.`tbl_a`(`pkey`,`val`)values(0,0),(1,1),(2,2),(3,3),(4,4),(5,5),(6,6),(7,7),(8,8),(9,9)
SELECT argument FROM mysql.general_log WHERE argument LIKE '%`tbl_a`%'
SELECT pkey, val FROM tbl_a ORDER BY pkey;
pkey val
0 0
1 1
2 2
3 3
4 4
5 5
6 6
7 7
8 8
9 9
deinit
connection master_1;
DROP DATABASE IF EXISTS auto_test_local;
connection child2_1;
DROP DATABASE IF EXISTS auto_test_remote;
SET GLOBAL log_output = @old_log_output;
connection master_1;
set session spider_direct_dup_insert= @old_spider_direct_dup_insert;
for master_1
for child2
child2_1
child2_2
child2_3
for child3
end of test

View File

@ -0,0 +1,95 @@
for master_1
for child2
child2_1
child2_2
child2_3
for child3
connection master_1;
set @old_spider_direct_dup_insert= @@spider_direct_dup_insert;
set session spider_direct_dup_insert= 0;
this test is for MDEV-18987
drop and create databases
connection master_1;
CREATE DATABASE auto_test_local;
USE auto_test_local;
connection child2_1;
SET @old_log_output = @@global.log_output;
SET GLOBAL log_output = 'TABLE,FILE';
CREATE DATABASE auto_test_remote;
USE auto_test_remote;
create table and insert
connection child2_1;
CHILD2_1_CREATE_TABLES
TRUNCATE TABLE mysql.general_log;
connection master_1;
CREATE TABLE tbl_a (
pkey int NOT NULL,
val int NOT NULL,
PRIMARY KEY (pkey)
) MASTER_1_ENGINE MASTER_1_CHARSET MASTER_1_COMMENT_2_1
INSERT INTO tbl_a (pkey,val) VALUES (0,0),(1,1),(2,2),(3,3),(4,4),(5,5),(6,6),(7,7),(8,8),(9,9);
SELECT pkey,val INTO OUTFILE 'MYSQLTEST_VARDIR/tmp/spider_outfile.tsv' FROM tbl_a ORDER BY pkey;
UPDATE tbl_a SET val = val + 1;
select test 1
connection child2_1;
TRUNCATE TABLE mysql.general_log;
connection master_1;
LOAD DATA INFILE 'MYSQLTEST_VARDIR/tmp/spider_outfile.tsv' IGNORE INTO TABLE tbl_a;
Warnings:
Warning 1062 Duplicate entry '0' for key 'PRIMARY'
Warning 1062 Duplicate entry '1' for key 'PRIMARY'
Warning 1062 Duplicate entry '2' for key 'PRIMARY'
Warning 1062 Duplicate entry '3' for key 'PRIMARY'
Warning 1062 Duplicate entry '4' for key 'PRIMARY'
Warning 1062 Duplicate entry '5' for key 'PRIMARY'
Warning 1062 Duplicate entry '6' for key 'PRIMARY'
Warning 1062 Duplicate entry '7' for key 'PRIMARY'
Warning 1062 Duplicate entry '8' for key 'PRIMARY'
Warning 1062 Duplicate entry '9' for key 'PRIMARY'
connection child2_1;
SELECT argument FROM mysql.general_log WHERE argument LIKE '%`tbl_a`%';
argument
insert high_priority into `auto_test_remote`.`tbl_a`(`pkey`,`val`)values(0,0)
insert high_priority into `auto_test_remote`.`tbl_a`(`pkey`,`val`)values(1,1)
insert high_priority into `auto_test_remote`.`tbl_a`(`pkey`,`val`)values(2,2)
insert high_priority into `auto_test_remote`.`tbl_a`(`pkey`,`val`)values(3,3)
insert high_priority into `auto_test_remote`.`tbl_a`(`pkey`,`val`)values(4,4)
insert high_priority into `auto_test_remote`.`tbl_a`(`pkey`,`val`)values(5,5)
insert high_priority into `auto_test_remote`.`tbl_a`(`pkey`,`val`)values(6,6)
insert high_priority into `auto_test_remote`.`tbl_a`(`pkey`,`val`)values(7,7)
insert high_priority into `auto_test_remote`.`tbl_a`(`pkey`,`val`)values(8,8)
insert high_priority into `auto_test_remote`.`tbl_a`(`pkey`,`val`)values(9,9)
SELECT argument FROM mysql.general_log WHERE argument LIKE '%`tbl_a`%'
SELECT pkey, val FROM tbl_a ORDER BY pkey;
pkey val
0 1
1 2
2 3
3 4
4 5
5 6
6 7
7 8
8 9
9 10
deinit
connection master_1;
DROP DATABASE IF EXISTS auto_test_local;
connection child2_1;
DROP DATABASE IF EXISTS auto_test_remote;
SET GLOBAL log_output = @old_log_output;
connection master_1;
set session spider_direct_dup_insert= @old_spider_direct_dup_insert;
for master_1
for child2
child2_1
child2_2
child2_3
for child3
end of test

View File

@ -0,0 +1,75 @@
for master_1
for child2
child2_1
child2_2
child2_3
for child3
connection master_1;
set @old_spider_direct_dup_insert= @@spider_direct_dup_insert;
set session spider_direct_dup_insert= 1;
this test is for MDEV-18987
drop and create databases
connection master_1;
CREATE DATABASE auto_test_local;
USE auto_test_local;
connection child2_1;
SET @old_log_output = @@global.log_output;
SET GLOBAL log_output = 'TABLE,FILE';
CREATE DATABASE auto_test_remote;
USE auto_test_remote;
create table and insert
connection child2_1;
CHILD2_1_CREATE_TABLES
TRUNCATE TABLE mysql.general_log;
connection master_1;
CREATE TABLE tbl_a (
pkey int NOT NULL,
val int NOT NULL,
PRIMARY KEY (pkey)
) MASTER_1_ENGINE MASTER_1_CHARSET MASTER_1_COMMENT_2_1
INSERT INTO tbl_a (pkey,val) VALUES (0,0),(1,1),(2,2),(3,3),(4,4),(5,5),(6,6),(7,7),(8,8),(9,9);
SELECT pkey,val INTO OUTFILE 'MYSQLTEST_VARDIR/tmp/spider_outfile.tsv' FROM tbl_a ORDER BY pkey;
UPDATE tbl_a SET val = val + 1;
select test 1
connection child2_1;
TRUNCATE TABLE mysql.general_log;
connection master_1;
LOAD DATA INFILE 'MYSQLTEST_VARDIR/tmp/spider_outfile.tsv' IGNORE INTO TABLE tbl_a;
connection child2_1;
SELECT argument FROM mysql.general_log WHERE argument LIKE '%`tbl_a`%';
argument
insert high_priority ignore into `auto_test_remote`.`tbl_a`(`pkey`,`val`)values(0,0),(1,1),(2,2),(3,3),(4,4),(5,5),(6,6),(7,7),(8,8),(9,9)
SELECT argument FROM mysql.general_log WHERE argument LIKE '%`tbl_a`%'
SELECT pkey, val FROM tbl_a ORDER BY pkey;
pkey val
0 1
1 2
2 3
3 4
4 5
5 6
6 7
7 8
8 9
9 10
deinit
connection master_1;
DROP DATABASE IF EXISTS auto_test_local;
connection child2_1;
DROP DATABASE IF EXISTS auto_test_remote;
SET GLOBAL log_output = @old_log_output;
connection master_1;
set session spider_direct_dup_insert= @old_spider_direct_dup_insert;
for master_1
for child2
child2_1
child2_2
child2_3
for child3
end of test

View File

@ -0,0 +1,84 @@
for master_1
for child2
child2_1
child2_2
child2_3
for child3
connection master_1;
set @old_spider_direct_dup_insert= @@spider_direct_dup_insert;
set session spider_direct_dup_insert= 0;
this test is for MDEV-18987
drop and create databases
connection master_1;
CREATE DATABASE auto_test_local;
USE auto_test_local;
connection child2_1;
SET @old_log_output = @@global.log_output;
SET GLOBAL log_output = 'TABLE,FILE';
CREATE DATABASE auto_test_remote;
USE auto_test_remote;
create table and insert
connection child2_1;
CHILD2_1_CREATE_TABLES
TRUNCATE TABLE mysql.general_log;
connection master_1;
CREATE TABLE tbl_a (
pkey int NOT NULL,
val int NOT NULL,
PRIMARY KEY (pkey)
) MASTER_1_ENGINE MASTER_1_CHARSET MASTER_1_COMMENT_2_1
INSERT INTO tbl_a (pkey,val) VALUES (0,0),(1,1),(2,2),(3,3),(4,4),(5,5),(6,6),(7,7),(8,8),(9,9);
SELECT pkey,val INTO OUTFILE 'MYSQLTEST_VARDIR/tmp/spider_outfile.tsv' FROM tbl_a ORDER BY pkey;
TRUNCATE tbl_a;
select test 1
connection child2_1;
TRUNCATE TABLE mysql.general_log;
connection master_1;
LOAD DATA LOCAL INFILE 'MYSQLTEST_VARDIR/tmp/spider_outfile.tsv' INTO TABLE tbl_a;
connection child2_1;
SELECT argument FROM mysql.general_log WHERE argument LIKE '%`tbl_a`%';
argument
insert high_priority into `auto_test_remote`.`tbl_a`(`pkey`,`val`)values(0,0)
insert high_priority into `auto_test_remote`.`tbl_a`(`pkey`,`val`)values(1,1)
insert high_priority into `auto_test_remote`.`tbl_a`(`pkey`,`val`)values(2,2)
insert high_priority into `auto_test_remote`.`tbl_a`(`pkey`,`val`)values(3,3)
insert high_priority into `auto_test_remote`.`tbl_a`(`pkey`,`val`)values(4,4)
insert high_priority into `auto_test_remote`.`tbl_a`(`pkey`,`val`)values(5,5)
insert high_priority into `auto_test_remote`.`tbl_a`(`pkey`,`val`)values(6,6)
insert high_priority into `auto_test_remote`.`tbl_a`(`pkey`,`val`)values(7,7)
insert high_priority into `auto_test_remote`.`tbl_a`(`pkey`,`val`)values(8,8)
insert high_priority into `auto_test_remote`.`tbl_a`(`pkey`,`val`)values(9,9)
SELECT argument FROM mysql.general_log WHERE argument LIKE '%`tbl_a`%'
SELECT pkey, val FROM tbl_a ORDER BY pkey;
pkey val
0 0
1 1
2 2
3 3
4 4
5 5
6 6
7 7
8 8
9 9
deinit
connection master_1;
DROP DATABASE IF EXISTS auto_test_local;
connection child2_1;
DROP DATABASE IF EXISTS auto_test_remote;
SET GLOBAL log_output = @old_log_output;
connection master_1;
set session spider_direct_dup_insert= @old_spider_direct_dup_insert;
for master_1
for child2
child2_1
child2_2
child2_3
for child3
end of test

View File

@ -0,0 +1,75 @@
for master_1
for child2
child2_1
child2_2
child2_3
for child3
connection master_1;
set @old_spider_direct_dup_insert= @@spider_direct_dup_insert;
set session spider_direct_dup_insert= 1;
this test is for MDEV-18987
drop and create databases
connection master_1;
CREATE DATABASE auto_test_local;
USE auto_test_local;
connection child2_1;
SET @old_log_output = @@global.log_output;
SET GLOBAL log_output = 'TABLE,FILE';
CREATE DATABASE auto_test_remote;
USE auto_test_remote;
create table and insert
connection child2_1;
CHILD2_1_CREATE_TABLES
TRUNCATE TABLE mysql.general_log;
connection master_1;
CREATE TABLE tbl_a (
pkey int NOT NULL,
val int NOT NULL,
PRIMARY KEY (pkey)
) MASTER_1_ENGINE MASTER_1_CHARSET MASTER_1_COMMENT_2_1
INSERT INTO tbl_a (pkey,val) VALUES (0,0),(1,1),(2,2),(3,3),(4,4),(5,5),(6,6),(7,7),(8,8),(9,9);
SELECT pkey,val INTO OUTFILE 'MYSQLTEST_VARDIR/tmp/spider_outfile.tsv' FROM tbl_a ORDER BY pkey;
TRUNCATE tbl_a;
select test 1
connection child2_1;
TRUNCATE TABLE mysql.general_log;
connection master_1;
LOAD DATA LOCAL INFILE 'MYSQLTEST_VARDIR/tmp/spider_outfile.tsv' INTO TABLE tbl_a;
connection child2_1;
SELECT argument FROM mysql.general_log WHERE argument LIKE '%`tbl_a`%';
argument
insert high_priority ignore into `auto_test_remote`.`tbl_a`(`pkey`,`val`)values(0,0),(1,1),(2,2),(3,3),(4,4),(5,5),(6,6),(7,7),(8,8),(9,9)
SELECT argument FROM mysql.general_log WHERE argument LIKE '%`tbl_a`%'
SELECT pkey, val FROM tbl_a ORDER BY pkey;
pkey val
0 0
1 1
2 2
3 3
4 4
5 5
6 6
7 7
8 8
9 9
deinit
connection master_1;
DROP DATABASE IF EXISTS auto_test_local;
connection child2_1;
DROP DATABASE IF EXISTS auto_test_remote;
SET GLOBAL log_output = @old_log_output;
connection master_1;
set session spider_direct_dup_insert= @old_spider_direct_dup_insert;
for master_1
for child2
child2_1
child2_2
child2_3
for child3
end of test

View File

@ -0,0 +1,95 @@
for master_1
for child2
child2_1
child2_2
child2_3
for child3
connection master_1;
set @old_spider_direct_dup_insert= @@spider_direct_dup_insert;
set session spider_direct_dup_insert= 0;
this test is for MDEV-18987
drop and create databases
connection master_1;
CREATE DATABASE auto_test_local;
USE auto_test_local;
connection child2_1;
SET @old_log_output = @@global.log_output;
SET GLOBAL log_output = 'TABLE,FILE';
CREATE DATABASE auto_test_remote;
USE auto_test_remote;
create table and insert
connection child2_1;
CHILD2_1_CREATE_TABLES
TRUNCATE TABLE mysql.general_log;
connection master_1;
CREATE TABLE tbl_a (
pkey int NOT NULL,
val int NOT NULL,
PRIMARY KEY (pkey)
) MASTER_1_ENGINE MASTER_1_CHARSET MASTER_1_COMMENT_2_1
INSERT INTO tbl_a (pkey,val) VALUES (0,0),(1,1),(2,2),(3,3),(4,4),(5,5),(6,6),(7,7),(8,8),(9,9);
SELECT pkey,val INTO OUTFILE 'MYSQLTEST_VARDIR/tmp/spider_outfile.tsv' FROM tbl_a ORDER BY pkey;
UPDATE tbl_a SET val = val + 1;
select test 1
connection child2_1;
TRUNCATE TABLE mysql.general_log;
connection master_1;
LOAD DATA LOCAL INFILE 'MYSQLTEST_VARDIR/tmp/spider_outfile.tsv' IGNORE INTO TABLE tbl_a;
Warnings:
Warning 1062 Duplicate entry '0' for key 'PRIMARY'
Warning 1062 Duplicate entry '1' for key 'PRIMARY'
Warning 1062 Duplicate entry '2' for key 'PRIMARY'
Warning 1062 Duplicate entry '3' for key 'PRIMARY'
Warning 1062 Duplicate entry '4' for key 'PRIMARY'
Warning 1062 Duplicate entry '5' for key 'PRIMARY'
Warning 1062 Duplicate entry '6' for key 'PRIMARY'
Warning 1062 Duplicate entry '7' for key 'PRIMARY'
Warning 1062 Duplicate entry '8' for key 'PRIMARY'
Warning 1062 Duplicate entry '9' for key 'PRIMARY'
connection child2_1;
SELECT argument FROM mysql.general_log WHERE argument LIKE '%`tbl_a`%';
argument
insert high_priority into `auto_test_remote`.`tbl_a`(`pkey`,`val`)values(0,0)
insert high_priority into `auto_test_remote`.`tbl_a`(`pkey`,`val`)values(1,1)
insert high_priority into `auto_test_remote`.`tbl_a`(`pkey`,`val`)values(2,2)
insert high_priority into `auto_test_remote`.`tbl_a`(`pkey`,`val`)values(3,3)
insert high_priority into `auto_test_remote`.`tbl_a`(`pkey`,`val`)values(4,4)
insert high_priority into `auto_test_remote`.`tbl_a`(`pkey`,`val`)values(5,5)
insert high_priority into `auto_test_remote`.`tbl_a`(`pkey`,`val`)values(6,6)
insert high_priority into `auto_test_remote`.`tbl_a`(`pkey`,`val`)values(7,7)
insert high_priority into `auto_test_remote`.`tbl_a`(`pkey`,`val`)values(8,8)
insert high_priority into `auto_test_remote`.`tbl_a`(`pkey`,`val`)values(9,9)
SELECT argument FROM mysql.general_log WHERE argument LIKE '%`tbl_a`%'
SELECT pkey, val FROM tbl_a ORDER BY pkey;
pkey val
0 1
1 2
2 3
3 4
4 5
5 6
6 7
7 8
8 9
9 10
deinit
connection master_1;
DROP DATABASE IF EXISTS auto_test_local;
connection child2_1;
DROP DATABASE IF EXISTS auto_test_remote;
SET GLOBAL log_output = @old_log_output;
connection master_1;
set session spider_direct_dup_insert= @old_spider_direct_dup_insert;
for master_1
for child2
child2_1
child2_2
child2_3
for child3
end of test

View File

@ -0,0 +1,75 @@
for master_1
for child2
child2_1
child2_2
child2_3
for child3
connection master_1;
set @old_spider_direct_dup_insert= @@spider_direct_dup_insert;
set session spider_direct_dup_insert= 1;
this test is for MDEV-18987
drop and create databases
connection master_1;
CREATE DATABASE auto_test_local;
USE auto_test_local;
connection child2_1;
SET @old_log_output = @@global.log_output;
SET GLOBAL log_output = 'TABLE,FILE';
CREATE DATABASE auto_test_remote;
USE auto_test_remote;
create table and insert
connection child2_1;
CHILD2_1_CREATE_TABLES
TRUNCATE TABLE mysql.general_log;
connection master_1;
CREATE TABLE tbl_a (
pkey int NOT NULL,
val int NOT NULL,
PRIMARY KEY (pkey)
) MASTER_1_ENGINE MASTER_1_CHARSET MASTER_1_COMMENT_2_1
INSERT INTO tbl_a (pkey,val) VALUES (0,0),(1,1),(2,2),(3,3),(4,4),(5,5),(6,6),(7,7),(8,8),(9,9);
SELECT pkey,val INTO OUTFILE 'MYSQLTEST_VARDIR/tmp/spider_outfile.tsv' FROM tbl_a ORDER BY pkey;
UPDATE tbl_a SET val = val + 1;
select test 1
connection child2_1;
TRUNCATE TABLE mysql.general_log;
connection master_1;
LOAD DATA LOCAL INFILE 'MYSQLTEST_VARDIR/tmp/spider_outfile.tsv' IGNORE INTO TABLE tbl_a;
connection child2_1;
SELECT argument FROM mysql.general_log WHERE argument LIKE '%`tbl_a`%';
argument
insert high_priority ignore into `auto_test_remote`.`tbl_a`(`pkey`,`val`)values(0,0),(1,1),(2,2),(3,3),(4,4),(5,5),(6,6),(7,7),(8,8),(9,9)
SELECT argument FROM mysql.general_log WHERE argument LIKE '%`tbl_a`%'
SELECT pkey, val FROM tbl_a ORDER BY pkey;
pkey val
0 1
1 2
2 3
3 4
4 5
5 6
6 7
7 8
8 9
9 10
deinit
connection master_1;
DROP DATABASE IF EXISTS auto_test_local;
connection child2_1;
DROP DATABASE IF EXISTS auto_test_remote;
SET GLOBAL log_output = @old_log_output;
connection master_1;
set session spider_direct_dup_insert= @old_spider_direct_dup_insert;
for master_1
for child2
child2_1
child2_2
child2_3
for child3
end of test

View File

@ -0,0 +1,104 @@
for master_1
for child2
child2_1
child2_2
child2_3
for child3
connection master_1;
set @old_spider_direct_dup_insert= @@spider_direct_dup_insert;
set session spider_direct_dup_insert= 0;
this test is for MDEV-18987
drop and create databases
connection master_1;
CREATE DATABASE auto_test_local;
USE auto_test_local;
connection child2_1;
SET @old_log_output = @@global.log_output;
SET GLOBAL log_output = 'TABLE,FILE';
CREATE DATABASE auto_test_remote;
USE auto_test_remote;
create table and insert
connection child2_1;
CHILD2_1_CREATE_TABLES
TRUNCATE TABLE mysql.general_log;
connection master_1;
CREATE TABLE tbl_a (
pkey int NOT NULL,
val int NOT NULL,
PRIMARY KEY (pkey)
) MASTER_1_ENGINE MASTER_1_CHARSET MASTER_1_COMMENT_2_1
INSERT INTO tbl_a (pkey,val) VALUES (0,0),(1,1),(2,2),(3,3),(4,4),(5,5),(6,6),(7,7),(8,8),(9,9);
SELECT pkey,val INTO OUTFILE 'MYSQLTEST_VARDIR/tmp/spider_outfile.tsv' FROM tbl_a ORDER BY pkey;
UPDATE tbl_a SET val = val + 1;
select test 1
connection child2_1;
TRUNCATE TABLE mysql.general_log;
connection master_1;
LOAD DATA LOCAL INFILE 'MYSQLTEST_VARDIR/tmp/spider_outfile.tsv' REPLACE INTO TABLE tbl_a;
connection child2_1;
SELECT argument FROM mysql.general_log WHERE argument LIKE '%`tbl_a`%';
argument
insert into `auto_test_remote`.`tbl_a`(`pkey`,`val`)values(0,0)
select `pkey`,`val` from `auto_test_remote`.`tbl_a` where `pkey` = 0 for update
update ignore `auto_test_remote`.`tbl_a` set `pkey` = 0,`val` = 0 where `pkey` = 0 and `val` = 1 limit 1
insert into `auto_test_remote`.`tbl_a`(`pkey`,`val`)values(1,1)
select `pkey`,`val` from `auto_test_remote`.`tbl_a` where `pkey` = 1 for update
update ignore `auto_test_remote`.`tbl_a` set `pkey` = 1,`val` = 1 where `pkey` = 1 and `val` = 2 limit 1
insert into `auto_test_remote`.`tbl_a`(`pkey`,`val`)values(2,2)
select `pkey`,`val` from `auto_test_remote`.`tbl_a` where `pkey` = 2 for update
update ignore `auto_test_remote`.`tbl_a` set `pkey` = 2,`val` = 2 where `pkey` = 2 and `val` = 3 limit 1
insert into `auto_test_remote`.`tbl_a`(`pkey`,`val`)values(3,3)
select `pkey`,`val` from `auto_test_remote`.`tbl_a` where `pkey` = 3 for update
update ignore `auto_test_remote`.`tbl_a` set `pkey` = 3,`val` = 3 where `pkey` = 3 and `val` = 4 limit 1
insert into `auto_test_remote`.`tbl_a`(`pkey`,`val`)values(4,4)
select `pkey`,`val` from `auto_test_remote`.`tbl_a` where `pkey` = 4 for update
update ignore `auto_test_remote`.`tbl_a` set `pkey` = 4,`val` = 4 where `pkey` = 4 and `val` = 5 limit 1
insert into `auto_test_remote`.`tbl_a`(`pkey`,`val`)values(5,5)
select `pkey`,`val` from `auto_test_remote`.`tbl_a` where `pkey` = 5 for update
update ignore `auto_test_remote`.`tbl_a` set `pkey` = 5,`val` = 5 where `pkey` = 5 and `val` = 6 limit 1
insert into `auto_test_remote`.`tbl_a`(`pkey`,`val`)values(6,6)
select `pkey`,`val` from `auto_test_remote`.`tbl_a` where `pkey` = 6 for update
update ignore `auto_test_remote`.`tbl_a` set `pkey` = 6,`val` = 6 where `pkey` = 6 and `val` = 7 limit 1
insert into `auto_test_remote`.`tbl_a`(`pkey`,`val`)values(7,7)
select `pkey`,`val` from `auto_test_remote`.`tbl_a` where `pkey` = 7 for update
update ignore `auto_test_remote`.`tbl_a` set `pkey` = 7,`val` = 7 where `pkey` = 7 and `val` = 8 limit 1
insert into `auto_test_remote`.`tbl_a`(`pkey`,`val`)values(8,8)
select `pkey`,`val` from `auto_test_remote`.`tbl_a` where `pkey` = 8 for update
update ignore `auto_test_remote`.`tbl_a` set `pkey` = 8,`val` = 8 where `pkey` = 8 and `val` = 9 limit 1
insert into `auto_test_remote`.`tbl_a`(`pkey`,`val`)values(9,9)
select `pkey`,`val` from `auto_test_remote`.`tbl_a` where `pkey` = 9 for update
update ignore `auto_test_remote`.`tbl_a` set `pkey` = 9,`val` = 9 where `pkey` = 9 and `val` = 10 limit 1
SELECT argument FROM mysql.general_log WHERE argument LIKE '%`tbl_a`%'
SELECT pkey, val FROM tbl_a ORDER BY pkey;
pkey val
0 0
1 1
2 2
3 3
4 4
5 5
6 6
7 7
8 8
9 9
deinit
connection master_1;
DROP DATABASE IF EXISTS auto_test_local;
connection child2_1;
DROP DATABASE IF EXISTS auto_test_remote;
SET GLOBAL log_output = @old_log_output;
connection master_1;
set session spider_direct_dup_insert= @old_spider_direct_dup_insert;
for master_1
for child2
child2_1
child2_2
child2_3
for child3
end of test

View File

@ -0,0 +1,75 @@
for master_1
for child2
child2_1
child2_2
child2_3
for child3
connection master_1;
set @old_spider_direct_dup_insert= @@spider_direct_dup_insert;
set session spider_direct_dup_insert= 1;
this test is for MDEV-18987
drop and create databases
connection master_1;
CREATE DATABASE auto_test_local;
USE auto_test_local;
connection child2_1;
SET @old_log_output = @@global.log_output;
SET GLOBAL log_output = 'TABLE,FILE';
CREATE DATABASE auto_test_remote;
USE auto_test_remote;
create table and insert
connection child2_1;
CHILD2_1_CREATE_TABLES
TRUNCATE TABLE mysql.general_log;
connection master_1;
CREATE TABLE tbl_a (
pkey int NOT NULL,
val int NOT NULL,
PRIMARY KEY (pkey)
) MASTER_1_ENGINE MASTER_1_CHARSET MASTER_1_COMMENT_2_1
INSERT INTO tbl_a (pkey,val) VALUES (0,0),(1,1),(2,2),(3,3),(4,4),(5,5),(6,6),(7,7),(8,8),(9,9);
SELECT pkey,val INTO OUTFILE 'MYSQLTEST_VARDIR/tmp/spider_outfile.tsv' FROM tbl_a ORDER BY pkey;
UPDATE tbl_a SET val = val + 1;
select test 1
connection child2_1;
TRUNCATE TABLE mysql.general_log;
connection master_1;
LOAD DATA LOCAL INFILE 'MYSQLTEST_VARDIR/tmp/spider_outfile.tsv' REPLACE INTO TABLE tbl_a;
connection child2_1;
SELECT argument FROM mysql.general_log WHERE argument LIKE '%`tbl_a`%';
argument
replace into `auto_test_remote`.`tbl_a`(`pkey`,`val`)values(0,0),(1,1),(2,2),(3,3),(4,4),(5,5),(6,6),(7,7),(8,8),(9,9)
SELECT argument FROM mysql.general_log WHERE argument LIKE '%`tbl_a`%'
SELECT pkey, val FROM tbl_a ORDER BY pkey;
pkey val
0 0
1 1
2 2
3 3
4 4
5 5
6 6
7 7
8 8
9 9
deinit
connection master_1;
DROP DATABASE IF EXISTS auto_test_local;
connection child2_1;
DROP DATABASE IF EXISTS auto_test_remote;
SET GLOBAL log_output = @old_log_output;
connection master_1;
set session spider_direct_dup_insert= @old_spider_direct_dup_insert;
for master_1
for child2
child2_1
child2_2
child2_3
for child3
end of test

View File

@ -0,0 +1,104 @@
for master_1
for child2
child2_1
child2_2
child2_3
for child3
connection master_1;
set @old_spider_direct_dup_insert= @@spider_direct_dup_insert;
set session spider_direct_dup_insert= 0;
this test is for MDEV-18987
drop and create databases
connection master_1;
CREATE DATABASE auto_test_local;
USE auto_test_local;
connection child2_1;
SET @old_log_output = @@global.log_output;
SET GLOBAL log_output = 'TABLE,FILE';
CREATE DATABASE auto_test_remote;
USE auto_test_remote;
create table and insert
connection child2_1;
CHILD2_1_CREATE_TABLES
TRUNCATE TABLE mysql.general_log;
connection master_1;
CREATE TABLE tbl_a (
pkey int NOT NULL,
val int NOT NULL,
PRIMARY KEY (pkey)
) MASTER_1_ENGINE MASTER_1_CHARSET MASTER_1_COMMENT_2_1
INSERT INTO tbl_a (pkey,val) VALUES (0,0),(1,1),(2,2),(3,3),(4,4),(5,5),(6,6),(7,7),(8,8),(9,9);
SELECT pkey,val INTO OUTFILE 'MYSQLTEST_VARDIR/tmp/spider_outfile.tsv' FROM tbl_a ORDER BY pkey;
UPDATE tbl_a SET val = val + 1;
select test 1
connection child2_1;
TRUNCATE TABLE mysql.general_log;
connection master_1;
LOAD DATA INFILE 'MYSQLTEST_VARDIR/tmp/spider_outfile.tsv' REPLACE INTO TABLE tbl_a;
connection child2_1;
SELECT argument FROM mysql.general_log WHERE argument LIKE '%`tbl_a`%';
argument
insert into `auto_test_remote`.`tbl_a`(`pkey`,`val`)values(0,0)
select `pkey`,`val` from `auto_test_remote`.`tbl_a` where `pkey` = 0 for update
update ignore `auto_test_remote`.`tbl_a` set `pkey` = 0,`val` = 0 where `pkey` = 0 and `val` = 1 limit 1
insert into `auto_test_remote`.`tbl_a`(`pkey`,`val`)values(1,1)
select `pkey`,`val` from `auto_test_remote`.`tbl_a` where `pkey` = 1 for update
update ignore `auto_test_remote`.`tbl_a` set `pkey` = 1,`val` = 1 where `pkey` = 1 and `val` = 2 limit 1
insert into `auto_test_remote`.`tbl_a`(`pkey`,`val`)values(2,2)
select `pkey`,`val` from `auto_test_remote`.`tbl_a` where `pkey` = 2 for update
update ignore `auto_test_remote`.`tbl_a` set `pkey` = 2,`val` = 2 where `pkey` = 2 and `val` = 3 limit 1
insert into `auto_test_remote`.`tbl_a`(`pkey`,`val`)values(3,3)
select `pkey`,`val` from `auto_test_remote`.`tbl_a` where `pkey` = 3 for update
update ignore `auto_test_remote`.`tbl_a` set `pkey` = 3,`val` = 3 where `pkey` = 3 and `val` = 4 limit 1
insert into `auto_test_remote`.`tbl_a`(`pkey`,`val`)values(4,4)
select `pkey`,`val` from `auto_test_remote`.`tbl_a` where `pkey` = 4 for update
update ignore `auto_test_remote`.`tbl_a` set `pkey` = 4,`val` = 4 where `pkey` = 4 and `val` = 5 limit 1
insert into `auto_test_remote`.`tbl_a`(`pkey`,`val`)values(5,5)
select `pkey`,`val` from `auto_test_remote`.`tbl_a` where `pkey` = 5 for update
update ignore `auto_test_remote`.`tbl_a` set `pkey` = 5,`val` = 5 where `pkey` = 5 and `val` = 6 limit 1
insert into `auto_test_remote`.`tbl_a`(`pkey`,`val`)values(6,6)
select `pkey`,`val` from `auto_test_remote`.`tbl_a` where `pkey` = 6 for update
update ignore `auto_test_remote`.`tbl_a` set `pkey` = 6,`val` = 6 where `pkey` = 6 and `val` = 7 limit 1
insert into `auto_test_remote`.`tbl_a`(`pkey`,`val`)values(7,7)
select `pkey`,`val` from `auto_test_remote`.`tbl_a` where `pkey` = 7 for update
update ignore `auto_test_remote`.`tbl_a` set `pkey` = 7,`val` = 7 where `pkey` = 7 and `val` = 8 limit 1
insert into `auto_test_remote`.`tbl_a`(`pkey`,`val`)values(8,8)
select `pkey`,`val` from `auto_test_remote`.`tbl_a` where `pkey` = 8 for update
update ignore `auto_test_remote`.`tbl_a` set `pkey` = 8,`val` = 8 where `pkey` = 8 and `val` = 9 limit 1
insert into `auto_test_remote`.`tbl_a`(`pkey`,`val`)values(9,9)
select `pkey`,`val` from `auto_test_remote`.`tbl_a` where `pkey` = 9 for update
update ignore `auto_test_remote`.`tbl_a` set `pkey` = 9,`val` = 9 where `pkey` = 9 and `val` = 10 limit 1
SELECT argument FROM mysql.general_log WHERE argument LIKE '%`tbl_a`%'
SELECT pkey, val FROM tbl_a ORDER BY pkey;
pkey val
0 0
1 1
2 2
3 3
4 4
5 5
6 6
7 7
8 8
9 9
deinit
connection master_1;
DROP DATABASE IF EXISTS auto_test_local;
connection child2_1;
DROP DATABASE IF EXISTS auto_test_remote;
SET GLOBAL log_output = @old_log_output;
connection master_1;
set session spider_direct_dup_insert= @old_spider_direct_dup_insert;
for master_1
for child2
child2_1
child2_2
child2_3
for child3
end of test

View File

@ -0,0 +1,75 @@
for master_1
for child2
child2_1
child2_2
child2_3
for child3
connection master_1;
set @old_spider_direct_dup_insert= @@spider_direct_dup_insert;
set session spider_direct_dup_insert= 1;
this test is for MDEV-18987
drop and create databases
connection master_1;
CREATE DATABASE auto_test_local;
USE auto_test_local;
connection child2_1;
SET @old_log_output = @@global.log_output;
SET GLOBAL log_output = 'TABLE,FILE';
CREATE DATABASE auto_test_remote;
USE auto_test_remote;
create table and insert
connection child2_1;
CHILD2_1_CREATE_TABLES
TRUNCATE TABLE mysql.general_log;
connection master_1;
CREATE TABLE tbl_a (
pkey int NOT NULL,
val int NOT NULL,
PRIMARY KEY (pkey)
) MASTER_1_ENGINE MASTER_1_CHARSET MASTER_1_COMMENT_2_1
INSERT INTO tbl_a (pkey,val) VALUES (0,0),(1,1),(2,2),(3,3),(4,4),(5,5),(6,6),(7,7),(8,8),(9,9);
SELECT pkey,val INTO OUTFILE 'MYSQLTEST_VARDIR/tmp/spider_outfile.tsv' FROM tbl_a ORDER BY pkey;
UPDATE tbl_a SET val = val + 1;
select test 1
connection child2_1;
TRUNCATE TABLE mysql.general_log;
connection master_1;
LOAD DATA INFILE 'MYSQLTEST_VARDIR/tmp/spider_outfile.tsv' REPLACE INTO TABLE tbl_a;
connection child2_1;
SELECT argument FROM mysql.general_log WHERE argument LIKE '%`tbl_a`%';
argument
replace into `auto_test_remote`.`tbl_a`(`pkey`,`val`)values(0,0),(1,1),(2,2),(3,3),(4,4),(5,5),(6,6),(7,7),(8,8),(9,9)
SELECT argument FROM mysql.general_log WHERE argument LIKE '%`tbl_a`%'
SELECT pkey, val FROM tbl_a ORDER BY pkey;
pkey val
0 0
1 1
2 2
3 3
4 4
5 5
6 6
7 7
8 8
9 9
deinit
connection master_1;
DROP DATABASE IF EXISTS auto_test_local;
connection child2_1;
DROP DATABASE IF EXISTS auto_test_remote;
SET GLOBAL log_output = @old_log_output;
connection master_1;
set session spider_direct_dup_insert= @old_spider_direct_dup_insert;
for master_1
for child2
child2_1
child2_2
child2_3
for child3
end of test

View File

@ -0,0 +1,76 @@
--echo
--echo this test is for MDEV-18987
--echo
--echo drop and create databases
--connection master_1
--disable_warnings
CREATE DATABASE auto_test_local;
USE auto_test_local;
--connection child2_1
SET @old_log_output = @@global.log_output;
SET GLOBAL log_output = 'TABLE,FILE';
CREATE DATABASE auto_test_remote;
USE auto_test_remote;
--enable_warnings
--echo
--echo create table and insert
--connection child2_1
--disable_query_log
echo CHILD2_1_CREATE_TABLES;
eval $CHILD2_1_CREATE_TABLES;
--enable_query_log
TRUNCATE TABLE mysql.general_log;
--connection master_1
--disable_query_log
echo CREATE TABLE tbl_a (
pkey int NOT NULL,
val int NOT NULL,
PRIMARY KEY (pkey)
) MASTER_1_ENGINE MASTER_1_CHARSET MASTER_1_COMMENT_2_1;
eval CREATE TABLE tbl_a (
pkey int NOT NULL,
val int NOT NULL,
PRIMARY KEY (pkey)
) $MASTER_1_ENGINE $MASTER_1_CHARSET $MASTER_1_COMMENT_2_1;
--enable_query_log
INSERT INTO tbl_a (pkey,val) VALUES (0,0),(1,1),(2,2),(3,3),(4,4),(5,5),(6,6),(7,7),(8,8),(9,9);
--disable_query_log
--echo SELECT pkey,val INTO OUTFILE 'MYSQLTEST_VARDIR/tmp/spider_outfile.tsv' FROM tbl_a ORDER BY pkey;
eval SELECT pkey,val INTO OUTFILE '$MYSQLTEST_VARDIR/tmp/spider_outfile.tsv' FROM tbl_a ORDER BY pkey;
--enable_query_log
eval $COMMAND_BEFORE_LOAD_DATA;
--echo
--echo select test 1
--connection child2_1
TRUNCATE TABLE mysql.general_log;
--connection master_1
--disable_query_log
--echo LOAD DATA $OPTION_LOCAL INFILE 'MYSQLTEST_VARDIR/tmp/spider_outfile.tsv' $OPTION_WORD INTO TABLE tbl_a;
eval LOAD DATA $OPTION_LOCAL INFILE '$MYSQLTEST_VARDIR/tmp/spider_outfile.tsv' $OPTION_WORD INTO TABLE tbl_a;
--enable_query_log
--remove_file $MYSQLTEST_VARDIR/tmp/spider_outfile.tsv
--connection child2_1
eval $CHILD2_1_SELECT_ARGUMENT1;
eval $CHILD2_1_SELECT_TABLES;
--echo
--echo deinit
--disable_warnings
--connection master_1
DROP DATABASE IF EXISTS auto_test_local;
--connection child2_1
DROP DATABASE IF EXISTS auto_test_remote;
SET GLOBAL log_output = @old_log_output;
--enable_warnings

View File

@ -0,0 +1,8 @@
--source ../include/load_data_ddi0_init.inc
--let COMMAND_BEFORE_LOAD_DATA= TRUNCATE tbl_a
--let OPTION_LOCAL=
--let OPTION_WORD=
--source load_data.inc
--source ../include/load_data_ddi0_deinit.inc
--echo
--echo end of test

View File

@ -0,0 +1,8 @@
--source ../include/load_data_ddi1_init.inc
--let COMMAND_BEFORE_LOAD_DATA= TRUNCATE tbl_a
--let OPTION_LOCAL=
--let OPTION_WORD=
--source load_data.inc
--source ../include/load_data_ddi1_deinit.inc
--echo
--echo end of test

View File

@ -0,0 +1,8 @@
--source ../include/load_data_ddi0_init.inc
--let COMMAND_BEFORE_LOAD_DATA= UPDATE tbl_a SET val = val + 1
--let OPTION_LOCAL=
--let OPTION_WORD= IGNORE
--source load_data.inc
--source ../include/load_data_ddi0_deinit.inc
--echo
--echo end of test

View File

@ -0,0 +1,8 @@
--source ../include/load_data_ddi1_init.inc
--let COMMAND_BEFORE_LOAD_DATA= UPDATE tbl_a SET val = val + 1
--let OPTION_LOCAL=
--let OPTION_WORD= IGNORE
--source load_data.inc
--source ../include/load_data_ddi1_deinit.inc
--echo
--echo end of test

View File

@ -0,0 +1,8 @@
--source ../include/load_data_ddi0_init.inc
--let COMMAND_BEFORE_LOAD_DATA= TRUNCATE tbl_a
--let OPTION_LOCAL= LOCAL
--let OPTION_WORD=
--source load_data.inc
--source ../include/load_data_ddi0_deinit.inc
--echo
--echo end of test

View File

@ -0,0 +1,8 @@
--source ../include/load_data_ddi1_init.inc
--let COMMAND_BEFORE_LOAD_DATA= TRUNCATE tbl_a
--let OPTION_LOCAL= LOCAL
--let OPTION_WORD=
--source load_data.inc
--source ../include/load_data_ddi1_deinit.inc
--echo
--echo end of test

View File

@ -0,0 +1,8 @@
--source ../include/load_data_ddi0_init.inc
--let COMMAND_BEFORE_LOAD_DATA= UPDATE tbl_a SET val = val + 1
--let OPTION_LOCAL= LOCAL
--let OPTION_WORD= IGNORE
--source load_data.inc
--source ../include/load_data_ddi0_deinit.inc
--echo
--echo end of test

View File

@ -0,0 +1,8 @@
--source ../include/load_data_ddi1_init.inc
--let COMMAND_BEFORE_LOAD_DATA= UPDATE tbl_a SET val = val + 1
--let OPTION_LOCAL= LOCAL
--let OPTION_WORD= IGNORE
--source load_data.inc
--source ../include/load_data_ddi1_deinit.inc
--echo
--echo end of test

View File

@ -0,0 +1,8 @@
--source ../include/load_data_ddi0_init.inc
--let COMMAND_BEFORE_LOAD_DATA= UPDATE tbl_a SET val = val + 1
--let OPTION_LOCAL= LOCAL
--let OPTION_WORD= REPLACE
--source load_data.inc
--source ../include/load_data_ddi0_deinit.inc
--echo
--echo end of test

View File

@ -0,0 +1,8 @@
--source ../include/load_data_ddi1_init.inc
--let COMMAND_BEFORE_LOAD_DATA= UPDATE tbl_a SET val = val + 1
--let OPTION_LOCAL= LOCAL
--let OPTION_WORD= REPLACE
--source load_data.inc
--source ../include/load_data_ddi1_deinit.inc
--echo
--echo end of test

View File

@ -0,0 +1,8 @@
--source ../include/load_data_ddi0_init.inc
--let COMMAND_BEFORE_LOAD_DATA= UPDATE tbl_a SET val = val + 1
--let OPTION_LOCAL=
--let OPTION_WORD= REPLACE
--source load_data.inc
--source ../include/load_data_ddi0_deinit.inc
--echo
--echo end of test

View File

@ -0,0 +1,8 @@
--source ../include/load_data_ddi1_init.inc
--let COMMAND_BEFORE_LOAD_DATA= UPDATE tbl_a SET val = val + 1
--let OPTION_LOCAL=
--let OPTION_WORD= REPLACE
--source load_data.inc
--source ../include/load_data_ddi1_deinit.inc
--echo
--echo end of test

View File

@ -0,0 +1,3 @@
--connection master_1
set session spider_direct_dup_insert= @old_spider_direct_dup_insert;
--source load_data_part_deinit.inc

View File

@ -0,0 +1,4 @@
--source load_data_part_init.inc
--connection master_1
set @old_spider_direct_dup_insert= @@spider_direct_dup_insert;
set session spider_direct_dup_insert= 0;

View File

@ -0,0 +1,3 @@
--connection master_1
set session spider_direct_dup_insert= @old_spider_direct_dup_insert;
--source load_data_part_deinit.inc

View File

@ -0,0 +1,4 @@
--source load_data_part_init.inc
--connection master_1
set @old_spider_direct_dup_insert= @@spider_direct_dup_insert;
set session spider_direct_dup_insert= 1;

View File

@ -0,0 +1,14 @@
--let $MASTER_1_COMMENT_2_1= $MASTER_1_COMMENT_2_1_BACKUP
--let $CHILD2_1_DROP_TABLES= $CHILD2_1_DROP_TABLES_BACKUP
--let $CHILD2_1_CREATE_TABLES= $CHILD2_1_CREATE_TABLES_BACKUP
--let $CHILD2_1_SELECT_TABLES= $CHILD2_1_SELECT_TABLES_BACKUP
--let $CHILD2_2_DROP_TABLES= $CHILD2_2_DROP_TABLES_BACKUP
--let $CHILD2_2_CREATE_TABLES= $CHILD2_2_CREATE_TABLES_BACKUP
--let $CHILD2_2_SELECT_TABLES= $CHILD2_2_SELECT_TABLES_BACKUP
--disable_warnings
--disable_query_log
--disable_result_log
--source ../../t/test_deinit.inc
--enable_result_log
--enable_query_log
--enable_warnings

View File

@ -0,0 +1,52 @@
--disable_warnings
--disable_query_log
--disable_result_log
--source ../../t/test_init.inc
if (!$HAVE_PARTITION)
{
--source load_data_part_deinit.inc
--enable_result_log
--enable_query_log
--enable_warnings
skip Test requires partitioning;
}
--enable_result_log
--enable_query_log
--enable_warnings
--let $MASTER_1_COMMENT_2_1_BACKUP= $MASTER_1_COMMENT_2_1
let $MASTER_1_COMMENT_2_1=
COMMENT='table "tbl_a"'
PARTITION BY KEY(pkey) (
PARTITION pt1 COMMENT='srv "s_2_1"',
PARTITION pt2 COMMENT='srv "s_2_2"'
);
--let $CHILD2_1_DROP_TABLES_BACKUP= $CHILD2_1_DROP_TABLES
let $CHILD2_1_DROP_TABLES=
DROP TABLE IF EXISTS tbl_a;
--let $CHILD2_1_CREATE_TABLES_BACKUP= $CHILD2_1_CREATE_TABLES
let $CHILD2_1_CREATE_TABLES=
CREATE TABLE tbl_a (
pkey int NOT NULL,
val int NOT NULL,
PRIMARY KEY (pkey)
) $CHILD2_1_ENGINE $CHILD2_1_CHARSET;
--let $CHILD2_1_SELECT_TABLES_BACKUP= $CHILD2_1_SELECT_TABLES
let $CHILD2_1_SELECT_TABLES=
SELECT pkey, val FROM tbl_a ORDER BY pkey;
let $CHILD2_1_SELECT_ARGUMENT1=
SELECT argument FROM mysql.general_log WHERE argument LIKE '%`tbl_a`%';
--let $CHILD2_2_DROP_TABLES_BACKUP= $CHILD2_2_DROP_TABLES
let $CHILD2_2_DROP_TABLES=
DROP TABLE IF EXISTS tbl_a;
--let $CHILD2_2_CREATE_TABLES_BACKUP= $CHILD2_2_CREATE_TABLES
let $CHILD2_2_CREATE_TABLES=
CREATE TABLE tbl_a (
pkey int NOT NULL,
val int NOT NULL,
PRIMARY KEY (pkey)
) $CHILD2_2_ENGINE $CHILD2_2_CHARSET;
--let $CHILD2_2_SELECT_TABLES_BACKUP= $CHILD2_2_SELECT_TABLES
let $CHILD2_2_SELECT_TABLES=
SELECT pkey, val FROM tbl_a ORDER BY pkey;
let $CHILD2_2_SELECT_ARGUMENT1=
SELECT argument FROM mysql.general_log WHERE argument LIKE '%`tbl_a`%';

View File

@ -0,0 +1,95 @@
for master_1
for child2
child2_1
child2_2
child2_3
for child3
connection master_1;
set @old_spider_direct_dup_insert= @@spider_direct_dup_insert;
set session spider_direct_dup_insert= 0;
this test is for MDEV-18987
drop and create databases
connection master_1;
CREATE DATABASE auto_test_local;
USE auto_test_local;
connection child2_1;
SET @old_log_output = @@global.log_output;
SET GLOBAL log_output = 'TABLE,FILE';
CREATE DATABASE auto_test_remote;
USE auto_test_remote;
connection child2_2;
SET @old_log_output = @@global.log_output;
SET GLOBAL log_output = 'TABLE,FILE';
CREATE DATABASE auto_test_remote2;
USE auto_test_remote2;
create table and insert
connection child2_1;
CHILD2_1_CREATE_TABLES
TRUNCATE TABLE mysql.general_log;
connection child2_2;
CHILD2_2_CREATE_TABLES
TRUNCATE TABLE mysql.general_log;
connection master_1;
CREATE TABLE tbl_a (
pkey int NOT NULL,
val int NOT NULL,
PRIMARY KEY (pkey)
) MASTER_1_ENGINE MASTER_1_CHARSET MASTER_1_COMMENT_2_1
INSERT INTO tbl_a (pkey,val) VALUES (0,0),(1,1),(2,2),(3,3),(4,4),(5,5),(6,6),(7,7),(8,8),(9,9);
SELECT pkey,val INTO OUTFILE 'MYSQLTEST_VARDIR/tmp/spider_outfile.tsv' FROM tbl_a ORDER BY pkey;
TRUNCATE tbl_a;
select test 1
connection child2_1;
TRUNCATE TABLE mysql.general_log;
connection child2_2;
TRUNCATE TABLE mysql.general_log;
connection master_1;
LOAD DATA INFILE 'MYSQLTEST_VARDIR/tmp/spider_outfile.tsv' INTO TABLE tbl_a;
connection child2_1;
SELECT argument FROM mysql.general_log WHERE argument LIKE '%`tbl_a`%';
argument
insert high_priority into `auto_test_remote`.`tbl_a`(`pkey`,`val`)values(1,1),(3,3),(5,5),(7,7),(9,9)
SELECT argument FROM mysql.general_log WHERE argument LIKE '%`tbl_a`%'
SELECT pkey, val FROM tbl_a ORDER BY pkey;
pkey val
1 1
3 3
5 5
7 7
9 9
connection child2_2;
SELECT argument FROM mysql.general_log WHERE argument LIKE '%`tbl_a`%';
argument
insert high_priority into `auto_test_remote2`.`tbl_a`(`pkey`,`val`)values(0,0),(2,2),(4,4),(6,6),(8,8)
SELECT argument FROM mysql.general_log WHERE argument LIKE '%`tbl_a`%'
SELECT pkey, val FROM tbl_a ORDER BY pkey;
pkey val
0 0
2 2
4 4
6 6
8 8
deinit
connection master_1;
DROP DATABASE IF EXISTS auto_test_local;
connection child2_1;
DROP DATABASE IF EXISTS auto_test_remote;
SET GLOBAL log_output = @old_log_output;
connection child2_2;
DROP DATABASE IF EXISTS auto_test_remote2;
SET GLOBAL log_output = @old_log_output;
connection master_1;
set session spider_direct_dup_insert= @old_spider_direct_dup_insert;
for master_1
for child2
child2_1
child2_2
child2_3
for child3
end of test

View File

@ -0,0 +1,95 @@
for master_1
for child2
child2_1
child2_2
child2_3
for child3
connection master_1;
set @old_spider_direct_dup_insert= @@spider_direct_dup_insert;
set session spider_direct_dup_insert= 1;
this test is for MDEV-18987
drop and create databases
connection master_1;
CREATE DATABASE auto_test_local;
USE auto_test_local;
connection child2_1;
SET @old_log_output = @@global.log_output;
SET GLOBAL log_output = 'TABLE,FILE';
CREATE DATABASE auto_test_remote;
USE auto_test_remote;
connection child2_2;
SET @old_log_output = @@global.log_output;
SET GLOBAL log_output = 'TABLE,FILE';
CREATE DATABASE auto_test_remote2;
USE auto_test_remote2;
create table and insert
connection child2_1;
CHILD2_1_CREATE_TABLES
TRUNCATE TABLE mysql.general_log;
connection child2_2;
CHILD2_2_CREATE_TABLES
TRUNCATE TABLE mysql.general_log;
connection master_1;
CREATE TABLE tbl_a (
pkey int NOT NULL,
val int NOT NULL,
PRIMARY KEY (pkey)
) MASTER_1_ENGINE MASTER_1_CHARSET MASTER_1_COMMENT_2_1
INSERT INTO tbl_a (pkey,val) VALUES (0,0),(1,1),(2,2),(3,3),(4,4),(5,5),(6,6),(7,7),(8,8),(9,9);
SELECT pkey,val INTO OUTFILE 'MYSQLTEST_VARDIR/tmp/spider_outfile.tsv' FROM tbl_a ORDER BY pkey;
TRUNCATE tbl_a;
select test 1
connection child2_1;
TRUNCATE TABLE mysql.general_log;
connection child2_2;
TRUNCATE TABLE mysql.general_log;
connection master_1;
LOAD DATA INFILE 'MYSQLTEST_VARDIR/tmp/spider_outfile.tsv' INTO TABLE tbl_a;
connection child2_1;
SELECT argument FROM mysql.general_log WHERE argument LIKE '%`tbl_a`%';
argument
insert high_priority into `auto_test_remote`.`tbl_a`(`pkey`,`val`)values(1,1),(3,3),(5,5),(7,7),(9,9)
SELECT argument FROM mysql.general_log WHERE argument LIKE '%`tbl_a`%'
SELECT pkey, val FROM tbl_a ORDER BY pkey;
pkey val
1 1
3 3
5 5
7 7
9 9
connection child2_2;
SELECT argument FROM mysql.general_log WHERE argument LIKE '%`tbl_a`%';
argument
insert high_priority into `auto_test_remote2`.`tbl_a`(`pkey`,`val`)values(0,0),(2,2),(4,4),(6,6),(8,8)
SELECT argument FROM mysql.general_log WHERE argument LIKE '%`tbl_a`%'
SELECT pkey, val FROM tbl_a ORDER BY pkey;
pkey val
0 0
2 2
4 4
6 6
8 8
deinit
connection master_1;
DROP DATABASE IF EXISTS auto_test_local;
connection child2_1;
DROP DATABASE IF EXISTS auto_test_remote;
SET GLOBAL log_output = @old_log_output;
connection child2_2;
DROP DATABASE IF EXISTS auto_test_remote2;
SET GLOBAL log_output = @old_log_output;
connection master_1;
set session spider_direct_dup_insert= @old_spider_direct_dup_insert;
for master_1
for child2
child2_1
child2_2
child2_3
for child3
end of test

View File

@ -0,0 +1,114 @@
for master_1
for child2
child2_1
child2_2
child2_3
for child3
connection master_1;
set @old_spider_direct_dup_insert= @@spider_direct_dup_insert;
set session spider_direct_dup_insert= 0;
this test is for MDEV-18987
drop and create databases
connection master_1;
CREATE DATABASE auto_test_local;
USE auto_test_local;
connection child2_1;
SET @old_log_output = @@global.log_output;
SET GLOBAL log_output = 'TABLE,FILE';
CREATE DATABASE auto_test_remote;
USE auto_test_remote;
connection child2_2;
SET @old_log_output = @@global.log_output;
SET GLOBAL log_output = 'TABLE,FILE';
CREATE DATABASE auto_test_remote2;
USE auto_test_remote2;
create table and insert
connection child2_1;
CHILD2_1_CREATE_TABLES
TRUNCATE TABLE mysql.general_log;
connection child2_2;
CHILD2_2_CREATE_TABLES
TRUNCATE TABLE mysql.general_log;
connection master_1;
CREATE TABLE tbl_a (
pkey int NOT NULL,
val int NOT NULL,
PRIMARY KEY (pkey)
) MASTER_1_ENGINE MASTER_1_CHARSET MASTER_1_COMMENT_2_1
INSERT INTO tbl_a (pkey,val) VALUES (0,0),(1,1),(2,2),(3,3),(4,4),(5,5),(6,6),(7,7),(8,8),(9,9);
SELECT pkey,val INTO OUTFILE 'MYSQLTEST_VARDIR/tmp/spider_outfile.tsv' FROM tbl_a ORDER BY pkey;
UPDATE tbl_a SET val = val + 1;
select test 1
connection child2_1;
TRUNCATE TABLE mysql.general_log;
connection child2_2;
TRUNCATE TABLE mysql.general_log;
connection master_1;
LOAD DATA INFILE 'MYSQLTEST_VARDIR/tmp/spider_outfile.tsv' IGNORE INTO TABLE tbl_a;
Warnings:
Warning 1062 Duplicate entry '0' for key 'PRIMARY'
Warning 1062 Duplicate entry '1' for key 'PRIMARY'
Warning 1062 Duplicate entry '2' for key 'PRIMARY'
Warning 1062 Duplicate entry '3' for key 'PRIMARY'
Warning 1062 Duplicate entry '4' for key 'PRIMARY'
Warning 1062 Duplicate entry '5' for key 'PRIMARY'
Warning 1062 Duplicate entry '6' for key 'PRIMARY'
Warning 1062 Duplicate entry '7' for key 'PRIMARY'
Warning 1062 Duplicate entry '8' for key 'PRIMARY'
Warning 1062 Duplicate entry '9' for key 'PRIMARY'
connection child2_1;
SELECT argument FROM mysql.general_log WHERE argument LIKE '%`tbl_a`%';
argument
insert high_priority into `auto_test_remote`.`tbl_a`(`pkey`,`val`)values(1,1)
insert high_priority into `auto_test_remote`.`tbl_a`(`pkey`,`val`)values(3,3)
insert high_priority into `auto_test_remote`.`tbl_a`(`pkey`,`val`)values(5,5)
insert high_priority into `auto_test_remote`.`tbl_a`(`pkey`,`val`)values(7,7)
insert high_priority into `auto_test_remote`.`tbl_a`(`pkey`,`val`)values(9,9)
SELECT argument FROM mysql.general_log WHERE argument LIKE '%`tbl_a`%'
SELECT pkey, val FROM tbl_a ORDER BY pkey;
pkey val
1 2
3 4
5 6
7 8
9 10
connection child2_2;
SELECT argument FROM mysql.general_log WHERE argument LIKE '%`tbl_a`%';
argument
insert high_priority into `auto_test_remote2`.`tbl_a`(`pkey`,`val`)values(0,0)
insert high_priority into `auto_test_remote2`.`tbl_a`(`pkey`,`val`)values(2,2)
insert high_priority into `auto_test_remote2`.`tbl_a`(`pkey`,`val`)values(4,4)
insert high_priority into `auto_test_remote2`.`tbl_a`(`pkey`,`val`)values(6,6)
insert high_priority into `auto_test_remote2`.`tbl_a`(`pkey`,`val`)values(8,8)
SELECT argument FROM mysql.general_log WHERE argument LIKE '%`tbl_a`%'
SELECT pkey, val FROM tbl_a ORDER BY pkey;
pkey val
0 1
2 3
4 5
6 7
8 9
deinit
connection master_1;
DROP DATABASE IF EXISTS auto_test_local;
connection child2_1;
DROP DATABASE IF EXISTS auto_test_remote;
SET GLOBAL log_output = @old_log_output;
connection child2_2;
DROP DATABASE IF EXISTS auto_test_remote2;
SET GLOBAL log_output = @old_log_output;
connection master_1;
set session spider_direct_dup_insert= @old_spider_direct_dup_insert;
for master_1
for child2
child2_1
child2_2
child2_3
for child3
end of test

View File

@ -0,0 +1,95 @@
for master_1
for child2
child2_1
child2_2
child2_3
for child3
connection master_1;
set @old_spider_direct_dup_insert= @@spider_direct_dup_insert;
set session spider_direct_dup_insert= 1;
this test is for MDEV-18987
drop and create databases
connection master_1;
CREATE DATABASE auto_test_local;
USE auto_test_local;
connection child2_1;
SET @old_log_output = @@global.log_output;
SET GLOBAL log_output = 'TABLE,FILE';
CREATE DATABASE auto_test_remote;
USE auto_test_remote;
connection child2_2;
SET @old_log_output = @@global.log_output;
SET GLOBAL log_output = 'TABLE,FILE';
CREATE DATABASE auto_test_remote2;
USE auto_test_remote2;
create table and insert
connection child2_1;
CHILD2_1_CREATE_TABLES
TRUNCATE TABLE mysql.general_log;
connection child2_2;
CHILD2_2_CREATE_TABLES
TRUNCATE TABLE mysql.general_log;
connection master_1;
CREATE TABLE tbl_a (
pkey int NOT NULL,
val int NOT NULL,
PRIMARY KEY (pkey)
) MASTER_1_ENGINE MASTER_1_CHARSET MASTER_1_COMMENT_2_1
INSERT INTO tbl_a (pkey,val) VALUES (0,0),(1,1),(2,2),(3,3),(4,4),(5,5),(6,6),(7,7),(8,8),(9,9);
SELECT pkey,val INTO OUTFILE 'MYSQLTEST_VARDIR/tmp/spider_outfile.tsv' FROM tbl_a ORDER BY pkey;
UPDATE tbl_a SET val = val + 1;
select test 1
connection child2_1;
TRUNCATE TABLE mysql.general_log;
connection child2_2;
TRUNCATE TABLE mysql.general_log;
connection master_1;
LOAD DATA INFILE 'MYSQLTEST_VARDIR/tmp/spider_outfile.tsv' IGNORE INTO TABLE tbl_a;
connection child2_1;
SELECT argument FROM mysql.general_log WHERE argument LIKE '%`tbl_a`%';
argument
insert high_priority ignore into `auto_test_remote`.`tbl_a`(`pkey`,`val`)values(1,1),(3,3),(5,5),(7,7),(9,9)
SELECT argument FROM mysql.general_log WHERE argument LIKE '%`tbl_a`%'
SELECT pkey, val FROM tbl_a ORDER BY pkey;
pkey val
1 2
3 4
5 6
7 8
9 10
connection child2_2;
SELECT argument FROM mysql.general_log WHERE argument LIKE '%`tbl_a`%';
argument
insert high_priority ignore into `auto_test_remote2`.`tbl_a`(`pkey`,`val`)values(0,0),(2,2),(4,4),(6,6),(8,8)
SELECT argument FROM mysql.general_log WHERE argument LIKE '%`tbl_a`%'
SELECT pkey, val FROM tbl_a ORDER BY pkey;
pkey val
0 1
2 3
4 5
6 7
8 9
deinit
connection master_1;
DROP DATABASE IF EXISTS auto_test_local;
connection child2_1;
DROP DATABASE IF EXISTS auto_test_remote;
SET GLOBAL log_output = @old_log_output;
connection child2_2;
DROP DATABASE IF EXISTS auto_test_remote2;
SET GLOBAL log_output = @old_log_output;
connection master_1;
set session spider_direct_dup_insert= @old_spider_direct_dup_insert;
for master_1
for child2
child2_1
child2_2
child2_3
for child3
end of test

View File

@ -0,0 +1,103 @@
for master_1
for child2
child2_1
child2_2
child2_3
for child3
connection master_1;
set @old_spider_direct_dup_insert= @@spider_direct_dup_insert;
set session spider_direct_dup_insert= 0;
this test is for MDEV-18987
drop and create databases
connection master_1;
CREATE DATABASE auto_test_local;
USE auto_test_local;
connection child2_1;
SET @old_log_output = @@global.log_output;
SET GLOBAL log_output = 'TABLE,FILE';
CREATE DATABASE auto_test_remote;
USE auto_test_remote;
connection child2_2;
SET @old_log_output = @@global.log_output;
SET GLOBAL log_output = 'TABLE,FILE';
CREATE DATABASE auto_test_remote2;
USE auto_test_remote2;
create table and insert
connection child2_1;
CHILD2_1_CREATE_TABLES
TRUNCATE TABLE mysql.general_log;
connection child2_2;
CHILD2_2_CREATE_TABLES
TRUNCATE TABLE mysql.general_log;
connection master_1;
CREATE TABLE tbl_a (
pkey int NOT NULL,
val int NOT NULL,
PRIMARY KEY (pkey)
) MASTER_1_ENGINE MASTER_1_CHARSET MASTER_1_COMMENT_2_1
INSERT INTO tbl_a (pkey,val) VALUES (0,0),(1,1),(2,2),(3,3),(4,4),(5,5),(6,6),(7,7),(8,8),(9,9);
SELECT pkey,val INTO OUTFILE 'MYSQLTEST_VARDIR/tmp/spider_outfile.tsv' FROM tbl_a ORDER BY pkey;
TRUNCATE tbl_a;
select test 1
connection child2_1;
TRUNCATE TABLE mysql.general_log;
connection child2_2;
TRUNCATE TABLE mysql.general_log;
connection master_1;
LOAD DATA LOCAL INFILE 'MYSQLTEST_VARDIR/tmp/spider_outfile.tsv' INTO TABLE tbl_a;
connection child2_1;
SELECT argument FROM mysql.general_log WHERE argument LIKE '%`tbl_a`%';
argument
insert high_priority into `auto_test_remote`.`tbl_a`(`pkey`,`val`)values(1,1)
insert high_priority into `auto_test_remote`.`tbl_a`(`pkey`,`val`)values(3,3)
insert high_priority into `auto_test_remote`.`tbl_a`(`pkey`,`val`)values(5,5)
insert high_priority into `auto_test_remote`.`tbl_a`(`pkey`,`val`)values(7,7)
insert high_priority into `auto_test_remote`.`tbl_a`(`pkey`,`val`)values(9,9)
SELECT argument FROM mysql.general_log WHERE argument LIKE '%`tbl_a`%'
SELECT pkey, val FROM tbl_a ORDER BY pkey;
pkey val
1 1
3 3
5 5
7 7
9 9
connection child2_2;
SELECT argument FROM mysql.general_log WHERE argument LIKE '%`tbl_a`%';
argument
insert high_priority into `auto_test_remote2`.`tbl_a`(`pkey`,`val`)values(0,0)
insert high_priority into `auto_test_remote2`.`tbl_a`(`pkey`,`val`)values(2,2)
insert high_priority into `auto_test_remote2`.`tbl_a`(`pkey`,`val`)values(4,4)
insert high_priority into `auto_test_remote2`.`tbl_a`(`pkey`,`val`)values(6,6)
insert high_priority into `auto_test_remote2`.`tbl_a`(`pkey`,`val`)values(8,8)
SELECT argument FROM mysql.general_log WHERE argument LIKE '%`tbl_a`%'
SELECT pkey, val FROM tbl_a ORDER BY pkey;
pkey val
0 0
2 2
4 4
6 6
8 8
deinit
connection master_1;
DROP DATABASE IF EXISTS auto_test_local;
connection child2_1;
DROP DATABASE IF EXISTS auto_test_remote;
SET GLOBAL log_output = @old_log_output;
connection child2_2;
DROP DATABASE IF EXISTS auto_test_remote2;
SET GLOBAL log_output = @old_log_output;
connection master_1;
set session spider_direct_dup_insert= @old_spider_direct_dup_insert;
for master_1
for child2
child2_1
child2_2
child2_3
for child3
end of test

View File

@ -0,0 +1,95 @@
for master_1
for child2
child2_1
child2_2
child2_3
for child3
connection master_1;
set @old_spider_direct_dup_insert= @@spider_direct_dup_insert;
set session spider_direct_dup_insert= 1;
this test is for MDEV-18987
drop and create databases
connection master_1;
CREATE DATABASE auto_test_local;
USE auto_test_local;
connection child2_1;
SET @old_log_output = @@global.log_output;
SET GLOBAL log_output = 'TABLE,FILE';
CREATE DATABASE auto_test_remote;
USE auto_test_remote;
connection child2_2;
SET @old_log_output = @@global.log_output;
SET GLOBAL log_output = 'TABLE,FILE';
CREATE DATABASE auto_test_remote2;
USE auto_test_remote2;
create table and insert
connection child2_1;
CHILD2_1_CREATE_TABLES
TRUNCATE TABLE mysql.general_log;
connection child2_2;
CHILD2_2_CREATE_TABLES
TRUNCATE TABLE mysql.general_log;
connection master_1;
CREATE TABLE tbl_a (
pkey int NOT NULL,
val int NOT NULL,
PRIMARY KEY (pkey)
) MASTER_1_ENGINE MASTER_1_CHARSET MASTER_1_COMMENT_2_1
INSERT INTO tbl_a (pkey,val) VALUES (0,0),(1,1),(2,2),(3,3),(4,4),(5,5),(6,6),(7,7),(8,8),(9,9);
SELECT pkey,val INTO OUTFILE 'MYSQLTEST_VARDIR/tmp/spider_outfile.tsv' FROM tbl_a ORDER BY pkey;
TRUNCATE tbl_a;
select test 1
connection child2_1;
TRUNCATE TABLE mysql.general_log;
connection child2_2;
TRUNCATE TABLE mysql.general_log;
connection master_1;
LOAD DATA LOCAL INFILE 'MYSQLTEST_VARDIR/tmp/spider_outfile.tsv' INTO TABLE tbl_a;
connection child2_1;
SELECT argument FROM mysql.general_log WHERE argument LIKE '%`tbl_a`%';
argument
insert high_priority ignore into `auto_test_remote`.`tbl_a`(`pkey`,`val`)values(1,1),(3,3),(5,5),(7,7),(9,9)
SELECT argument FROM mysql.general_log WHERE argument LIKE '%`tbl_a`%'
SELECT pkey, val FROM tbl_a ORDER BY pkey;
pkey val
1 1
3 3
5 5
7 7
9 9
connection child2_2;
SELECT argument FROM mysql.general_log WHERE argument LIKE '%`tbl_a`%';
argument
insert high_priority ignore into `auto_test_remote2`.`tbl_a`(`pkey`,`val`)values(0,0),(2,2),(4,4),(6,6),(8,8)
SELECT argument FROM mysql.general_log WHERE argument LIKE '%`tbl_a`%'
SELECT pkey, val FROM tbl_a ORDER BY pkey;
pkey val
0 0
2 2
4 4
6 6
8 8
deinit
connection master_1;
DROP DATABASE IF EXISTS auto_test_local;
connection child2_1;
DROP DATABASE IF EXISTS auto_test_remote;
SET GLOBAL log_output = @old_log_output;
connection child2_2;
DROP DATABASE IF EXISTS auto_test_remote2;
SET GLOBAL log_output = @old_log_output;
connection master_1;
set session spider_direct_dup_insert= @old_spider_direct_dup_insert;
for master_1
for child2
child2_1
child2_2
child2_3
for child3
end of test

View File

@ -0,0 +1,114 @@
for master_1
for child2
child2_1
child2_2
child2_3
for child3
connection master_1;
set @old_spider_direct_dup_insert= @@spider_direct_dup_insert;
set session spider_direct_dup_insert= 0;
this test is for MDEV-18987
drop and create databases
connection master_1;
CREATE DATABASE auto_test_local;
USE auto_test_local;
connection child2_1;
SET @old_log_output = @@global.log_output;
SET GLOBAL log_output = 'TABLE,FILE';
CREATE DATABASE auto_test_remote;
USE auto_test_remote;
connection child2_2;
SET @old_log_output = @@global.log_output;
SET GLOBAL log_output = 'TABLE,FILE';
CREATE DATABASE auto_test_remote2;
USE auto_test_remote2;
create table and insert
connection child2_1;
CHILD2_1_CREATE_TABLES
TRUNCATE TABLE mysql.general_log;
connection child2_2;
CHILD2_2_CREATE_TABLES
TRUNCATE TABLE mysql.general_log;
connection master_1;
CREATE TABLE tbl_a (
pkey int NOT NULL,
val int NOT NULL,
PRIMARY KEY (pkey)
) MASTER_1_ENGINE MASTER_1_CHARSET MASTER_1_COMMENT_2_1
INSERT INTO tbl_a (pkey,val) VALUES (0,0),(1,1),(2,2),(3,3),(4,4),(5,5),(6,6),(7,7),(8,8),(9,9);
SELECT pkey,val INTO OUTFILE 'MYSQLTEST_VARDIR/tmp/spider_outfile.tsv' FROM tbl_a ORDER BY pkey;
UPDATE tbl_a SET val = val + 1;
select test 1
connection child2_1;
TRUNCATE TABLE mysql.general_log;
connection child2_2;
TRUNCATE TABLE mysql.general_log;
connection master_1;
LOAD DATA LOCAL INFILE 'MYSQLTEST_VARDIR/tmp/spider_outfile.tsv' IGNORE INTO TABLE tbl_a;
Warnings:
Warning 1062 Duplicate entry '0' for key 'PRIMARY'
Warning 1062 Duplicate entry '1' for key 'PRIMARY'
Warning 1062 Duplicate entry '2' for key 'PRIMARY'
Warning 1062 Duplicate entry '3' for key 'PRIMARY'
Warning 1062 Duplicate entry '4' for key 'PRIMARY'
Warning 1062 Duplicate entry '5' for key 'PRIMARY'
Warning 1062 Duplicate entry '6' for key 'PRIMARY'
Warning 1062 Duplicate entry '7' for key 'PRIMARY'
Warning 1062 Duplicate entry '8' for key 'PRIMARY'
Warning 1062 Duplicate entry '9' for key 'PRIMARY'
connection child2_1;
SELECT argument FROM mysql.general_log WHERE argument LIKE '%`tbl_a`%';
argument
insert high_priority into `auto_test_remote`.`tbl_a`(`pkey`,`val`)values(1,1)
insert high_priority into `auto_test_remote`.`tbl_a`(`pkey`,`val`)values(3,3)
insert high_priority into `auto_test_remote`.`tbl_a`(`pkey`,`val`)values(5,5)
insert high_priority into `auto_test_remote`.`tbl_a`(`pkey`,`val`)values(7,7)
insert high_priority into `auto_test_remote`.`tbl_a`(`pkey`,`val`)values(9,9)
SELECT argument FROM mysql.general_log WHERE argument LIKE '%`tbl_a`%'
SELECT pkey, val FROM tbl_a ORDER BY pkey;
pkey val
1 2
3 4
5 6
7 8
9 10
connection child2_2;
SELECT argument FROM mysql.general_log WHERE argument LIKE '%`tbl_a`%';
argument
insert high_priority into `auto_test_remote2`.`tbl_a`(`pkey`,`val`)values(0,0)
insert high_priority into `auto_test_remote2`.`tbl_a`(`pkey`,`val`)values(2,2)
insert high_priority into `auto_test_remote2`.`tbl_a`(`pkey`,`val`)values(4,4)
insert high_priority into `auto_test_remote2`.`tbl_a`(`pkey`,`val`)values(6,6)
insert high_priority into `auto_test_remote2`.`tbl_a`(`pkey`,`val`)values(8,8)
SELECT argument FROM mysql.general_log WHERE argument LIKE '%`tbl_a`%'
SELECT pkey, val FROM tbl_a ORDER BY pkey;
pkey val
0 1
2 3
4 5
6 7
8 9
deinit
connection master_1;
DROP DATABASE IF EXISTS auto_test_local;
connection child2_1;
DROP DATABASE IF EXISTS auto_test_remote;
SET GLOBAL log_output = @old_log_output;
connection child2_2;
DROP DATABASE IF EXISTS auto_test_remote2;
SET GLOBAL log_output = @old_log_output;
connection master_1;
set session spider_direct_dup_insert= @old_spider_direct_dup_insert;
for master_1
for child2
child2_1
child2_2
child2_3
for child3
end of test

View File

@ -0,0 +1,95 @@
for master_1
for child2
child2_1
child2_2
child2_3
for child3
connection master_1;
set @old_spider_direct_dup_insert= @@spider_direct_dup_insert;
set session spider_direct_dup_insert= 1;
this test is for MDEV-18987
drop and create databases
connection master_1;
CREATE DATABASE auto_test_local;
USE auto_test_local;
connection child2_1;
SET @old_log_output = @@global.log_output;
SET GLOBAL log_output = 'TABLE,FILE';
CREATE DATABASE auto_test_remote;
USE auto_test_remote;
connection child2_2;
SET @old_log_output = @@global.log_output;
SET GLOBAL log_output = 'TABLE,FILE';
CREATE DATABASE auto_test_remote2;
USE auto_test_remote2;
create table and insert
connection child2_1;
CHILD2_1_CREATE_TABLES
TRUNCATE TABLE mysql.general_log;
connection child2_2;
CHILD2_2_CREATE_TABLES
TRUNCATE TABLE mysql.general_log;
connection master_1;
CREATE TABLE tbl_a (
pkey int NOT NULL,
val int NOT NULL,
PRIMARY KEY (pkey)
) MASTER_1_ENGINE MASTER_1_CHARSET MASTER_1_COMMENT_2_1
INSERT INTO tbl_a (pkey,val) VALUES (0,0),(1,1),(2,2),(3,3),(4,4),(5,5),(6,6),(7,7),(8,8),(9,9);
SELECT pkey,val INTO OUTFILE 'MYSQLTEST_VARDIR/tmp/spider_outfile.tsv' FROM tbl_a ORDER BY pkey;
UPDATE tbl_a SET val = val + 1;
select test 1
connection child2_1;
TRUNCATE TABLE mysql.general_log;
connection child2_2;
TRUNCATE TABLE mysql.general_log;
connection master_1;
LOAD DATA LOCAL INFILE 'MYSQLTEST_VARDIR/tmp/spider_outfile.tsv' IGNORE INTO TABLE tbl_a;
connection child2_1;
SELECT argument FROM mysql.general_log WHERE argument LIKE '%`tbl_a`%';
argument
insert high_priority ignore into `auto_test_remote`.`tbl_a`(`pkey`,`val`)values(1,1),(3,3),(5,5),(7,7),(9,9)
SELECT argument FROM mysql.general_log WHERE argument LIKE '%`tbl_a`%'
SELECT pkey, val FROM tbl_a ORDER BY pkey;
pkey val
1 2
3 4
5 6
7 8
9 10
connection child2_2;
SELECT argument FROM mysql.general_log WHERE argument LIKE '%`tbl_a`%';
argument
insert high_priority ignore into `auto_test_remote2`.`tbl_a`(`pkey`,`val`)values(0,0),(2,2),(4,4),(6,6),(8,8)
SELECT argument FROM mysql.general_log WHERE argument LIKE '%`tbl_a`%'
SELECT pkey, val FROM tbl_a ORDER BY pkey;
pkey val
0 1
2 3
4 5
6 7
8 9
deinit
connection master_1;
DROP DATABASE IF EXISTS auto_test_local;
connection child2_1;
DROP DATABASE IF EXISTS auto_test_remote;
SET GLOBAL log_output = @old_log_output;
connection child2_2;
DROP DATABASE IF EXISTS auto_test_remote2;
SET GLOBAL log_output = @old_log_output;
connection master_1;
set session spider_direct_dup_insert= @old_spider_direct_dup_insert;
for master_1
for child2
child2_1
child2_2
child2_3
for child3
end of test

View File

@ -0,0 +1,123 @@
for master_1
for child2
child2_1
child2_2
child2_3
for child3
connection master_1;
set @old_spider_direct_dup_insert= @@spider_direct_dup_insert;
set session spider_direct_dup_insert= 0;
this test is for MDEV-18987
drop and create databases
connection master_1;
CREATE DATABASE auto_test_local;
USE auto_test_local;
connection child2_1;
SET @old_log_output = @@global.log_output;
SET GLOBAL log_output = 'TABLE,FILE';
CREATE DATABASE auto_test_remote;
USE auto_test_remote;
connection child2_2;
SET @old_log_output = @@global.log_output;
SET GLOBAL log_output = 'TABLE,FILE';
CREATE DATABASE auto_test_remote2;
USE auto_test_remote2;
create table and insert
connection child2_1;
CHILD2_1_CREATE_TABLES
TRUNCATE TABLE mysql.general_log;
connection child2_2;
CHILD2_2_CREATE_TABLES
TRUNCATE TABLE mysql.general_log;
connection master_1;
CREATE TABLE tbl_a (
pkey int NOT NULL,
val int NOT NULL,
PRIMARY KEY (pkey)
) MASTER_1_ENGINE MASTER_1_CHARSET MASTER_1_COMMENT_2_1
INSERT INTO tbl_a (pkey,val) VALUES (0,0),(1,1),(2,2),(3,3),(4,4),(5,5),(6,6),(7,7),(8,8),(9,9);
SELECT pkey,val INTO OUTFILE 'MYSQLTEST_VARDIR/tmp/spider_outfile.tsv' FROM tbl_a ORDER BY pkey;
UPDATE tbl_a SET val = val + 1;
select test 1
connection child2_1;
TRUNCATE TABLE mysql.general_log;
connection child2_2;
TRUNCATE TABLE mysql.general_log;
connection master_1;
LOAD DATA LOCAL INFILE 'MYSQLTEST_VARDIR/tmp/spider_outfile.tsv' REPLACE INTO TABLE tbl_a;
connection child2_1;
SELECT argument FROM mysql.general_log WHERE argument LIKE '%`tbl_a`%';
argument
insert into `auto_test_remote`.`tbl_a`(`pkey`,`val`)values(1,1)
select `pkey`,`val` from `auto_test_remote`.`tbl_a` where `pkey` = 1 for update
update ignore `auto_test_remote`.`tbl_a` set `pkey` = 1,`val` = 1 where `pkey` = 1 and `val` = 2 limit 1
insert into `auto_test_remote`.`tbl_a`(`pkey`,`val`)values(3,3)
select `pkey`,`val` from `auto_test_remote`.`tbl_a` where `pkey` = 3 for update
update ignore `auto_test_remote`.`tbl_a` set `pkey` = 3,`val` = 3 where `pkey` = 3 and `val` = 4 limit 1
insert into `auto_test_remote`.`tbl_a`(`pkey`,`val`)values(5,5)
select `pkey`,`val` from `auto_test_remote`.`tbl_a` where `pkey` = 5 for update
update ignore `auto_test_remote`.`tbl_a` set `pkey` = 5,`val` = 5 where `pkey` = 5 and `val` = 6 limit 1
insert into `auto_test_remote`.`tbl_a`(`pkey`,`val`)values(7,7)
select `pkey`,`val` from `auto_test_remote`.`tbl_a` where `pkey` = 7 for update
update ignore `auto_test_remote`.`tbl_a` set `pkey` = 7,`val` = 7 where `pkey` = 7 and `val` = 8 limit 1
insert into `auto_test_remote`.`tbl_a`(`pkey`,`val`)values(9,9)
select `pkey`,`val` from `auto_test_remote`.`tbl_a` where `pkey` = 9 for update
update ignore `auto_test_remote`.`tbl_a` set `pkey` = 9,`val` = 9 where `pkey` = 9 and `val` = 10 limit 1
SELECT argument FROM mysql.general_log WHERE argument LIKE '%`tbl_a`%'
SELECT pkey, val FROM tbl_a ORDER BY pkey;
pkey val
1 1
3 3
5 5
7 7
9 9
connection child2_2;
SELECT argument FROM mysql.general_log WHERE argument LIKE '%`tbl_a`%';
argument
insert into `auto_test_remote2`.`tbl_a`(`pkey`,`val`)values(0,0)
select `pkey`,`val` from `auto_test_remote2`.`tbl_a` where `pkey` = 0 for update
update ignore `auto_test_remote2`.`tbl_a` set `pkey` = 0,`val` = 0 where `pkey` = 0 and `val` = 1 limit 1
insert into `auto_test_remote2`.`tbl_a`(`pkey`,`val`)values(2,2)
select `pkey`,`val` from `auto_test_remote2`.`tbl_a` where `pkey` = 2 for update
update ignore `auto_test_remote2`.`tbl_a` set `pkey` = 2,`val` = 2 where `pkey` = 2 and `val` = 3 limit 1
insert into `auto_test_remote2`.`tbl_a`(`pkey`,`val`)values(4,4)
select `pkey`,`val` from `auto_test_remote2`.`tbl_a` where `pkey` = 4 for update
update ignore `auto_test_remote2`.`tbl_a` set `pkey` = 4,`val` = 4 where `pkey` = 4 and `val` = 5 limit 1
insert into `auto_test_remote2`.`tbl_a`(`pkey`,`val`)values(6,6)
select `pkey`,`val` from `auto_test_remote2`.`tbl_a` where `pkey` = 6 for update
update ignore `auto_test_remote2`.`tbl_a` set `pkey` = 6,`val` = 6 where `pkey` = 6 and `val` = 7 limit 1
insert into `auto_test_remote2`.`tbl_a`(`pkey`,`val`)values(8,8)
select `pkey`,`val` from `auto_test_remote2`.`tbl_a` where `pkey` = 8 for update
update ignore `auto_test_remote2`.`tbl_a` set `pkey` = 8,`val` = 8 where `pkey` = 8 and `val` = 9 limit 1
SELECT argument FROM mysql.general_log WHERE argument LIKE '%`tbl_a`%'
SELECT pkey, val FROM tbl_a ORDER BY pkey;
pkey val
0 0
2 2
4 4
6 6
8 8
deinit
connection master_1;
DROP DATABASE IF EXISTS auto_test_local;
connection child2_1;
DROP DATABASE IF EXISTS auto_test_remote;
SET GLOBAL log_output = @old_log_output;
connection child2_2;
DROP DATABASE IF EXISTS auto_test_remote2;
SET GLOBAL log_output = @old_log_output;
connection master_1;
set session spider_direct_dup_insert= @old_spider_direct_dup_insert;
for master_1
for child2
child2_1
child2_2
child2_3
for child3
end of test

View File

@ -0,0 +1,95 @@
for master_1
for child2
child2_1
child2_2
child2_3
for child3
connection master_1;
set @old_spider_direct_dup_insert= @@spider_direct_dup_insert;
set session spider_direct_dup_insert= 1;
this test is for MDEV-18987
drop and create databases
connection master_1;
CREATE DATABASE auto_test_local;
USE auto_test_local;
connection child2_1;
SET @old_log_output = @@global.log_output;
SET GLOBAL log_output = 'TABLE,FILE';
CREATE DATABASE auto_test_remote;
USE auto_test_remote;
connection child2_2;
SET @old_log_output = @@global.log_output;
SET GLOBAL log_output = 'TABLE,FILE';
CREATE DATABASE auto_test_remote2;
USE auto_test_remote2;
create table and insert
connection child2_1;
CHILD2_1_CREATE_TABLES
TRUNCATE TABLE mysql.general_log;
connection child2_2;
CHILD2_2_CREATE_TABLES
TRUNCATE TABLE mysql.general_log;
connection master_1;
CREATE TABLE tbl_a (
pkey int NOT NULL,
val int NOT NULL,
PRIMARY KEY (pkey)
) MASTER_1_ENGINE MASTER_1_CHARSET MASTER_1_COMMENT_2_1
INSERT INTO tbl_a (pkey,val) VALUES (0,0),(1,1),(2,2),(3,3),(4,4),(5,5),(6,6),(7,7),(8,8),(9,9);
SELECT pkey,val INTO OUTFILE 'MYSQLTEST_VARDIR/tmp/spider_outfile.tsv' FROM tbl_a ORDER BY pkey;
UPDATE tbl_a SET val = val + 1;
select test 1
connection child2_1;
TRUNCATE TABLE mysql.general_log;
connection child2_2;
TRUNCATE TABLE mysql.general_log;
connection master_1;
LOAD DATA LOCAL INFILE 'MYSQLTEST_VARDIR/tmp/spider_outfile.tsv' REPLACE INTO TABLE tbl_a;
connection child2_1;
SELECT argument FROM mysql.general_log WHERE argument LIKE '%`tbl_a`%';
argument
replace into `auto_test_remote`.`tbl_a`(`pkey`,`val`)values(1,1),(3,3),(5,5),(7,7),(9,9)
SELECT argument FROM mysql.general_log WHERE argument LIKE '%`tbl_a`%'
SELECT pkey, val FROM tbl_a ORDER BY pkey;
pkey val
1 1
3 3
5 5
7 7
9 9
connection child2_2;
SELECT argument FROM mysql.general_log WHERE argument LIKE '%`tbl_a`%';
argument
replace into `auto_test_remote2`.`tbl_a`(`pkey`,`val`)values(0,0),(2,2),(4,4),(6,6),(8,8)
SELECT argument FROM mysql.general_log WHERE argument LIKE '%`tbl_a`%'
SELECT pkey, val FROM tbl_a ORDER BY pkey;
pkey val
0 0
2 2
4 4
6 6
8 8
deinit
connection master_1;
DROP DATABASE IF EXISTS auto_test_local;
connection child2_1;
DROP DATABASE IF EXISTS auto_test_remote;
SET GLOBAL log_output = @old_log_output;
connection child2_2;
DROP DATABASE IF EXISTS auto_test_remote2;
SET GLOBAL log_output = @old_log_output;
connection master_1;
set session spider_direct_dup_insert= @old_spider_direct_dup_insert;
for master_1
for child2
child2_1
child2_2
child2_3
for child3
end of test

View File

@ -0,0 +1,123 @@
for master_1
for child2
child2_1
child2_2
child2_3
for child3
connection master_1;
set @old_spider_direct_dup_insert= @@spider_direct_dup_insert;
set session spider_direct_dup_insert= 0;
this test is for MDEV-18987
drop and create databases
connection master_1;
CREATE DATABASE auto_test_local;
USE auto_test_local;
connection child2_1;
SET @old_log_output = @@global.log_output;
SET GLOBAL log_output = 'TABLE,FILE';
CREATE DATABASE auto_test_remote;
USE auto_test_remote;
connection child2_2;
SET @old_log_output = @@global.log_output;
SET GLOBAL log_output = 'TABLE,FILE';
CREATE DATABASE auto_test_remote2;
USE auto_test_remote2;
create table and insert
connection child2_1;
CHILD2_1_CREATE_TABLES
TRUNCATE TABLE mysql.general_log;
connection child2_2;
CHILD2_2_CREATE_TABLES
TRUNCATE TABLE mysql.general_log;
connection master_1;
CREATE TABLE tbl_a (
pkey int NOT NULL,
val int NOT NULL,
PRIMARY KEY (pkey)
) MASTER_1_ENGINE MASTER_1_CHARSET MASTER_1_COMMENT_2_1
INSERT INTO tbl_a (pkey,val) VALUES (0,0),(1,1),(2,2),(3,3),(4,4),(5,5),(6,6),(7,7),(8,8),(9,9);
SELECT pkey,val INTO OUTFILE 'MYSQLTEST_VARDIR/tmp/spider_outfile.tsv' FROM tbl_a ORDER BY pkey;
UPDATE tbl_a SET val = val + 1;
select test 1
connection child2_1;
TRUNCATE TABLE mysql.general_log;
connection child2_2;
TRUNCATE TABLE mysql.general_log;
connection master_1;
LOAD DATA INFILE 'MYSQLTEST_VARDIR/tmp/spider_outfile.tsv' REPLACE INTO TABLE tbl_a;
connection child2_1;
SELECT argument FROM mysql.general_log WHERE argument LIKE '%`tbl_a`%';
argument
insert into `auto_test_remote`.`tbl_a`(`pkey`,`val`)values(1,1)
select `pkey`,`val` from `auto_test_remote`.`tbl_a` where `pkey` = 1 for update
update ignore `auto_test_remote`.`tbl_a` set `pkey` = 1,`val` = 1 where `pkey` = 1 and `val` = 2 limit 1
insert into `auto_test_remote`.`tbl_a`(`pkey`,`val`)values(3,3)
select `pkey`,`val` from `auto_test_remote`.`tbl_a` where `pkey` = 3 for update
update ignore `auto_test_remote`.`tbl_a` set `pkey` = 3,`val` = 3 where `pkey` = 3 and `val` = 4 limit 1
insert into `auto_test_remote`.`tbl_a`(`pkey`,`val`)values(5,5)
select `pkey`,`val` from `auto_test_remote`.`tbl_a` where `pkey` = 5 for update
update ignore `auto_test_remote`.`tbl_a` set `pkey` = 5,`val` = 5 where `pkey` = 5 and `val` = 6 limit 1
insert into `auto_test_remote`.`tbl_a`(`pkey`,`val`)values(7,7)
select `pkey`,`val` from `auto_test_remote`.`tbl_a` where `pkey` = 7 for update
update ignore `auto_test_remote`.`tbl_a` set `pkey` = 7,`val` = 7 where `pkey` = 7 and `val` = 8 limit 1
insert into `auto_test_remote`.`tbl_a`(`pkey`,`val`)values(9,9)
select `pkey`,`val` from `auto_test_remote`.`tbl_a` where `pkey` = 9 for update
update ignore `auto_test_remote`.`tbl_a` set `pkey` = 9,`val` = 9 where `pkey` = 9 and `val` = 10 limit 1
SELECT argument FROM mysql.general_log WHERE argument LIKE '%`tbl_a`%'
SELECT pkey, val FROM tbl_a ORDER BY pkey;
pkey val
1 1
3 3
5 5
7 7
9 9
connection child2_2;
SELECT argument FROM mysql.general_log WHERE argument LIKE '%`tbl_a`%';
argument
insert into `auto_test_remote2`.`tbl_a`(`pkey`,`val`)values(0,0)
select `pkey`,`val` from `auto_test_remote2`.`tbl_a` where `pkey` = 0 for update
update ignore `auto_test_remote2`.`tbl_a` set `pkey` = 0,`val` = 0 where `pkey` = 0 and `val` = 1 limit 1
insert into `auto_test_remote2`.`tbl_a`(`pkey`,`val`)values(2,2)
select `pkey`,`val` from `auto_test_remote2`.`tbl_a` where `pkey` = 2 for update
update ignore `auto_test_remote2`.`tbl_a` set `pkey` = 2,`val` = 2 where `pkey` = 2 and `val` = 3 limit 1
insert into `auto_test_remote2`.`tbl_a`(`pkey`,`val`)values(4,4)
select `pkey`,`val` from `auto_test_remote2`.`tbl_a` where `pkey` = 4 for update
update ignore `auto_test_remote2`.`tbl_a` set `pkey` = 4,`val` = 4 where `pkey` = 4 and `val` = 5 limit 1
insert into `auto_test_remote2`.`tbl_a`(`pkey`,`val`)values(6,6)
select `pkey`,`val` from `auto_test_remote2`.`tbl_a` where `pkey` = 6 for update
update ignore `auto_test_remote2`.`tbl_a` set `pkey` = 6,`val` = 6 where `pkey` = 6 and `val` = 7 limit 1
insert into `auto_test_remote2`.`tbl_a`(`pkey`,`val`)values(8,8)
select `pkey`,`val` from `auto_test_remote2`.`tbl_a` where `pkey` = 8 for update
update ignore `auto_test_remote2`.`tbl_a` set `pkey` = 8,`val` = 8 where `pkey` = 8 and `val` = 9 limit 1
SELECT argument FROM mysql.general_log WHERE argument LIKE '%`tbl_a`%'
SELECT pkey, val FROM tbl_a ORDER BY pkey;
pkey val
0 0
2 2
4 4
6 6
8 8
deinit
connection master_1;
DROP DATABASE IF EXISTS auto_test_local;
connection child2_1;
DROP DATABASE IF EXISTS auto_test_remote;
SET GLOBAL log_output = @old_log_output;
connection child2_2;
DROP DATABASE IF EXISTS auto_test_remote2;
SET GLOBAL log_output = @old_log_output;
connection master_1;
set session spider_direct_dup_insert= @old_spider_direct_dup_insert;
for master_1
for child2
child2_1
child2_2
child2_3
for child3
end of test

View File

@ -0,0 +1,95 @@
for master_1
for child2
child2_1
child2_2
child2_3
for child3
connection master_1;
set @old_spider_direct_dup_insert= @@spider_direct_dup_insert;
set session spider_direct_dup_insert= 1;
this test is for MDEV-18987
drop and create databases
connection master_1;
CREATE DATABASE auto_test_local;
USE auto_test_local;
connection child2_1;
SET @old_log_output = @@global.log_output;
SET GLOBAL log_output = 'TABLE,FILE';
CREATE DATABASE auto_test_remote;
USE auto_test_remote;
connection child2_2;
SET @old_log_output = @@global.log_output;
SET GLOBAL log_output = 'TABLE,FILE';
CREATE DATABASE auto_test_remote2;
USE auto_test_remote2;
create table and insert
connection child2_1;
CHILD2_1_CREATE_TABLES
TRUNCATE TABLE mysql.general_log;
connection child2_2;
CHILD2_2_CREATE_TABLES
TRUNCATE TABLE mysql.general_log;
connection master_1;
CREATE TABLE tbl_a (
pkey int NOT NULL,
val int NOT NULL,
PRIMARY KEY (pkey)
) MASTER_1_ENGINE MASTER_1_CHARSET MASTER_1_COMMENT_2_1
INSERT INTO tbl_a (pkey,val) VALUES (0,0),(1,1),(2,2),(3,3),(4,4),(5,5),(6,6),(7,7),(8,8),(9,9);
SELECT pkey,val INTO OUTFILE 'MYSQLTEST_VARDIR/tmp/spider_outfile.tsv' FROM tbl_a ORDER BY pkey;
UPDATE tbl_a SET val = val + 1;
select test 1
connection child2_1;
TRUNCATE TABLE mysql.general_log;
connection child2_2;
TRUNCATE TABLE mysql.general_log;
connection master_1;
LOAD DATA INFILE 'MYSQLTEST_VARDIR/tmp/spider_outfile.tsv' REPLACE INTO TABLE tbl_a;
connection child2_1;
SELECT argument FROM mysql.general_log WHERE argument LIKE '%`tbl_a`%';
argument
replace into `auto_test_remote`.`tbl_a`(`pkey`,`val`)values(1,1),(3,3),(5,5),(7,7),(9,9)
SELECT argument FROM mysql.general_log WHERE argument LIKE '%`tbl_a`%'
SELECT pkey, val FROM tbl_a ORDER BY pkey;
pkey val
1 1
3 3
5 5
7 7
9 9
connection child2_2;
SELECT argument FROM mysql.general_log WHERE argument LIKE '%`tbl_a`%';
argument
replace into `auto_test_remote2`.`tbl_a`(`pkey`,`val`)values(0,0),(2,2),(4,4),(6,6),(8,8)
SELECT argument FROM mysql.general_log WHERE argument LIKE '%`tbl_a`%'
SELECT pkey, val FROM tbl_a ORDER BY pkey;
pkey val
0 0
2 2
4 4
6 6
8 8
deinit
connection master_1;
DROP DATABASE IF EXISTS auto_test_local;
connection child2_1;
DROP DATABASE IF EXISTS auto_test_remote;
SET GLOBAL log_output = @old_log_output;
connection child2_2;
DROP DATABASE IF EXISTS auto_test_remote2;
SET GLOBAL log_output = @old_log_output;
connection master_1;
set session spider_direct_dup_insert= @old_spider_direct_dup_insert;
for master_1
for child2
child2_1
child2_2
child2_3
for child3
end of test

View File

@ -0,0 +1,100 @@
--echo
--echo this test is for MDEV-18987
--echo
--echo drop and create databases
--connection master_1
--disable_warnings
CREATE DATABASE auto_test_local;
USE auto_test_local;
--connection child2_1
SET @old_log_output = @@global.log_output;
SET GLOBAL log_output = 'TABLE,FILE';
CREATE DATABASE auto_test_remote;
USE auto_test_remote;
--connection child2_2
SET @old_log_output = @@global.log_output;
SET GLOBAL log_output = 'TABLE,FILE';
CREATE DATABASE auto_test_remote2;
USE auto_test_remote2;
--enable_warnings
--echo
--echo create table and insert
--connection child2_1
--disable_query_log
echo CHILD2_1_CREATE_TABLES;
eval $CHILD2_1_CREATE_TABLES;
--enable_query_log
TRUNCATE TABLE mysql.general_log;
--connection child2_2
--disable_query_log
echo CHILD2_2_CREATE_TABLES;
eval $CHILD2_2_CREATE_TABLES;
--enable_query_log
TRUNCATE TABLE mysql.general_log;
--connection master_1
--disable_query_log
echo CREATE TABLE tbl_a (
pkey int NOT NULL,
val int NOT NULL,
PRIMARY KEY (pkey)
) MASTER_1_ENGINE MASTER_1_CHARSET MASTER_1_COMMENT_2_1;
eval CREATE TABLE tbl_a (
pkey int NOT NULL,
val int NOT NULL,
PRIMARY KEY (pkey)
) $MASTER_1_ENGINE $MASTER_1_CHARSET $MASTER_1_COMMENT_2_1;
--enable_query_log
INSERT INTO tbl_a (pkey,val) VALUES (0,0),(1,1),(2,2),(3,3),(4,4),(5,5),(6,6),(7,7),(8,8),(9,9);
--disable_query_log
--echo SELECT pkey,val INTO OUTFILE 'MYSQLTEST_VARDIR/tmp/spider_outfile.tsv' FROM tbl_a ORDER BY pkey;
eval SELECT pkey,val INTO OUTFILE '$MYSQLTEST_VARDIR/tmp/spider_outfile.tsv' FROM tbl_a ORDER BY pkey;
--enable_query_log
eval $COMMAND_BEFORE_LOAD_DATA;
--echo
--echo select test 1
--connection child2_1
TRUNCATE TABLE mysql.general_log;
--connection child2_2
TRUNCATE TABLE mysql.general_log;
--connection master_1
--disable_query_log
--echo LOAD DATA $OPTION_LOCAL INFILE 'MYSQLTEST_VARDIR/tmp/spider_outfile.tsv' $OPTION_WORD INTO TABLE tbl_a;
eval LOAD DATA $OPTION_LOCAL INFILE '$MYSQLTEST_VARDIR/tmp/spider_outfile.tsv' $OPTION_WORD INTO TABLE tbl_a;
--enable_query_log
--remove_file $MYSQLTEST_VARDIR/tmp/spider_outfile.tsv
--connection child2_1
eval $CHILD2_1_SELECT_ARGUMENT1;
eval $CHILD2_1_SELECT_TABLES;
--connection child2_2
eval $CHILD2_2_SELECT_ARGUMENT1;
eval $CHILD2_2_SELECT_TABLES;
--echo
--echo deinit
--disable_warnings
--connection master_1
DROP DATABASE IF EXISTS auto_test_local;
--connection child2_1
DROP DATABASE IF EXISTS auto_test_remote;
SET GLOBAL log_output = @old_log_output;
--connection child2_2
DROP DATABASE IF EXISTS auto_test_remote2;
SET GLOBAL log_output = @old_log_output;
--enable_warnings

View File

@ -0,0 +1,8 @@
--source ../include/load_data_part_ddi0_init.inc
--let COMMAND_BEFORE_LOAD_DATA= TRUNCATE tbl_a
--let OPTION_LOCAL=
--let OPTION_WORD=
--source load_data_part.inc
--source ../include/load_data_part_ddi0_deinit.inc
--echo
--echo end of test

View File

@ -0,0 +1,8 @@
--source ../include/load_data_part_ddi1_init.inc
--let COMMAND_BEFORE_LOAD_DATA= TRUNCATE tbl_a
--let OPTION_LOCAL=
--let OPTION_WORD=
--source load_data_part.inc
--source ../include/load_data_part_ddi1_deinit.inc
--echo
--echo end of test

View File

@ -0,0 +1,8 @@
--source ../include/load_data_part_ddi0_init.inc
--let COMMAND_BEFORE_LOAD_DATA= UPDATE tbl_a SET val = val + 1
--let OPTION_LOCAL=
--let OPTION_WORD= IGNORE
--source load_data_part.inc
--source ../include/load_data_part_ddi0_deinit.inc
--echo
--echo end of test

View File

@ -0,0 +1,8 @@
--source ../include/load_data_part_ddi1_init.inc
--let COMMAND_BEFORE_LOAD_DATA= UPDATE tbl_a SET val = val + 1
--let OPTION_LOCAL=
--let OPTION_WORD= IGNORE
--source load_data_part.inc
--source ../include/load_data_part_ddi1_deinit.inc
--echo
--echo end of test

View File

@ -0,0 +1,8 @@
--source ../include/load_data_part_ddi0_init.inc
--let COMMAND_BEFORE_LOAD_DATA= TRUNCATE tbl_a
--let OPTION_LOCAL= LOCAL
--let OPTION_WORD=
--source load_data_part.inc
--source ../include/load_data_part_ddi0_deinit.inc
--echo
--echo end of test

View File

@ -0,0 +1,8 @@
--source ../include/load_data_part_ddi1_init.inc
--let COMMAND_BEFORE_LOAD_DATA= TRUNCATE tbl_a
--let OPTION_LOCAL= LOCAL
--let OPTION_WORD=
--source load_data_part.inc
--source ../include/load_data_part_ddi1_deinit.inc
--echo
--echo end of test

View File

@ -0,0 +1,8 @@
--source ../include/load_data_part_ddi0_init.inc
--let COMMAND_BEFORE_LOAD_DATA= UPDATE tbl_a SET val = val + 1
--let OPTION_LOCAL= LOCAL
--let OPTION_WORD= IGNORE
--source load_data_part.inc
--source ../include/load_data_part_ddi0_deinit.inc
--echo
--echo end of test

View File

@ -0,0 +1,8 @@
--source ../include/load_data_part_ddi1_init.inc
--let COMMAND_BEFORE_LOAD_DATA= UPDATE tbl_a SET val = val + 1
--let OPTION_LOCAL= LOCAL
--let OPTION_WORD= IGNORE
--source load_data_part.inc
--source ../include/load_data_part_ddi1_deinit.inc
--echo
--echo end of test

View File

@ -0,0 +1,8 @@
--source ../include/load_data_part_ddi0_init.inc
--let COMMAND_BEFORE_LOAD_DATA= UPDATE tbl_a SET val = val + 1
--let OPTION_LOCAL= LOCAL
--let OPTION_WORD= REPLACE
--source load_data_part.inc
--source ../include/load_data_part_ddi0_deinit.inc
--echo
--echo end of test

View File

@ -0,0 +1,8 @@
--source ../include/load_data_part_ddi1_init.inc
--let COMMAND_BEFORE_LOAD_DATA= UPDATE tbl_a SET val = val + 1
--let OPTION_LOCAL= LOCAL
--let OPTION_WORD= REPLACE
--source load_data_part.inc
--source ../include/load_data_part_ddi1_deinit.inc
--echo
--echo end of test

View File

@ -0,0 +1,8 @@
--source ../include/load_data_part_ddi0_init.inc
--let COMMAND_BEFORE_LOAD_DATA= UPDATE tbl_a SET val = val + 1
--let OPTION_LOCAL=
--let OPTION_WORD= REPLACE
--source load_data_part.inc
--source ../include/load_data_part_ddi0_deinit.inc
--echo
--echo end of test

View File

@ -0,0 +1,8 @@
--source ../include/load_data_part_ddi1_init.inc
--let COMMAND_BEFORE_LOAD_DATA= UPDATE tbl_a SET val = val + 1
--let OPTION_LOCAL=
--let OPTION_WORD= REPLACE
--source load_data_part.inc
--source ../include/load_data_part_ddi1_deinit.inc
--echo
--echo end of test