mirror of
https://github.com/MariaDB/server.git
synced 2025-01-16 03:52:35 +01:00
Merge 10.3 into 10.4
This commit is contained in:
commit
c294443b41
8 changed files with 117 additions and 50 deletions
|
@ -34,6 +34,7 @@ GEOMETRY_COLUMNS F_TABLE_SCHEMA
|
|||
GLOBAL_STATUS VARIABLE_NAME
|
||||
GLOBAL_VARIABLES VARIABLE_NAME
|
||||
INDEX_STATISTICS TABLE_SCHEMA
|
||||
KEYWORDS WORD
|
||||
KEY_CACHES KEY_CACHE_NAME
|
||||
KEY_COLUMN_USAGE CONSTRAINT_SCHEMA
|
||||
PARAMETERS SPECIFIC_SCHEMA
|
||||
|
@ -48,6 +49,7 @@ SCHEMA_PRIVILEGES TABLE_SCHEMA
|
|||
SESSION_STATUS VARIABLE_NAME
|
||||
SESSION_VARIABLES VARIABLE_NAME
|
||||
SPATIAL_REF_SYS SRID
|
||||
SQL_FUNCTIONS FUNCTION
|
||||
STATISTICS TABLE_SCHEMA
|
||||
SYSTEM_VARIABLES VARIABLE_NAME
|
||||
TABLES TABLE_SCHEMA
|
||||
|
@ -92,6 +94,7 @@ GEOMETRY_COLUMNS F_TABLE_SCHEMA
|
|||
GLOBAL_STATUS VARIABLE_NAME
|
||||
GLOBAL_VARIABLES VARIABLE_NAME
|
||||
INDEX_STATISTICS TABLE_SCHEMA
|
||||
KEYWORDS WORD
|
||||
KEY_CACHES KEY_CACHE_NAME
|
||||
KEY_COLUMN_USAGE CONSTRAINT_SCHEMA
|
||||
PARAMETERS SPECIFIC_SCHEMA
|
||||
|
@ -106,6 +109,7 @@ SCHEMA_PRIVILEGES TABLE_SCHEMA
|
|||
SESSION_STATUS VARIABLE_NAME
|
||||
SESSION_VARIABLES VARIABLE_NAME
|
||||
SPATIAL_REF_SYS SRID
|
||||
SQL_FUNCTIONS FUNCTION
|
||||
STATISTICS TABLE_SCHEMA
|
||||
SYSTEM_VARIABLES VARIABLE_NAME
|
||||
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
|
||||
PARTITION BY RANGE(a)
|
||||
(PARTITION pa VALUES LESS THAN (3),
|
||||
|
@ -8,3 +39,4 @@ PARTITION BY RANGE(a)
|
|||
PARTITION pb VALUES LESS THAN (4));
|
||||
ERROR HY000: Foreign key clause is not yet supported in conjunction with partitioning
|
||||
DROP TABLE t1;
|
||||
# End of 10.3 tests
|
||||
|
|
|
@ -1052,13 +1052,12 @@ a
|
|||
10
|
||||
DROP TABLE t1;
|
||||
CREATE TABLE t1 (a INT NOT NULL DEFAULT 0) ENGINE=InnoDB;
|
||||
SET @save_allowed = @@GLOBAL.innodb_instant_alter_column_allowed;
|
||||
SET GLOBAL innodb_instant_alter_column_allowed=never;
|
||||
iNSERT INTO t1 VALUES (10);
|
||||
ALTER TABLE t1 ADD b DATE NOT NULL DEFAULT if(unix_timestamp()>1,TIMESTAMP'2001-01-01 10:20:30',0);
|
||||
affected rows: 0
|
||||
info: Records: 0 Duplicates: 0 Warnings: 0
|
||||
SET GLOBAL innodb_instant_alter_column_allowed=@save_allowed;
|
||||
INSERT INTO t1 VALUES (10);
|
||||
ALTER TABLE t1 ADD b DATE NOT NULL DEFAULT if(unix_timestamp()>1,TIMESTAMP'2001-01-01 10:20:30',0), algorithm=copy;
|
||||
affected rows: 1
|
||||
info: Records: 1 Duplicates: 0 Warnings: 1
|
||||
Warnings:
|
||||
Note 1265 Data truncated for column 'b' at row 1
|
||||
SELECT * FROM t1;
|
||||
a b
|
||||
10 2001-01-01
|
||||
|
@ -1067,7 +1066,9 @@ CREATE TABLE t1 (a INT NOT NULL DEFAULT 0) ENGINE=InnoDB;
|
|||
iNSERT INTO t1 VALUES (10);
|
||||
ALTER TABLE t1 ADD b TIME NOT NULL DEFAULT if(unix_timestamp()>1,TIMESTAMP'2001-01-01 10:20:30',0);
|
||||
affected rows: 0
|
||||
info: Records: 0 Duplicates: 0 Warnings: 0
|
||||
info: Records: 0 Duplicates: 0 Warnings: 1
|
||||
Warnings:
|
||||
Note 1265 Data truncated for column 'b' at row 1
|
||||
SELECT * FROM t1;
|
||||
a b
|
||||
10 10:20:30
|
||||
|
|
|
@ -312,10 +312,14 @@ id c2 c3 c4 c5 c6
|
|||
affected rows: 3
|
||||
ALTER TABLE t3 ADD COLUMN c7 TIME NOT NULL DEFAULT current_timestamp();
|
||||
affected rows: 0
|
||||
info: Records: 0 Duplicates: 0 Warnings: 0
|
||||
info: Records: 0 Duplicates: 0 Warnings: 1
|
||||
Warnings:
|
||||
Note 1265 Data truncated for column 'c7' at row 1
|
||||
ALTER TABLE t3 ADD COLUMN c8 DATE NOT NULL DEFAULT current_timestamp();
|
||||
affected rows: 0
|
||||
info: Records: 0 Duplicates: 0 Warnings: 0
|
||||
info: Records: 0 Duplicates: 0 Warnings: 1
|
||||
Warnings:
|
||||
Note 1265 Data truncated for column 'c8' at row 1
|
||||
SELECT id, c2, ST_AsText(c3) c3, c4, c5, c6, c7, c8 FROM t3;
|
||||
id c2 c3 c4 c5 c6 c7 c8
|
||||
1 1 POLYGON((1 1,2 2,3 3,1 1)) 1970-01-01 03:00:42 1970-01-01 03:00:42 NULL 03:00:42 1970-01-01
|
||||
|
@ -1230,10 +1234,14 @@ id c2 c3 c4 c5 c6
|
|||
affected rows: 3
|
||||
ALTER TABLE t3 ADD COLUMN c7 TIME NOT NULL DEFAULT current_timestamp();
|
||||
affected rows: 0
|
||||
info: Records: 0 Duplicates: 0 Warnings: 0
|
||||
info: Records: 0 Duplicates: 0 Warnings: 1
|
||||
Warnings:
|
||||
Note 1265 Data truncated for column 'c7' at row 1
|
||||
ALTER TABLE t3 ADD COLUMN c8 DATE NOT NULL DEFAULT current_timestamp();
|
||||
affected rows: 0
|
||||
info: Records: 0 Duplicates: 0 Warnings: 0
|
||||
info: Records: 0 Duplicates: 0 Warnings: 1
|
||||
Warnings:
|
||||
Note 1265 Data truncated for column 'c8' at row 1
|
||||
SELECT id, c2, ST_AsText(c3) c3, c4, c5, c6, c7, c8 FROM t3;
|
||||
id c2 c3 c4 c5 c6 c7 c8
|
||||
1 1 POLYGON((1 1,2 2,3 3,1 1)) 1970-01-01 03:00:42 1970-01-01 03:00:42 NULL 03:00:42 1970-01-01
|
||||
|
@ -2148,10 +2156,14 @@ id c2 c3 c4 c5 c6
|
|||
affected rows: 3
|
||||
ALTER TABLE t3 ADD COLUMN c7 TIME NOT NULL DEFAULT current_timestamp();
|
||||
affected rows: 0
|
||||
info: Records: 0 Duplicates: 0 Warnings: 0
|
||||
info: Records: 0 Duplicates: 0 Warnings: 1
|
||||
Warnings:
|
||||
Note 1265 Data truncated for column 'c7' at row 1
|
||||
ALTER TABLE t3 ADD COLUMN c8 DATE NOT NULL DEFAULT current_timestamp();
|
||||
affected rows: 0
|
||||
info: Records: 0 Duplicates: 0 Warnings: 0
|
||||
info: Records: 0 Duplicates: 0 Warnings: 1
|
||||
Warnings:
|
||||
Note 1265 Data truncated for column 'c8' at row 1
|
||||
SELECT id, c2, ST_AsText(c3) c3, c4, c5, c6, c7, c8 FROM t3;
|
||||
id c2 c3 c4 c5 c6 c7 c8
|
||||
1 1 POLYGON((1 1,2 2,3 3,1 1)) 1970-01-01 03:00:42 1970-01-01 03:00:42 NULL 03:00:42 1970-01-01
|
||||
|
|
|
@ -1,6 +1,40 @@
|
|||
--source include/have_innodb.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
|
||||
PARTITION BY RANGE(a)
|
||||
(PARTITION pa VALUES LESS THAN (3),
|
||||
|
@ -13,3 +47,5 @@ PARTITION BY RANGE(a)
|
|||
PARTITION pb VALUES LESS THAN (4));
|
||||
|
||||
DROP TABLE t1;
|
||||
|
||||
--echo # End of 10.3 tests
|
||||
|
|
|
@ -652,13 +652,10 @@ DROP TABLE t1;
|
|||
|
||||
# DATETIME-to-DATE truncation is OK
|
||||
CREATE TABLE t1 (a INT NOT NULL DEFAULT 0) ENGINE=InnoDB;
|
||||
SET @save_allowed = @@GLOBAL.innodb_instant_alter_column_allowed;
|
||||
SET GLOBAL innodb_instant_alter_column_allowed=never;
|
||||
iNSERT INTO t1 VALUES (10);
|
||||
INSERT INTO t1 VALUES (10);
|
||||
--enable_info
|
||||
ALTER TABLE t1 ADD b DATE NOT NULL DEFAULT if(unix_timestamp()>1,TIMESTAMP'2001-01-01 10:20:30',0);
|
||||
ALTER TABLE t1 ADD b DATE NOT NULL DEFAULT if(unix_timestamp()>1,TIMESTAMP'2001-01-01 10:20:30',0), algorithm=copy;
|
||||
--disable_info
|
||||
SET GLOBAL innodb_instant_alter_column_allowed=@save_allowed;
|
||||
SELECT * FROM t1;
|
||||
DROP TABLE t1;
|
||||
|
||||
|
|
|
@ -10214,9 +10214,12 @@ do_continue:;
|
|||
if (alter_info->requested_lock == Alter_info::ALTER_TABLE_LOCK_NONE)
|
||||
ha_alter_info.online= true;
|
||||
// Ask storage engine whether to use copy or in-place
|
||||
ha_alter_info.inplace_supported=
|
||||
table->file->check_if_supported_inplace_alter(&altered_table,
|
||||
&ha_alter_info);
|
||||
{
|
||||
Check_level_instant_set check_level_save(thd, CHECK_FIELD_WARN);
|
||||
ha_alter_info.inplace_supported=
|
||||
table->file->check_if_supported_inplace_alter(&altered_table,
|
||||
&ha_alter_info);
|
||||
}
|
||||
|
||||
if (alter_info->supports_algorithm(thd, &ha_alter_info) ||
|
||||
alter_info->supports_lock(thd, &ha_alter_info))
|
||||
|
|
|
@ -1,4 +1,5 @@
|
|||
/* 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
|
||||
it under the terms of the GNU General Public License as published by
|
||||
|
@ -622,33 +623,6 @@ bool trans_rollback_to_savepoint(THD *thd, LEX_CSTRING name)
|
|||
if (thd->transaction.xid_state.check_has_uncommitted_xa())
|
||||
DBUG_RETURN(TRUE);
|
||||
|
||||
/**
|
||||
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=
|
||||
(!((WSREP_EMULATE_BINLOG_NNULL(thd) || 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))
|
||||
res= TRUE;
|
||||
else if (((thd->variables.option_bits & OPTION_KEEP_LOG) ||
|
||||
|
@ -660,7 +634,15 @@ bool trans_rollback_to_savepoint(THD *thd, LEX_CSTRING name)
|
|||
|
||||
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 &&
|
||||
(WSREP_EMULATE_BINLOG_NNULL(thd) || 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);
|
||||
|
||||
DBUG_RETURN(MY_TEST(res));
|
||||
|
|
Loading…
Reference in a new issue