mirror of
https://github.com/MariaDB/server.git
synced 2025-08-08 11:22:35 +03:00
MDEV-23108: Point in time recovery of binary log fails when sql_mode=ORACLE
Problem: ======== During point in time recovery of binary log syntax error is reported for BEGIN statement and recovery fails. Analysis: ========= In MariaDB 10.3 and later, setting the sql_mode system variable to Oracle allows the server to understand a subset of Oracle's PL/SQL language. When sql_mode=ORACLE is set, it switches the parser from the MariaDB parser to Oracle compatible parser. With this change 'BEGIN' is not considered as 'START TRANSACTION'. Hence the syntax error is reported. Fix: === At preset 'BEGIN' query is generated from 'Gtid_log_event::print'. The current session specific 'sql_mode' information is not present as part of 'Gtid_log_event'. If it was available then, mysqlbinlog tool can make use of 'sql_mode == ORACLE' and can output "START TRANSACTION" in this particular mode and for other sql_modes it will write "BEGIN" as part of output. Since it is not available 'mysqlbinlog' tool will output all 'BEGIN' statements as 'START TRANSACTION' irrespective of 'sql_mode'.
This commit is contained in:
@@ -230,7 +230,7 @@ ALTER TABLE t1 ENGINE=BLACKHOLE
|
||||
#010909 4:46:40 server id # end_log_pos # CRC32 XXX GTID 0-1-3 trans
|
||||
/*!100001 SET @@session.server_id=1*//*!*/;
|
||||
/*!100001 SET @@session.gtid_seq_no=3*//*!*/;
|
||||
BEGIN
|
||||
START TRANSACTION
|
||||
/*!*/;
|
||||
# at #
|
||||
# at #
|
||||
@@ -248,7 +248,7 @@ COMMIT
|
||||
# at #
|
||||
#010909 4:46:40 server id # end_log_pos # CRC32 XXX GTID 0-1-4 trans
|
||||
/*!100001 SET @@session.gtid_seq_no=4*//*!*/;
|
||||
BEGIN
|
||||
START TRANSACTION
|
||||
/*!*/;
|
||||
# at #
|
||||
# at #
|
||||
@@ -266,7 +266,7 @@ COMMIT
|
||||
# at #
|
||||
#010909 4:46:40 server id # end_log_pos # CRC32 XXX GTID 0-1-5 trans
|
||||
/*!100001 SET @@session.gtid_seq_no=5*//*!*/;
|
||||
BEGIN
|
||||
START TRANSACTION
|
||||
/*!*/;
|
||||
# at #
|
||||
# at #
|
||||
@@ -284,7 +284,7 @@ COMMIT
|
||||
# at #
|
||||
#010909 4:46:40 server id # end_log_pos # CRC32 XXX GTID 0-1-6 trans
|
||||
/*!100001 SET @@session.gtid_seq_no=6*//*!*/;
|
||||
BEGIN
|
||||
START TRANSACTION
|
||||
/*!*/;
|
||||
# at #
|
||||
# at #
|
||||
@@ -302,7 +302,7 @@ COMMIT
|
||||
# at #
|
||||
#010909 4:46:40 server id # end_log_pos # CRC32 XXX GTID 0-1-7 trans
|
||||
/*!100001 SET @@session.gtid_seq_no=7*//*!*/;
|
||||
BEGIN
|
||||
START TRANSACTION
|
||||
/*!*/;
|
||||
# at #
|
||||
# at #
|
||||
@@ -328,7 +328,7 @@ ALTER TABLE t1 ADD PRIMARY KEY pk_t1 (a,b)
|
||||
# at #
|
||||
#010909 4:46:40 server id # end_log_pos # CRC32 XXX GTID 0-1-9 trans
|
||||
/*!100001 SET @@session.gtid_seq_no=9*//*!*/;
|
||||
BEGIN
|
||||
START TRANSACTION
|
||||
/*!*/;
|
||||
# at #
|
||||
# at #
|
||||
@@ -346,7 +346,7 @@ COMMIT
|
||||
# at #
|
||||
#010909 4:46:40 server id # end_log_pos # CRC32 XXX GTID 0-1-10 trans
|
||||
/*!100001 SET @@session.gtid_seq_no=10*//*!*/;
|
||||
BEGIN
|
||||
START TRANSACTION
|
||||
/*!*/;
|
||||
# at #
|
||||
# at #
|
||||
@@ -364,7 +364,7 @@ COMMIT
|
||||
# at #
|
||||
#010909 4:46:40 server id # end_log_pos # CRC32 XXX GTID 0-1-11 trans
|
||||
/*!100001 SET @@session.gtid_seq_no=11*//*!*/;
|
||||
BEGIN
|
||||
START TRANSACTION
|
||||
/*!*/;
|
||||
# at #
|
||||
# at #
|
||||
@@ -390,7 +390,7 @@ ALTER TABLE t1 DROP PRIMARY KEY, ADD KEY key_t1 (a)
|
||||
# at #
|
||||
#010909 4:46:40 server id # end_log_pos # CRC32 XXX GTID 0-1-13 trans
|
||||
/*!100001 SET @@session.gtid_seq_no=13*//*!*/;
|
||||
BEGIN
|
||||
START TRANSACTION
|
||||
/*!*/;
|
||||
# at #
|
||||
# at #
|
||||
@@ -408,7 +408,7 @@ COMMIT
|
||||
# at #
|
||||
#010909 4:46:40 server id # end_log_pos # CRC32 XXX GTID 0-1-14 trans
|
||||
/*!100001 SET @@session.gtid_seq_no=14*//*!*/;
|
||||
BEGIN
|
||||
START TRANSACTION
|
||||
/*!*/;
|
||||
# at #
|
||||
# at #
|
||||
@@ -426,7 +426,7 @@ COMMIT
|
||||
# at #
|
||||
#010909 4:46:40 server id # end_log_pos # CRC32 XXX GTID 0-1-15 trans
|
||||
/*!100001 SET @@session.gtid_seq_no=15*//*!*/;
|
||||
BEGIN
|
||||
START TRANSACTION
|
||||
/*!*/;
|
||||
# at #
|
||||
# at #
|
||||
|
@@ -46,7 +46,7 @@ SET @@session.lc_time_names=0/*!*/;
|
||||
SET @@session.collation_database=DEFAULT/*!*/;
|
||||
create table t1 (a timestamp(4) NOT NULL DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP, b varchar(100), c datetime(2))
|
||||
/*!*/;
|
||||
BEGIN
|
||||
START TRANSACTION
|
||||
/*!*/;
|
||||
SET TIMESTAMP=1293832861.123456/*!*/;
|
||||
SET @@session.time_zone='+03:00'/*!*/;
|
||||
@@ -55,7 +55,7 @@ insert t1 (b,c) values (now(6), now(6))
|
||||
SET TIMESTAMP=1293832861.123456/*!*/;
|
||||
COMMIT
|
||||
/*!*/;
|
||||
BEGIN
|
||||
START TRANSACTION
|
||||
/*!*/;
|
||||
SET TIMESTAMP=1293832861/*!*/;
|
||||
insert t1 values ('2010-10-10 10:10:10.101010','2010-10-10 10:10:10.101010','2010-10-10 10:10:10.101010')
|
||||
@@ -63,7 +63,7 @@ insert t1 values ('2010-10-10 10:10:10.101010','2010-10-10 10:10:10.101010','201
|
||||
SET TIMESTAMP=1293832861/*!*/;
|
||||
COMMIT
|
||||
/*!*/;
|
||||
BEGIN
|
||||
START TRANSACTION
|
||||
/*!*/;
|
||||
SET TIMESTAMP=1643756522.654321/*!*/;
|
||||
insert t1 (b,c) values (now(), now())
|
||||
@@ -71,7 +71,7 @@ insert t1 (b,c) values (now(), now())
|
||||
SET TIMESTAMP=1643756522.654321/*!*/;
|
||||
COMMIT
|
||||
/*!*/;
|
||||
BEGIN
|
||||
START TRANSACTION
|
||||
/*!*/;
|
||||
SET TIMESTAMP=1643756522.654321/*!*/;
|
||||
insert t1 (b,c) values (0,0)
|
||||
@@ -79,7 +79,7 @@ insert t1 (b,c) values (0,0)
|
||||
SET TIMESTAMP=1643756522.654321/*!*/;
|
||||
COMMIT
|
||||
/*!*/;
|
||||
BEGIN
|
||||
START TRANSACTION
|
||||
/*!*/;
|
||||
SET TIMESTAMP=1643756522.654321/*!*/;
|
||||
insert t1 (a,b,c) values (0,0,now(6))
|
||||
|
@@ -189,7 +189,7 @@ SET @@session.collation_database=DEFAULT/*!*/;
|
||||
CREATE TABLE `t``1` (`a``1` VARCHAR(4) PRIMARY KEY, `b``2` VARCHAR(3),
|
||||
`c``3` VARCHAR(7))
|
||||
/*!*/;
|
||||
BEGIN
|
||||
START TRANSACTION
|
||||
/*!*/;
|
||||
SET TIMESTAMP=1000000000/*!*/;
|
||||
LOAD DATA LOCAL INFILE '<name>' INTO TABLE `t``1` FIELDS TERMINATED BY ',' ENCLOSED BY '\'' ESCAPED BY '\\' LINES TERMINATED BY '\n' (`a``1`, @`b```) SET `b``2`= @`b```, `c``3`= concat('|', "b""a'z", "!")
|
||||
@@ -200,7 +200,7 @@ COMMIT
|
||||
SET TIMESTAMP=1000000000/*!*/;
|
||||
truncate `t``1`
|
||||
/*!*/;
|
||||
BEGIN
|
||||
START TRANSACTION
|
||||
/*!*/;
|
||||
use `test`/*!*/;
|
||||
SET TIMESTAMP=1000000000/*!*/;
|
||||
@@ -288,7 +288,7 @@ SET @@session.lc_time_names=0/*!*/;
|
||||
SET @@session.collation_database=DEFAULT/*!*/;
|
||||
CREATE TABLE t1 (a1 BIGINT PRIMARY KEY, a2 BIGINT, a3 BIGINT, a4 BIGINT UNSIGNED, b DOUBLE, c DECIMAL(65,10), d VARCHAR(100))
|
||||
/*!*/;
|
||||
BEGIN
|
||||
START TRANSACTION
|
||||
/*!*/;
|
||||
SET TIMESTAMP=1000000000/*!*/;
|
||||
INSERT INTO t1 VALUES (-9223372036854775808,42,9223372036854775807,18446744073709551615,-1234560123456789e110, -1234501234567890123456789012345678901234567890123456789.0123456789, REPEAT("x", 100))
|
||||
@@ -296,7 +296,7 @@ INSERT INTO t1 VALUES (-9223372036854775808,42,9223372036854775807,1844674407370
|
||||
SET TIMESTAMP=1000000000/*!*/;
|
||||
COMMIT
|
||||
/*!*/;
|
||||
BEGIN
|
||||
START TRANSACTION
|
||||
/*!*/;
|
||||
SET @`a``1`:=-9223372036854775808/*!*/;
|
||||
SET @`a``2`:=42/*!*/;
|
||||
@@ -383,7 +383,7 @@ master-bin.000002 # Query 1 # COMMIT
|
||||
/*!50003 SET @OLD_COMPLETION_TYPE=@@COMPLETION_TYPE,COMPLETION_TYPE=0*/;
|
||||
DELIMITER /*!*/;
|
||||
ROLLBACK/*!*/;
|
||||
BEGIN
|
||||
START TRANSACTION
|
||||
/*!*/;
|
||||
use `ts``et`/*!*/;
|
||||
SET TIMESTAMP=1000000000/*!*/;
|
||||
|
@@ -810,7 +810,7 @@ insert into t1 values (b);
|
||||
insert into t1 values (unix_timestamp());
|
||||
end
|
||||
/*!*/;
|
||||
BEGIN
|
||||
START TRANSACTION
|
||||
/*!*/;
|
||||
SET TIMESTAMP=t/*!*/;
|
||||
insert into t1 values ( NAME_CONST('b',8))
|
||||
@@ -818,7 +818,7 @@ insert into t1 values ( NAME_CONST('b',8))
|
||||
SET TIMESTAMP=t/*!*/;
|
||||
COMMIT
|
||||
/*!*/;
|
||||
BEGIN
|
||||
START TRANSACTION
|
||||
/*!*/;
|
||||
SET TIMESTAMP=t/*!*/;
|
||||
insert into t1 values (unix_timestamp())
|
||||
@@ -826,7 +826,7 @@ insert into t1 values (unix_timestamp())
|
||||
SET TIMESTAMP=t/*!*/;
|
||||
COMMIT
|
||||
/*!*/;
|
||||
BEGIN
|
||||
START TRANSACTION
|
||||
/*!*/;
|
||||
SET TIMESTAMP=t/*!*/;
|
||||
delete from t1
|
||||
@@ -872,7 +872,7 @@ insert into t2 values(3);
|
||||
insert into t1 values (5);
|
||||
end
|
||||
/*!*/;
|
||||
BEGIN
|
||||
START TRANSACTION
|
||||
/*!*/;
|
||||
SET TIMESTAMP=t/*!*/;
|
||||
insert into t2 values(3)
|
||||
@@ -880,7 +880,7 @@ insert into t2 values(3)
|
||||
SET TIMESTAMP=t/*!*/;
|
||||
COMMIT
|
||||
/*!*/;
|
||||
BEGIN
|
||||
START TRANSACTION
|
||||
/*!*/;
|
||||
SET TIMESTAMP=t/*!*/;
|
||||
insert into t1 values (15)
|
||||
@@ -888,7 +888,7 @@ insert into t1 values (15)
|
||||
SET TIMESTAMP=t/*!*/;
|
||||
COMMIT
|
||||
/*!*/;
|
||||
BEGIN
|
||||
START TRANSACTION
|
||||
/*!*/;
|
||||
SET TIMESTAMP=t/*!*/;
|
||||
insert into t2 values(3)
|
||||
@@ -899,7 +899,7 @@ COMMIT
|
||||
SET TIMESTAMP=t/*!*/;
|
||||
alter procedure foo4 sql security invoker
|
||||
/*!*/;
|
||||
BEGIN
|
||||
START TRANSACTION
|
||||
/*!*/;
|
||||
SET TIMESTAMP=t/*!*/;
|
||||
insert into t2 values(3)
|
||||
@@ -907,7 +907,7 @@ insert into t2 values(3)
|
||||
SET TIMESTAMP=t/*!*/;
|
||||
COMMIT
|
||||
/*!*/;
|
||||
BEGIN
|
||||
START TRANSACTION
|
||||
/*!*/;
|
||||
SET TIMESTAMP=t/*!*/;
|
||||
insert into t1 values (5)
|
||||
@@ -915,7 +915,7 @@ insert into t1 values (5)
|
||||
SET TIMESTAMP=t/*!*/;
|
||||
COMMIT
|
||||
/*!*/;
|
||||
BEGIN
|
||||
START TRANSACTION
|
||||
/*!*/;
|
||||
SET TIMESTAMP=t/*!*/;
|
||||
delete from t2
|
||||
@@ -936,7 +936,7 @@ begin
|
||||
insert into t2 values(20),(20);
|
||||
end
|
||||
/*!*/;
|
||||
BEGIN
|
||||
START TRANSACTION
|
||||
/*!*/;
|
||||
SET TIMESTAMP=t/*!*/;
|
||||
insert into t2 values(20),(20)
|
||||
@@ -964,7 +964,7 @@ insert into t1 values (x);
|
||||
return x+2;
|
||||
end
|
||||
/*!*/;
|
||||
BEGIN
|
||||
START TRANSACTION
|
||||
/*!*/;
|
||||
SET TIMESTAMP=t/*!*/;
|
||||
delete t1,t2 from t1,t2
|
||||
@@ -972,7 +972,7 @@ delete t1,t2 from t1,t2
|
||||
SET TIMESTAMP=t/*!*/;
|
||||
COMMIT
|
||||
/*!*/;
|
||||
BEGIN
|
||||
START TRANSACTION
|
||||
/*!*/;
|
||||
SET TIMESTAMP=t/*!*/;
|
||||
SELECT `mysqltest1`.`fn1`(20)
|
||||
@@ -980,7 +980,7 @@ SELECT `mysqltest1`.`fn1`(20)
|
||||
SET TIMESTAMP=t/*!*/;
|
||||
COMMIT
|
||||
/*!*/;
|
||||
BEGIN
|
||||
START TRANSACTION
|
||||
/*!*/;
|
||||
SET TIMESTAMP=t/*!*/;
|
||||
insert into t2 values(fn1(21))
|
||||
@@ -998,7 +998,7 @@ begin
|
||||
return unix_timestamp();
|
||||
end
|
||||
/*!*/;
|
||||
BEGIN
|
||||
START TRANSACTION
|
||||
/*!*/;
|
||||
SET TIMESTAMP=t/*!*/;
|
||||
delete from t1
|
||||
@@ -1006,7 +1006,7 @@ delete from t1
|
||||
SET TIMESTAMP=t/*!*/;
|
||||
COMMIT
|
||||
/*!*/;
|
||||
BEGIN
|
||||
START TRANSACTION
|
||||
/*!*/;
|
||||
SET TIMESTAMP=t/*!*/;
|
||||
insert into t1 values(fn1())
|
||||
@@ -1028,7 +1028,7 @@ begin
|
||||
return 0;
|
||||
end
|
||||
/*!*/;
|
||||
BEGIN
|
||||
START TRANSACTION
|
||||
/*!*/;
|
||||
SET TIMESTAMP=t/*!*/;
|
||||
delete from t2
|
||||
@@ -1049,7 +1049,7 @@ insert into t2 values(x),(x);
|
||||
return 10;
|
||||
end
|
||||
/*!*/;
|
||||
BEGIN
|
||||
START TRANSACTION
|
||||
/*!*/;
|
||||
SET TIMESTAMP=t/*!*/;
|
||||
SELECT `mysqltest1`.`fn1`(100)
|
||||
@@ -1057,7 +1057,7 @@ SELECT `mysqltest1`.`fn1`(100)
|
||||
SET TIMESTAMP=t/*!*/;
|
||||
COMMIT
|
||||
/*!*/;
|
||||
BEGIN
|
||||
START TRANSACTION
|
||||
/*!*/;
|
||||
SET TIMESTAMP=t/*!*/;
|
||||
SELECT `mysqltest1`.`fn1`(20)
|
||||
@@ -1065,7 +1065,7 @@ SELECT `mysqltest1`.`fn1`(20)
|
||||
SET TIMESTAMP=t/*!*/;
|
||||
COMMIT
|
||||
/*!*/;
|
||||
BEGIN
|
||||
START TRANSACTION
|
||||
/*!*/;
|
||||
SET TIMESTAMP=t/*!*/;
|
||||
delete from t1
|
||||
@@ -1076,7 +1076,7 @@ COMMIT
|
||||
SET TIMESTAMP=t/*!*/;
|
||||
CREATE DEFINER=`root`@`localhost` trigger trg before insert on t1 for each row set new.a= 10
|
||||
/*!*/;
|
||||
BEGIN
|
||||
START TRANSACTION
|
||||
/*!*/;
|
||||
SET TIMESTAMP=t/*!*/;
|
||||
insert into t1 values (1)
|
||||
@@ -1084,7 +1084,7 @@ insert into t1 values (1)
|
||||
SET TIMESTAMP=t/*!*/;
|
||||
COMMIT
|
||||
/*!*/;
|
||||
BEGIN
|
||||
START TRANSACTION
|
||||
/*!*/;
|
||||
SET TIMESTAMP=t/*!*/;
|
||||
delete from t1
|
||||
@@ -1095,7 +1095,7 @@ COMMIT
|
||||
SET TIMESTAMP=t/*!*/;
|
||||
drop trigger trg
|
||||
/*!*/;
|
||||
BEGIN
|
||||
START TRANSACTION
|
||||
/*!*/;
|
||||
SET TIMESTAMP=t/*!*/;
|
||||
insert into t1 values (1)
|
||||
@@ -1142,7 +1142,7 @@ CREATE ALGORITHM=UNDEFINED DEFINER=`root`@`localhost` SQL SECURITY DEFINER VIEW
|
||||
SET TIMESTAMP=t/*!*/;
|
||||
create table t1 (a int)
|
||||
/*!*/;
|
||||
BEGIN
|
||||
START TRANSACTION
|
||||
/*!*/;
|
||||
SET TIMESTAMP=t/*!*/;
|
||||
insert into t1 (a) values (f1())
|
||||
@@ -1169,7 +1169,7 @@ SET TIMESTAMP=t/*!*/;
|
||||
CREATE DEFINER=`root`@`localhost` PROCEDURE `p1`(arg VARCHAR(10))
|
||||
INSERT INTO t1 VALUES(arg)
|
||||
/*!*/;
|
||||
BEGIN
|
||||
START TRANSACTION
|
||||
/*!*/;
|
||||
SET TIMESTAMP=t/*!*/;
|
||||
INSERT INTO t1 VALUES( NAME_CONST('arg',_latin1'test' COLLATE 'latin1_swedish_ci'))
|
||||
@@ -1223,7 +1223,7 @@ SET TIMESTAMP=t/*!*/;
|
||||
CREATE DEFINER=`root`@`localhost` PROCEDURE `mysqltest`.`test`()
|
||||
begin end
|
||||
/*!*/;
|
||||
BEGIN
|
||||
START TRANSACTION
|
||||
/*!*/;
|
||||
SET TIMESTAMP=t/*!*/;
|
||||
insert into t values ( 1 )
|
||||
@@ -1238,7 +1238,7 @@ insert into t values (1);
|
||||
return 0;
|
||||
end
|
||||
/*!*/;
|
||||
BEGIN
|
||||
START TRANSACTION
|
||||
/*!*/;
|
||||
use `mysqltest`/*!*/;
|
||||
SET TIMESTAMP=t/*!*/;
|
||||
|
Reference in New Issue
Block a user