Skip to content
Projects
Groups
Snippets
Help
Loading...
Help
Support
Keyboard shortcuts
?
Submit feedback
Contribute to GitLab
Sign in / Register
Toggle navigation
M
MariaDB
Project overview
Project overview
Details
Activity
Releases
Repository
Repository
Files
Commits
Branches
Tags
Contributors
Graph
Compare
Issues
0
Issues
0
List
Boards
Labels
Milestones
Merge Requests
0
Merge Requests
0
CI / CD
CI / CD
Pipelines
Jobs
Schedules
Analytics
Analytics
CI / CD
Repository
Value Stream
Wiki
Wiki
Snippets
Snippets
Members
Members
Collapse sidebar
Close sidebar
Activity
Graph
Create a new issue
Jobs
Commits
Issue Boards
Open sidebar
nexedi
MariaDB
Commits
c294443b
Commit
c294443b
authored
Jul 02, 2021
by
Marko Mäkelä
Browse files
Options
Browse Files
Download
Plain Diff
Merge 10.3 into 10.4
parents
fa8eb4de
05f7fd57
Changes
8
Hide whitespace changes
Inline
Side-by-side
Showing
8 changed files
with
117 additions
and
50 deletions
+117
-50
mysql-test/main/information_schema-big.result
mysql-test/main/information_schema-big.result
+4
-0
mysql-test/suite/innodb/r/alter_partitioned.result
mysql-test/suite/innodb/r/alter_partitioned.result
+32
-0
mysql-test/suite/innodb/r/innodb-alter.result
mysql-test/suite/innodb/r/innodb-alter.result
+9
-8
mysql-test/suite/innodb/r/instant_alter.result
mysql-test/suite/innodb/r/instant_alter.result
+18
-6
mysql-test/suite/innodb/t/alter_partitioned.test
mysql-test/suite/innodb/t/alter_partitioned.test
+36
-0
mysql-test/suite/innodb/t/innodb-alter.test
mysql-test/suite/innodb/t/innodb-alter.test
+2
-5
sql/sql_table.cc
sql/sql_table.cc
+6
-3
sql/transaction.cc
sql/transaction.cc
+10
-28
No files found.
mysql-test/main/information_schema-big.result
View file @
c294443b
...
...
@@ -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
...
...
mysql-test/suite/innodb/r/alter_partitioned.result
View file @
c294443b
#
# 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
mysql-test/suite/innodb/r/innodb-alter.result
View file @
c294443b
...
...
@@ -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
...
...
mysql-test/suite/innodb/r/instant_alter.result
View file @
c294443b
...
...
@@ -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
...
...
mysql-test/suite/innodb/t/alter_partitioned.test
View file @
c294443b
--
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
mysql-test/suite/innodb/t/innodb-alter.test
View file @
c294443b
...
...
@@ -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
;
...
...
sql/sql_table.cc
View file @
c294443b
...
...
@@ -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
))
...
...
sql/transaction.cc
View file @
c294443b
/* 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
));
...
...
Write
Preview
Markdown
is supported
0%
Try again
or
attach a new file
Attach a file
Cancel
You are about to add
0
people
to the discussion. Proceed with caution.
Finish editing this message first!
Cancel
Please
register
or
sign in
to comment