mirror of
https://github.com/MariaDB/server.git
synced 2025-01-29 02:05:57 +01:00
Merge 10.4 into 10.5
This commit is contained in:
commit
699de65d5e
13 changed files with 140 additions and 32 deletions
|
@ -25,8 +25,6 @@
|
|||
#define DBUG_ASSERT_IF_WSREP(A) DBUG_ASSERT(A)
|
||||
|
||||
#define WSREP_MYSQL_DB (char *)"mysql"
|
||||
#define WSREP_TO_ISOLATION_BEGIN_IF(db_, table_, table_list_) \
|
||||
if (WSREP_ON && WSREP(thd) && wsrep_to_isolation_begin(thd, db_, table_, table_list_))
|
||||
|
||||
#define WSREP_TO_ISOLATION_BEGIN(db_, table_, table_list_) \
|
||||
if (WSREP_ON && WSREP(thd) && wsrep_to_isolation_begin(thd, db_, table_, table_list_)) \
|
||||
|
@ -58,10 +56,6 @@
|
|||
if (WSREP(thd) && !thd->lex->no_write_to_binlog \
|
||||
&& wsrep_to_isolation_begin(thd, db_, table_, table_list_)) goto wsrep_error_label;
|
||||
|
||||
#define WSREP_TO_ISOLATION_BEGIN_FK_TABLES(db_, table_, table_list_, fk_tables) \
|
||||
if (WSREP(thd) && !thd->lex->no_write_to_binlog \
|
||||
&& wsrep_to_isolation_begin(thd, db_, table_, table_list_, NULL, fk_tables))
|
||||
|
||||
#define WSREP_SYNC_WAIT(thd_, before_) \
|
||||
{ if (WSREP_CLIENT(thd_) && \
|
||||
wsrep_sync_wait(thd_, before_)) goto wsrep_error_label; }
|
||||
|
@ -76,7 +70,6 @@
|
|||
#define WSREP_ERROR(...)
|
||||
#define WSREP_TO_ISOLATION_BEGIN(db_, table_, table_list_) do { } while(0)
|
||||
#define WSREP_TO_ISOLATION_BEGIN_ALTER(db_, table_, table_list_, alter_info_, fk_tables_, create_info_)
|
||||
#define WSREP_TO_ISOLATION_BEGIN_FK_TABLES(db_, table_, table_list_, fk_tables_)
|
||||
#define WSREP_TO_ISOLATION_END
|
||||
#define WSREP_TO_ISOLATION_BEGIN_CREATE(db_, table_, table_list_, create_info_)
|
||||
#define WSREP_TO_ISOLATION_BEGIN_WRTCHK(db_, table_, table_list_)
|
||||
|
|
|
@ -223,16 +223,16 @@ disconnect c1;
|
|||
#
|
||||
create or replace table t1 (a int);
|
||||
create or replace table t2 (b int);
|
||||
insert into t1 values(1),(2);
|
||||
insert into t1 values(1<<30),(1<<29);
|
||||
insert into t2 values(1),(2);
|
||||
select t1.a as a1 from t1 as t1,t2 order by t2.b,t1.a;
|
||||
Catalog Database Table Table_alias Column Column_alias Type Length Max length Is_null Flags Decimals Charsetnr
|
||||
def test t1 t1 a a1 3 11 1 Y 32768 0 63
|
||||
def test t1 t1 a a1 3 11 10 Y 32768 0 63
|
||||
a1
|
||||
1
|
||||
2
|
||||
1
|
||||
2
|
||||
536870912
|
||||
1073741824
|
||||
536870912
|
||||
1073741824
|
||||
drop table t1,t2;
|
||||
#
|
||||
# End of 10.4 tests
|
||||
|
|
|
@ -231,7 +231,7 @@ disconnect c1;
|
|||
--echo #
|
||||
create or replace table t1 (a int);
|
||||
create or replace table t2 (b int);
|
||||
insert into t1 values(1),(2);
|
||||
insert into t1 values(1<<30),(1<<29);
|
||||
insert into t2 values(1),(2);
|
||||
--enable_metadata
|
||||
select t1.a as a1 from t1 as t1,t2 order by t2.b,t1.a;
|
||||
|
|
|
@ -32,7 +32,6 @@ galera_parallel_simple : MDEV-20318 galera.galera_parallel_simple fails
|
|||
galera_pc_ignore_sb : MDEV-20888 galera.galera_pc_ignore_sb
|
||||
galera_pc_recovery : MDEV-25199 cluster fails to start up
|
||||
galera_shutdown_nonprim : MDEV-21493 galera.galera_shutdown_nonprim
|
||||
galera_ssl_upgrade : MDEV-19950 Galera test failure on galera_ssl_upgrade
|
||||
galera_toi_ddl_nonconflicting : MDEV-21518 galera.galera_toi_ddl_nonconflicting
|
||||
galera_toi_truncate : MDEV-22996 Hang on galera_toi_truncate test case
|
||||
galera_trigger : MDEV-24048 galera.galera_trigger MTR fails: Result content mismatch
|
||||
|
|
47
mysql-test/suite/galera/r/galera_fk_truncate.result
Normal file
47
mysql-test/suite/galera/r/galera_fk_truncate.result
Normal file
|
@ -0,0 +1,47 @@
|
|||
connection node_2;
|
||||
connection node_1;
|
||||
CREATE TABLE author (
|
||||
id SMALLINT UNSIGNED NOT NULL AUTO_INCREMENT PRIMARY KEY,
|
||||
name VARCHAR(100) NOT NULL
|
||||
) ENGINE = InnoDB;
|
||||
CREATE TABLE book (
|
||||
id MEDIUMINT UNSIGNED NOT NULL AUTO_INCREMENT PRIMARY KEY,
|
||||
title VARCHAR(200) NOT NULL,
|
||||
author_id SMALLINT UNSIGNED NOT NULL,
|
||||
CONSTRAINT `fk_book_author`
|
||||
FOREIGN KEY (author_id) REFERENCES author (id)
|
||||
ON DELETE CASCADE
|
||||
ON UPDATE RESTRICT
|
||||
) ENGINE = InnoDB;
|
||||
INSERT INTO author (name) VALUES ('Abdul Alhazred');
|
||||
INSERT INTO book (title, author_id) VALUES ('Necronomicon', LAST_INSERT_ID());
|
||||
TRUNCATE TABLE book;
|
||||
SELECT * FROM author;
|
||||
id name
|
||||
1 Abdul Alhazred
|
||||
SELECT * FROM book;
|
||||
id title author_id
|
||||
connection node_2;
|
||||
SELECT * FROM author;
|
||||
id name
|
||||
1 Abdul Alhazred
|
||||
SELECT * FROM book;
|
||||
id title author_id
|
||||
INSERT INTO author (name) VALUES ('Abdul Alhazred');
|
||||
INSERT INTO book (title, author_id) VALUES ('Necronomicon', LAST_INSERT_ID());
|
||||
TRUNCATE TABLE book;
|
||||
SELECT * FROM author;
|
||||
id name
|
||||
1 Abdul Alhazred
|
||||
2 Abdul Alhazred
|
||||
SELECT * FROM book;
|
||||
id title author_id
|
||||
connection node_1;
|
||||
TRUNCATE TABLE book;
|
||||
SELECT * FROM author;
|
||||
id name
|
||||
1 Abdul Alhazred
|
||||
2 Abdul Alhazred
|
||||
SELECT * FROM book;
|
||||
id title author_id
|
||||
DROP TABLE book, author;
|
|
@ -1,3 +1,5 @@
|
|||
connection node_2;
|
||||
connection node_1;
|
||||
connection node_1;
|
||||
call mtr.add_suppression("WSREP: write_handler(): protocol is shutdown.*");
|
||||
connection node_2;
|
||||
|
@ -24,5 +26,6 @@ connection node_1;
|
|||
SELECT VARIABLE_VALUE = 2 FROM INFORMATION_SCHEMA.GLOBAL_STATUS WHERE VARIABLE_NAME = 'wsrep_cluster_size';
|
||||
VARIABLE_VALUE = 2
|
||||
1
|
||||
connection node_2;
|
||||
disconnect node_2;
|
||||
disconnect node_1;
|
||||
|
|
39
mysql-test/suite/galera/t/galera_fk_truncate.test
Normal file
39
mysql-test/suite/galera/t/galera_fk_truncate.test
Normal file
|
@ -0,0 +1,39 @@
|
|||
--source include/galera_cluster.inc
|
||||
|
||||
CREATE TABLE author (
|
||||
id SMALLINT UNSIGNED NOT NULL AUTO_INCREMENT PRIMARY KEY,
|
||||
name VARCHAR(100) NOT NULL
|
||||
) ENGINE = InnoDB;
|
||||
|
||||
CREATE TABLE book (
|
||||
id MEDIUMINT UNSIGNED NOT NULL AUTO_INCREMENT PRIMARY KEY,
|
||||
title VARCHAR(200) NOT NULL,
|
||||
author_id SMALLINT UNSIGNED NOT NULL,
|
||||
CONSTRAINT `fk_book_author`
|
||||
FOREIGN KEY (author_id) REFERENCES author (id)
|
||||
ON DELETE CASCADE
|
||||
ON UPDATE RESTRICT
|
||||
) ENGINE = InnoDB;
|
||||
|
||||
INSERT INTO author (name) VALUES ('Abdul Alhazred');
|
||||
INSERT INTO book (title, author_id) VALUES ('Necronomicon', LAST_INSERT_ID());
|
||||
|
||||
TRUNCATE TABLE book;
|
||||
SELECT * FROM author;
|
||||
SELECT * FROM book;
|
||||
|
||||
--connection node_2
|
||||
SELECT * FROM author;
|
||||
SELECT * FROM book;
|
||||
INSERT INTO author (name) VALUES ('Abdul Alhazred');
|
||||
INSERT INTO book (title, author_id) VALUES ('Necronomicon', LAST_INSERT_ID());
|
||||
TRUNCATE TABLE book;
|
||||
SELECT * FROM author;
|
||||
SELECT * FROM book;
|
||||
|
||||
--connection node_1
|
||||
TRUNCATE TABLE book;
|
||||
SELECT * FROM author;
|
||||
SELECT * FROM book;
|
||||
|
||||
DROP TABLE book, author;
|
|
@ -70,3 +70,11 @@ select * from t1;
|
|||
ERROR HY000: Tablespace has been discarded for table `t1`
|
||||
drop table t2;
|
||||
drop table t1;
|
||||
CREATE TABLE t1 (id INT PRIMARY KEY AUTO_INCREMENT, i1 INT) ENGINE=INNODB;
|
||||
CREATE TABLE t2 (id INT PRIMARY KEY AUTO_INCREMENT, i1 INT, i2 INT) ENGINE=INNODB;
|
||||
ALTER TABLE t2 DROP COLUMN i2, ALGORITHM=INSTANT;
|
||||
ALTER TABLE t2 DISCARD TABLESPACE;
|
||||
FLUSH TABLE t1 FOR EXPORT;
|
||||
UNLOCK TABLES;
|
||||
ALTER TABLE t2 IMPORT TABLESPACE;
|
||||
DROP TABLE t2, t1;
|
||||
|
|
|
@ -82,3 +82,22 @@ select * from t1;
|
|||
|
||||
drop table t2;
|
||||
drop table t1;
|
||||
|
||||
|
||||
--let $MYSQLD_DATADIR= `SELECT @@datadir`
|
||||
|
||||
CREATE TABLE t1 (id INT PRIMARY KEY AUTO_INCREMENT, i1 INT) ENGINE=INNODB;
|
||||
|
||||
CREATE TABLE t2 (id INT PRIMARY KEY AUTO_INCREMENT, i1 INT, i2 INT) ENGINE=INNODB;
|
||||
ALTER TABLE t2 DROP COLUMN i2, ALGORITHM=INSTANT;
|
||||
ALTER TABLE t2 DISCARD TABLESPACE;
|
||||
|
||||
FLUSH TABLE t1 FOR EXPORT;
|
||||
|
||||
--copy_file $MYSQLD_DATADIR/test/t1.ibd $MYSQLD_DATADIR/test/t2.ibd
|
||||
--copy_file $MYSQLD_DATADIR/test/t1.cfg $MYSQLD_DATADIR/test/t2.cfg
|
||||
|
||||
UNLOCK TABLES;
|
||||
ALTER TABLE t2 IMPORT TABLESPACE;
|
||||
|
||||
DROP TABLE t2, t1;
|
||||
|
|
|
@ -462,16 +462,17 @@ static bool wsrep_toi_replication(THD *thd, TABLE_LIST *tables)
|
|||
/* now TOI replication, with no locks held */
|
||||
if (keys.empty())
|
||||
{
|
||||
WSREP_TO_ISOLATION_BEGIN_WRTCHK(NULL, NULL, tables);
|
||||
} else {
|
||||
WSREP_TO_ISOLATION_BEGIN_FK_TABLES(NULL, NULL, tables, &keys) {
|
||||
if (!thd->lex->no_write_to_binlog &&
|
||||
wsrep_to_isolation_begin(thd, NULL, NULL, tables))
|
||||
return true;
|
||||
}
|
||||
else
|
||||
{
|
||||
if (!thd->lex->no_write_to_binlog &&
|
||||
wsrep_to_isolation_begin(thd, NULL, NULL, tables, NULL, &keys))
|
||||
return true;
|
||||
}
|
||||
}
|
||||
return false;
|
||||
|
||||
wsrep_error_label:
|
||||
return true;
|
||||
}
|
||||
#endif /* WITH_WSREP */
|
||||
|
||||
|
|
|
@ -435,15 +435,13 @@ bool Sql_cmd_truncate_table::truncate_table(THD *thd, TABLE_LIST *table_ref)
|
|||
{
|
||||
if (keys.empty())
|
||||
{
|
||||
WSREP_TO_ISOLATION_BEGIN_IF(table_ref->db.str, table_ref->table_name.str, NULL)
|
||||
{
|
||||
if (wsrep_to_isolation_begin(thd, table_ref->db.str, table_ref->table_name.str, NULL))
|
||||
DBUG_RETURN(TRUE);
|
||||
}
|
||||
} else {
|
||||
WSREP_TO_ISOLATION_BEGIN_FK_TABLES(NULL, NULL, table_ref, &keys)
|
||||
{
|
||||
}
|
||||
else
|
||||
{
|
||||
if (wsrep_to_isolation_begin(thd, NULL, NULL, table_ref, NULL, &keys))
|
||||
DBUG_RETURN(TRUE);
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
|
|
@ -2389,8 +2389,9 @@ int wsrep_to_isolation_begin(THD *thd, const char *db_, const char *table_,
|
|||
{
|
||||
/*
|
||||
No isolation for applier or replaying threads.
|
||||
*/
|
||||
if (!wsrep_thd_is_local(thd)) return 0;
|
||||
*/
|
||||
if (!wsrep_thd_is_local(thd))
|
||||
return 0;
|
||||
|
||||
int ret= 0;
|
||||
mysql_mutex_lock(&thd->LOCK_thd_data);
|
||||
|
|
|
@ -2454,7 +2454,7 @@ inline void dict_index_t::clear_instant_alter()
|
|||
{ return a.col->ind < b.col->ind; });
|
||||
table->instant = NULL;
|
||||
if (ai_col) {
|
||||
auto a = std::find_if(begin, end,
|
||||
auto a = std::find_if(fields, end,
|
||||
[ai_col](const dict_field_t& f)
|
||||
{ return f.col == ai_col; });
|
||||
table->persistent_autoinc = (a == end)
|
||||
|
|
Loading…
Add table
Reference in a new issue