mirror of
https://github.com/MariaDB/server.git
synced 2025-01-18 04:53:01 +01:00
55012e427b
slave The stored-routine code took the contents of the (lowest) parser and copied it directly to the binlog, which causes problems if there is a special case of interpretation at the parser level -- which there is, in the "/*!VER */" comments. The trailing "*/" caused errors on the slave, naturally. Now, since by that point we have /properly/ created parse-tree (as the rest of the server should do!) for the stored-routine CREATE, we can construct a perfect statement from that information, instead of writing uncertain information from an unknown parser state. Fortunately, there's already a function nearby that does exactly that. --- Update for Bug#36570. Qualify routine names with db name when writing to the binlog ONLY if the source text is qualified. mysql-test/r/binlog_innodb.result: Offsets changed due to quoting. --- New offset to account for db-qualified names. mysql-test/r/ctype_cp932_binlog.result: Offsets changed due to quoting. --- Qualify routine names with DB. Offsets change also. mysql-test/r/mysqlbinlog.result: Case changed in result due to interpretation of data instead of literal recitation. --- Qualify procedure name with db. mysql-test/r/rpl_sp.result: Offsets changed due to quoting. Added tests. --- Qualify routine names with DB if qualified in query. Offsets change also. mysql-test/t/rpl_sp.test: Add version-limiting quotes to exercise bug#36570. Test that backtick-quoted identifiers and labels work also. --- Use different db to show qualification works. Qualify routine names with DB if qualified in query. sql/sp.cc: In create_string, we may not have a sp_name parameter yet, so instead pass the char* and length of the only member we'd get out of it. Having done that, we can use the same function to write the CREATE (FUNC|TRIG|PROC) statement to the binlog as we always used to display the statement to the user. --- Make the db name part of the CREATE string if it is specified. Specify it in part of writing to the binlog when creating a new routine. sql/sp_head.cc: Set the sp_head m_explicit_name member as the sp_name member is set. We can not peek at this later, as the sp_name is gone by then. sql/sp_head.h: Add a member to track whether the name is qualified with the database.
39 lines
1 KiB
Text
39 lines
1 KiB
Text
show status like "binlog_cache_use";
|
|
Variable_name Value
|
|
Binlog_cache_use 0
|
|
show status like "binlog_cache_disk_use";
|
|
Variable_name Value
|
|
Binlog_cache_disk_use 0
|
|
create table t1 (a int) engine=innodb;
|
|
show status like "binlog_cache_use";
|
|
Variable_name Value
|
|
Binlog_cache_use 1
|
|
show status like "binlog_cache_disk_use";
|
|
Variable_name Value
|
|
Binlog_cache_disk_use 1
|
|
begin;
|
|
delete from t1;
|
|
commit;
|
|
show status like "binlog_cache_use";
|
|
Variable_name Value
|
|
Binlog_cache_use 2
|
|
show status like "binlog_cache_disk_use";
|
|
Variable_name Value
|
|
Binlog_cache_disk_use 1
|
|
drop table t1;
|
|
CREATE TABLE t1 (a INT NOT NULL AUTO_INCREMENT PRIMARY KEY) ENGINE=MyISAM;
|
|
CREATE TABLE t2 (a INT NOT NULL AUTO_INCREMENT PRIMARY KEY) ENGINE=InnoDB;
|
|
CREATE FUNCTION bug23333()
|
|
RETURNS int(11)
|
|
DETERMINISTIC
|
|
BEGIN
|
|
INSERT INTO t1 VALUES (NULL);
|
|
SELECT COUNT(*) FROM t1 INTO @a;
|
|
RETURN @a;
|
|
END|
|
|
INSERT INTO t2 VALUES (2),(10+bug23333());
|
|
SHOW MASTER STATUS;
|
|
File Position Binlog_Do_DB Binlog_Ignore_DB
|
|
# 184141
|
|
DROP FUNCTION bug23333;
|
|
DROP TABLE t1, t2;
|