mirror of
https://github.com/MariaDB/server.git
synced 2025-08-08 11:22:35 +03:00
Merge 10.2 into 10.3
This commit is contained in:
@@ -34,6 +34,7 @@ GEOMETRY_COLUMNS F_TABLE_SCHEMA
|
|||||||
GLOBAL_STATUS VARIABLE_NAME
|
GLOBAL_STATUS VARIABLE_NAME
|
||||||
GLOBAL_VARIABLES VARIABLE_NAME
|
GLOBAL_VARIABLES VARIABLE_NAME
|
||||||
INDEX_STATISTICS TABLE_SCHEMA
|
INDEX_STATISTICS TABLE_SCHEMA
|
||||||
|
KEYWORDS WORD
|
||||||
KEY_CACHES KEY_CACHE_NAME
|
KEY_CACHES KEY_CACHE_NAME
|
||||||
KEY_COLUMN_USAGE CONSTRAINT_SCHEMA
|
KEY_COLUMN_USAGE CONSTRAINT_SCHEMA
|
||||||
PARAMETERS SPECIFIC_SCHEMA
|
PARAMETERS SPECIFIC_SCHEMA
|
||||||
@@ -48,6 +49,7 @@ SCHEMA_PRIVILEGES TABLE_SCHEMA
|
|||||||
SESSION_STATUS VARIABLE_NAME
|
SESSION_STATUS VARIABLE_NAME
|
||||||
SESSION_VARIABLES VARIABLE_NAME
|
SESSION_VARIABLES VARIABLE_NAME
|
||||||
SPATIAL_REF_SYS SRID
|
SPATIAL_REF_SYS SRID
|
||||||
|
SQL_FUNCTIONS FUNCTION
|
||||||
STATISTICS TABLE_SCHEMA
|
STATISTICS TABLE_SCHEMA
|
||||||
SYSTEM_VARIABLES VARIABLE_NAME
|
SYSTEM_VARIABLES VARIABLE_NAME
|
||||||
TABLES TABLE_SCHEMA
|
TABLES TABLE_SCHEMA
|
||||||
@@ -92,6 +94,7 @@ GEOMETRY_COLUMNS F_TABLE_SCHEMA
|
|||||||
GLOBAL_STATUS VARIABLE_NAME
|
GLOBAL_STATUS VARIABLE_NAME
|
||||||
GLOBAL_VARIABLES VARIABLE_NAME
|
GLOBAL_VARIABLES VARIABLE_NAME
|
||||||
INDEX_STATISTICS TABLE_SCHEMA
|
INDEX_STATISTICS TABLE_SCHEMA
|
||||||
|
KEYWORDS WORD
|
||||||
KEY_CACHES KEY_CACHE_NAME
|
KEY_CACHES KEY_CACHE_NAME
|
||||||
KEY_COLUMN_USAGE CONSTRAINT_SCHEMA
|
KEY_COLUMN_USAGE CONSTRAINT_SCHEMA
|
||||||
PARAMETERS SPECIFIC_SCHEMA
|
PARAMETERS SPECIFIC_SCHEMA
|
||||||
@@ -106,6 +109,7 @@ SCHEMA_PRIVILEGES TABLE_SCHEMA
|
|||||||
SESSION_STATUS VARIABLE_NAME
|
SESSION_STATUS VARIABLE_NAME
|
||||||
SESSION_VARIABLES VARIABLE_NAME
|
SESSION_VARIABLES VARIABLE_NAME
|
||||||
SPATIAL_REF_SYS SRID
|
SPATIAL_REF_SYS SRID
|
||||||
|
SQL_FUNCTIONS FUNCTION
|
||||||
STATISTICS TABLE_SCHEMA
|
STATISTICS TABLE_SCHEMA
|
||||||
SYSTEM_VARIABLES VARIABLE_NAME
|
SYSTEM_VARIABLES VARIABLE_NAME
|
||||||
TABLES TABLE_SCHEMA
|
TABLES TABLE_SCHEMA
|
||||||
|
@@ -1,3 +1,34 @@
|
|||||||
|
#
|
||||||
|
# MDEV-26077 Assertion failure err != DB_DUPLICATE_KEY
|
||||||
|
# or unexpected ER_TABLE_EXISTS_ERROR
|
||||||
|
#
|
||||||
|
CREATE TABLE t1 (pk INT PRIMARY KEY) ENGINE=InnoDB;
|
||||||
|
CREATE TABLE t2 (pk INT PRIMARY KEY) ENGINE=InnoDB;
|
||||||
|
connect con1,localhost,root,,test;
|
||||||
|
START TRANSACTION;
|
||||||
|
INSERT INTO t2 (pk) VALUES (1);
|
||||||
|
SAVEPOINT sp;
|
||||||
|
INSERT INTO t1 (pk) VALUES (1);
|
||||||
|
ROLLBACK TO SAVEPOINT sp;
|
||||||
|
connection default;
|
||||||
|
SET lock_wait_timeout=0;
|
||||||
|
SET innodb_lock_wait_timeout=0;
|
||||||
|
ALTER TABLE t1 PARTITION BY HASH(pk);
|
||||||
|
ERROR HY000: Lock wait timeout exceeded; try restarting transaction
|
||||||
|
SHOW CREATE TABLE t1;
|
||||||
|
Table Create Table
|
||||||
|
t1 CREATE TABLE `t1` (
|
||||||
|
`pk` int(11) NOT NULL,
|
||||||
|
PRIMARY KEY (`pk`)
|
||||||
|
) ENGINE=InnoDB DEFAULT CHARSET=latin1
|
||||||
|
connection con1;
|
||||||
|
COMMIT;
|
||||||
|
connection default;
|
||||||
|
ALTER TABLE t2 PARTITION BY HASH(pk);
|
||||||
|
disconnect con1;
|
||||||
|
connection default;
|
||||||
|
DROP TABLE t1, t2;
|
||||||
|
# End of 10.2 tests
|
||||||
CREATE TABLE t1(a INT, b VARCHAR(10), INDEX(a))ENGINE=InnoDB
|
CREATE TABLE t1(a INT, b VARCHAR(10), INDEX(a))ENGINE=InnoDB
|
||||||
PARTITION BY RANGE(a)
|
PARTITION BY RANGE(a)
|
||||||
(PARTITION pa VALUES LESS THAN (3),
|
(PARTITION pa VALUES LESS THAN (3),
|
||||||
@@ -8,3 +39,4 @@ PARTITION BY RANGE(a)
|
|||||||
PARTITION pb VALUES LESS THAN (4));
|
PARTITION pb VALUES LESS THAN (4));
|
||||||
ERROR HY000: Foreign key clause is not yet supported in conjunction with partitioning
|
ERROR HY000: Foreign key clause is not yet supported in conjunction with partitioning
|
||||||
DROP TABLE t1;
|
DROP TABLE t1;
|
||||||
|
# End of 10.3 tests
|
||||||
|
@@ -1,6 +1,40 @@
|
|||||||
--source include/have_innodb.inc
|
--source include/have_innodb.inc
|
||||||
--source include/have_partition.inc
|
--source include/have_partition.inc
|
||||||
|
|
||||||
|
--echo #
|
||||||
|
--echo # MDEV-26077 Assertion failure err != DB_DUPLICATE_KEY
|
||||||
|
--echo # or unexpected ER_TABLE_EXISTS_ERROR
|
||||||
|
--echo #
|
||||||
|
|
||||||
|
CREATE TABLE t1 (pk INT PRIMARY KEY) ENGINE=InnoDB;
|
||||||
|
CREATE TABLE t2 (pk INT PRIMARY KEY) ENGINE=InnoDB;
|
||||||
|
|
||||||
|
--connect (con1,localhost,root,,test)
|
||||||
|
|
||||||
|
START TRANSACTION;
|
||||||
|
INSERT INTO t2 (pk) VALUES (1);
|
||||||
|
SAVEPOINT sp;
|
||||||
|
INSERT INTO t1 (pk) VALUES (1);
|
||||||
|
ROLLBACK TO SAVEPOINT sp;
|
||||||
|
|
||||||
|
--connection default
|
||||||
|
SET lock_wait_timeout=0;
|
||||||
|
SET innodb_lock_wait_timeout=0;
|
||||||
|
--error ER_LOCK_WAIT_TIMEOUT
|
||||||
|
ALTER TABLE t1 PARTITION BY HASH(pk);
|
||||||
|
|
||||||
|
SHOW CREATE TABLE t1;
|
||||||
|
--connection con1
|
||||||
|
COMMIT;
|
||||||
|
--connection default
|
||||||
|
ALTER TABLE t2 PARTITION BY HASH(pk);
|
||||||
|
# Cleanup
|
||||||
|
--disconnect con1
|
||||||
|
--connection default
|
||||||
|
DROP TABLE t1, t2;
|
||||||
|
|
||||||
|
--echo # End of 10.2 tests
|
||||||
|
|
||||||
CREATE TABLE t1(a INT, b VARCHAR(10), INDEX(a))ENGINE=InnoDB
|
CREATE TABLE t1(a INT, b VARCHAR(10), INDEX(a))ENGINE=InnoDB
|
||||||
PARTITION BY RANGE(a)
|
PARTITION BY RANGE(a)
|
||||||
(PARTITION pa VALUES LESS THAN (3),
|
(PARTITION pa VALUES LESS THAN (3),
|
||||||
@@ -13,3 +47,5 @@ PARTITION BY RANGE(a)
|
|||||||
PARTITION pb VALUES LESS THAN (4));
|
PARTITION pb VALUES LESS THAN (4));
|
||||||
|
|
||||||
DROP TABLE t1;
|
DROP TABLE t1;
|
||||||
|
|
||||||
|
--echo # End of 10.3 tests
|
||||||
|
@@ -1,4 +1,5 @@
|
|||||||
/* Copyright (c) 2000, 2013, Oracle and/or its affiliates. All rights reserved.
|
/* Copyright (c) 2000, 2013, Oracle and/or its affiliates. All rights reserved.
|
||||||
|
Copyright (c) 2009, 2021, MariaDB Corporation.
|
||||||
|
|
||||||
This program is free software; you can redistribute it and/or modify
|
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
|
it under the terms of the GNU General Public License as published by
|
||||||
@@ -701,32 +702,6 @@ bool trans_rollback_to_savepoint(THD *thd, LEX_CSTRING name)
|
|||||||
if (WSREP_ON)
|
if (WSREP_ON)
|
||||||
wsrep_register_hton(thd, thd->in_multi_stmt_transaction_mode());
|
wsrep_register_hton(thd, thd->in_multi_stmt_transaction_mode());
|
||||||
|
|
||||||
/**
|
|
||||||
Checking whether it is safe to release metadata locks acquired after
|
|
||||||
savepoint, if rollback to savepoint is successful.
|
|
||||||
|
|
||||||
Whether it is safe to release MDL after rollback to savepoint depends
|
|
||||||
on storage engines participating in transaction:
|
|
||||||
|
|
||||||
- InnoDB doesn't release any row-locks on rollback to savepoint so it
|
|
||||||
is probably a bad idea to release MDL as well.
|
|
||||||
- Binary log implementation in some cases (e.g when non-transactional
|
|
||||||
tables involved) may choose not to remove events added after savepoint
|
|
||||||
from transactional cache, but instead will write them to binary
|
|
||||||
log accompanied with ROLLBACK TO SAVEPOINT statement. Since the real
|
|
||||||
write happens at the end of transaction releasing MDL on tables
|
|
||||||
mentioned in these events (i.e. acquired after savepoint and before
|
|
||||||
rollback ot it) can break replication, as concurrent DROP TABLES
|
|
||||||
statements will be able to drop these tables before events will get
|
|
||||||
into binary log,
|
|
||||||
|
|
||||||
For backward-compatibility reasons we always release MDL if binary
|
|
||||||
logging is off.
|
|
||||||
*/
|
|
||||||
bool mdl_can_safely_rollback_to_savepoint=
|
|
||||||
(!(mysql_bin_log.is_open() && thd->variables.sql_log_bin) ||
|
|
||||||
ha_rollback_to_savepoint_can_release_mdl(thd));
|
|
||||||
|
|
||||||
if (ha_rollback_to_savepoint(thd, sv))
|
if (ha_rollback_to_savepoint(thd, sv))
|
||||||
res= TRUE;
|
res= TRUE;
|
||||||
else if (((thd->variables.option_bits & OPTION_KEEP_LOG) ||
|
else if (((thd->variables.option_bits & OPTION_KEEP_LOG) ||
|
||||||
@@ -738,7 +713,14 @@ bool trans_rollback_to_savepoint(THD *thd, LEX_CSTRING name)
|
|||||||
|
|
||||||
thd->transaction.savepoints= sv;
|
thd->transaction.savepoints= sv;
|
||||||
|
|
||||||
if (!res && mdl_can_safely_rollback_to_savepoint)
|
if (res)
|
||||||
|
/* An error occurred during rollback; we cannot release any MDL */;
|
||||||
|
else if (thd->variables.sql_log_bin && mysql_bin_log.is_open())
|
||||||
|
/* In some cases (such as with non-transactional tables) we may
|
||||||
|
choose to preserve events that were added after the SAVEPOINT,
|
||||||
|
delimiting them by SAVEPOINT and ROLLBACK TO SAVEPOINT statements.
|
||||||
|
Prematurely releasing MDL on such objects would break replication. */;
|
||||||
|
else if (ha_rollback_to_savepoint_can_release_mdl(thd))
|
||||||
thd->mdl_context.rollback_to_savepoint(sv->mdl_savepoint);
|
thd->mdl_context.rollback_to_savepoint(sv->mdl_savepoint);
|
||||||
|
|
||||||
DBUG_RETURN(MY_TEST(res));
|
DBUG_RETURN(MY_TEST(res));
|
||||||
|
Reference in New Issue
Block a user