mirror of
https://github.com/MariaDB/server.git
synced 2026-10-23 18:49:29 +03:00
Merge branch '10.11-elenst' into 11.4
This commit is contained in:
@@ -104,3 +104,74 @@ BINLOG '-2079193929';
|
||||
ERROR HY000: Decoding of base64 string failed
|
||||
BINLOG 'xç↓%~∙D╒ƒ╡';
|
||||
ERROR HY000: Decoding of base64 string failed
|
||||
#
|
||||
# MDEV-39074 trans_rollback_stmt(THD *): Assertion `! thd->in_sub_stmt' failed.
|
||||
#
|
||||
create table t0 (a int);
|
||||
create table t1 (a int);
|
||||
## Case 1: Trigger (disabled)
|
||||
create trigger trig_t0_insert after insert on t0 for each row binlog 'enabled';
|
||||
ERROR 0A000: BINLOG is not allowed in stored procedures
|
||||
create trigger trig_t0_insert after insert on t0 for each row
|
||||
binlog @a, @b;
|
||||
ERROR 0A000: BINLOG is not allowed in stored procedures
|
||||
## Case 2: SP (disabled)
|
||||
create procedure proc_t1_insert() binlog 'AAAAAAIBAAAAPwAAAAAAAAAAAAEAAAAAAAAABAAAAAB0ZXN0AGluc2VydCBpbnRvIHQxIHZhbHVlcyAoOTkp';
|
||||
ERROR 0A000: BINLOG is not allowed in stored procedures
|
||||
## Case 3: SF (disabled)
|
||||
create function func_t1_insert() returns int
|
||||
begin
|
||||
binlog 'TFtYRxMBAAAAKQAAAH8BAAAAABAAAAAAAAAABHRlc3QAAnQxAAEDAAE=TFtYRxcBAAAAIgAAAKEBAAAQABAAAAAAAAEAAf/+AwAAAA==';
|
||||
return 0;
|
||||
end|
|
||||
ERROR 0A000: BINLOG is not allowed in stored procedures
|
||||
create function func_t1_insert() returns int
|
||||
begin
|
||||
binlog @a, @b;
|
||||
return 0;
|
||||
end|
|
||||
ERROR 0A000: BINLOG is not allowed in stored procedures
|
||||
## Case 4: Event (disabled)
|
||||
create event ev_t1_insert on schedule every 1 day do
|
||||
binlog 'TFtYRxMBAAAAKQAAAH8BAAAAABAAAAAAAAAABHRlc3QAAnQxAAEDAAE=TFtYRxcBAAAAIgAAAKEBAAAQABAAAAAAAAEAAf/+AwAAAA==';
|
||||
ERROR 0A000: BINLOG is not allowed in stored procedures
|
||||
## Case 5: Anonymous block (disabled)
|
||||
begin not atomic
|
||||
binlog 'TFtYRxMBAAAAKQAAAH8BAAAAABAAAAAAAAAABHRlc3QAAnQxAAEDAAE=TFtYRxcBAAAAIgAAAKEBAAAQABAAAAAAAAEAAf/+AwAAAA==';
|
||||
end|
|
||||
ERROR 0A000: BINLOG is not allowed in stored procedures
|
||||
## Case 6: Dynamic SQL in SP (disabled)
|
||||
create procedure proc_t1_insert()
|
||||
execute immediate "binlog 'TFtYRxMBAAAAKQAAAH8BAAAAABAAAAAAAAAABHRlc3QAAnQxAAEDAAE=TFtYRxcBAAAAIgAAAKEBAAAQABAAAAAAAAEAAf/+AwAAAA=='";
|
||||
call proc_t1_insert();
|
||||
ERROR 0A000: BINLOG is not allowed in stored procedures
|
||||
drop procedure proc_t1_insert;
|
||||
prepare stmt from "binlog 'TFtYRxMBAAAAKQAAAH8BAAAAABAAAAAAAAAABHRlc3QAAnQxAAEDAAE=TFtYRxcBAAAAIgAAAKEBAAAQABAAAAAAAAEAAf/+AwAAAA=='";
|
||||
create procedure proc_t1_insert() execute stmt;
|
||||
call proc_t1_insert();
|
||||
ERROR 0A000: BINLOG is not allowed in stored procedures
|
||||
drop procedure proc_t1_insert;
|
||||
deallocate prepare stmt;
|
||||
## Case 7: Row event in PS (works)
|
||||
binlog 'ODdYRw8BAAAAZgAAAGoAAAABAAQANS4xLjIzLXJjLWRlYnVnLWxvZwAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA4N1hHEzgNAAgAEgAEBAQEEgAAUwAEGggAAAAICAgC';
|
||||
prepare stmt from "binlog 'TFtYRxMBAAAAKQAAAH8BAAAAABAAAAAAAAAABHRlc3QAAnQxAAEDAAE=TFtYRxcBAAAAIgAAAKEBAAAQABAAAAAAAAEAAf/+AwAAAA=='";
|
||||
execute stmt;
|
||||
execute stmt;
|
||||
deallocate prepare stmt;
|
||||
select * from t1;
|
||||
a
|
||||
3
|
||||
3
|
||||
## Case 8: Statement event in PS (works)
|
||||
prepare stmt from "binlog 'AAAAAAIBAAAAPwAAAAAAAAAAAAEAAAAAAAAABAAAAAB0ZXN0AGluc2VydCBpbnRvIHQxIHZhbHVlcyAoOTkp'";
|
||||
execute stmt;
|
||||
execute stmt;
|
||||
deallocate prepare stmt;
|
||||
select * from t1;
|
||||
a
|
||||
3
|
||||
3
|
||||
99
|
||||
99
|
||||
drop table t0, t1;
|
||||
# End of 10.11 tests
|
||||
|
||||
@@ -164,3 +164,101 @@ BINLOG '123';
|
||||
BINLOG '-2079193929';
|
||||
--error ER_BASE64_DECODE_ERROR
|
||||
BINLOG 'xç↓%~∙D╒ƒ╡';
|
||||
|
||||
--echo #
|
||||
--echo # MDEV-39074 trans_rollback_stmt(THD *): Assertion `! thd->in_sub_stmt' failed.
|
||||
--echo #
|
||||
|
||||
create table t0 (a int);
|
||||
create table t1 (a int);
|
||||
|
||||
# Format_description_log_event, same as in the FD test above
|
||||
--let $FORMAT_DESCR_LOG_EVENT= 'ODdYRw8BAAAAZgAAAGoAAAABAAQANS4xLjIzLXJjLWRlYnVnLWxvZwAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA4N1hHEzgNAAgAEgAEBAQEEgAAUwAEGggAAAAICAgC'
|
||||
|
||||
# table_map+write_rows_log_event corresponding to: insert into t1 values (3)
|
||||
--let $ROW_INSERT_T1= 'TFtYRxMBAAAAKQAAAH8BAAAAABAAAAAAAAAABHRlc3QAAnQxAAEDAAE=TFtYRxcBAAAAIgAAAKEBAAAQABAAAAAAAAEAAf/+AwAAAA=='
|
||||
|
||||
# Query_log_event (no checksum, matches the checksum-less FD event above)
|
||||
# corresponding to: insert into t1 values (99)
|
||||
--let $STMT_INSERT_T1= 'AAAAAAIBAAAAPwAAAAAAAAAAAAEAAAAAAAAABAAAAAB0ZXN0AGluc2VydCBpbnRvIHQxIHZhbHVlcyAoOTkp'
|
||||
|
||||
--echo ## Case 1: Trigger (disabled)
|
||||
|
||||
--error ER_SP_BADSTATEMENT
|
||||
create trigger trig_t0_insert after insert on t0 for each row binlog 'enabled';
|
||||
--error ER_SP_BADSTATEMENT
|
||||
create trigger trig_t0_insert after insert on t0 for each row
|
||||
binlog @a, @b;
|
||||
|
||||
--echo ## Case 2: SP (disabled)
|
||||
|
||||
--error ER_SP_BADSTATEMENT
|
||||
eval create procedure proc_t1_insert() binlog $STMT_INSERT_T1;
|
||||
|
||||
--echo ## Case 3: SF (disabled)
|
||||
|
||||
delimiter |;
|
||||
--error ER_SP_BADSTATEMENT
|
||||
eval create function func_t1_insert() returns int
|
||||
begin
|
||||
binlog $ROW_INSERT_T1;
|
||||
return 0;
|
||||
end|
|
||||
--error ER_SP_BADSTATEMENT
|
||||
create function func_t1_insert() returns int
|
||||
begin
|
||||
binlog @a, @b;
|
||||
return 0;
|
||||
end|
|
||||
delimiter ;|
|
||||
|
||||
--echo ## Case 4: Event (disabled)
|
||||
|
||||
--error ER_SP_BADSTATEMENT
|
||||
eval create event ev_t1_insert on schedule every 1 day do
|
||||
binlog $ROW_INSERT_T1;
|
||||
|
||||
--echo ## Case 5: Anonymous block (disabled)
|
||||
|
||||
delimiter |;
|
||||
--error ER_SP_BADSTATEMENT
|
||||
eval begin not atomic
|
||||
binlog $ROW_INSERT_T1;
|
||||
end|
|
||||
delimiter ;|
|
||||
|
||||
--echo ## Case 6: Dynamic SQL in SP (disabled)
|
||||
|
||||
eval create procedure proc_t1_insert()
|
||||
execute immediate "binlog $ROW_INSERT_T1";
|
||||
--error ER_SP_BADSTATEMENT
|
||||
call proc_t1_insert();
|
||||
drop procedure proc_t1_insert;
|
||||
|
||||
eval prepare stmt from "binlog $ROW_INSERT_T1";
|
||||
create procedure proc_t1_insert() execute stmt;
|
||||
--error ER_SP_BADSTATEMENT
|
||||
call proc_t1_insert();
|
||||
drop procedure proc_t1_insert;
|
||||
deallocate prepare stmt;
|
||||
|
||||
--echo ## Case 7: Row event in PS (works)
|
||||
|
||||
eval binlog $FORMAT_DESCR_LOG_EVENT;
|
||||
eval prepare stmt from "binlog $ROW_INSERT_T1";
|
||||
execute stmt;
|
||||
execute stmt;
|
||||
deallocate prepare stmt;
|
||||
select * from t1;
|
||||
|
||||
--echo ## Case 8: Statement event in PS (works)
|
||||
|
||||
eval prepare stmt from "binlog $STMT_INSERT_T1";
|
||||
execute stmt;
|
||||
execute stmt;
|
||||
deallocate prepare stmt;
|
||||
select * from t1;
|
||||
|
||||
drop table t0, t1;
|
||||
|
||||
--echo # End of 10.11 tests
|
||||
|
||||
@@ -10,6 +10,7 @@
|
||||
# 3. Verify the server is still usable: a normal CHANGE MASTER for a
|
||||
# new, short-named channel succeeds.
|
||||
#
|
||||
--source include/not_windows.inc
|
||||
--source include/master-slave.inc
|
||||
|
||||
--connection slave
|
||||
|
||||
@@ -52,13 +52,22 @@ if (`SELECT "$master_file" != "" OR
|
||||
--source include/stop_slave.inc
|
||||
|
||||
# Create a relay-log.info file with a position value > 2^31
|
||||
--let $MYSQLD_DATADIR= `select @@datadir`
|
||||
--remove_file $MYSQLD_DATADIR/relay-log.info
|
||||
--write_file $MYSQLD_DATADIR/relay-log.info
|
||||
./slave-relay-bin.000001
|
||||
2147483648
|
||||
--let MYSQLD_DATADIR= `select @@datadir`
|
||||
perl;
|
||||
my $file = "$ENV{MYSQLD_DATADIR}/relay-log.info";
|
||||
my $newpos = '2147483648';
|
||||
|
||||
0
|
||||
open(my $in, "<", $file) or die "Cannot open $file: $!";
|
||||
binmode($in); # To preserve line endings
|
||||
my @lines = <$in>;
|
||||
close($in);
|
||||
|
||||
$lines[1] = "$newpos\n";
|
||||
|
||||
open(my $out, ">", $file) or die "Cannot write to $file: $!";
|
||||
binmode($out); # To preserve line endings
|
||||
print $out @lines;
|
||||
close($out) or die "Error closing $file: $!";
|
||||
EOF
|
||||
|
||||
--let $rpl_server_number= 2
|
||||
|
||||
@@ -238,7 +238,7 @@ connection master;
|
||||
create table t4 (f text character set utf8);
|
||||
create table t5 (f text character set cp932);
|
||||
--exec $MYSQL --default-character-set=utf8 test -e "insert into t4 values(_utf8'ソ')"
|
||||
--exec $MYSQL --default-character-set=cp932 test -e "insert into t5 values(_cp932'ƒ\');"
|
||||
--exec $MYSQL --default-character-set=cp932 test -e "insert into t5 values(UNHEX('835C'))"
|
||||
flush logs;
|
||||
rename table t4 to t04, t5 to t05;
|
||||
--exec $MYSQL_BINLOG $MYSQLD_DATADIR/master-bin.000001 | $MYSQL --default-character-set=utf8
|
||||
|
||||
@@ -244,6 +244,16 @@ void mysql_client_binlog_statement(THD* thd)
|
||||
thd->lex->comment.length : 2048),
|
||||
thd->lex->comment.str));
|
||||
|
||||
/*
|
||||
The parser refuses BINLOG in a routine body; this catches dynamic SQL
|
||||
(EXECUTE IMMEDIATE, EXECUTE) run from a routine.
|
||||
*/
|
||||
if (thd->spcont)
|
||||
{
|
||||
my_error(ER_SP_BADSTATEMENT, MYF(0), "BINLOG");
|
||||
DBUG_VOID_RETURN;
|
||||
}
|
||||
|
||||
if (check_global_access(thd, PRIV_STMT_BINLOG))
|
||||
DBUG_VOID_RETURN;
|
||||
|
||||
@@ -421,8 +431,12 @@ void mysql_client_binlog_statement(THD* thd)
|
||||
applied in PS mode. So, reset the current lex temporary to point to
|
||||
thd->main_lex before running ev->apply_event() and restore its
|
||||
original value on return.
|
||||
|
||||
Likewise, point thd->stmt_arena to thd: otherwise a Query event's
|
||||
statement leaks its allocations onto the PS's persistent arena.
|
||||
*/
|
||||
LEX *backup_lex;
|
||||
SCOPE_VALUE(thd->stmt_arena, static_cast<Query_arena *>(thd));
|
||||
|
||||
thd->backup_and_reset_current_lex(&backup_lex);
|
||||
err= save_restore_context_apply_event(ev, rgi);
|
||||
|
||||
@@ -8378,6 +8378,8 @@ table_index_name:
|
||||
binlog_base64_event:
|
||||
BINLOG_SYM TEXT_STRING_sys
|
||||
{
|
||||
if (Lex->sphead)
|
||||
my_yyabort_error((ER_SP_BADSTATEMENT, MYF(0), "BINLOG"));
|
||||
Lex->sql_command = SQLCOM_BINLOG_BASE64_EVENT;
|
||||
Lex->comment= $2;
|
||||
Lex->ident.str= NULL;
|
||||
@@ -8386,6 +8388,8 @@ binlog_base64_event:
|
||||
|
|
||||
BINLOG_SYM '@' ident_or_text ',' '@' ident_or_text
|
||||
{
|
||||
if (Lex->sphead)
|
||||
my_yyabort_error((ER_SP_BADSTATEMENT, MYF(0), "BINLOG"));
|
||||
Lex->sql_command = SQLCOM_BINLOG_BASE64_EVENT;
|
||||
Lex->comment= $3;
|
||||
Lex->ident= $6;
|
||||
|
||||
Reference in New Issue
Block a user