mirror of
https://github.com/MariaDB/server.git
synced 2025-05-25 13:42:52 +03:00
including a small change to build_table_filename(). mysql-test/mysql-test-run.pl: Remove unused bad merge bitrot code. This chunk of code is a repeat copy of an earlier chunk, and should never have been here. mysql-test/r/innodb.result: Updates to allow innodb.test to be run with --embedded-server mysql-test/suite/binlog/r/binlog_innodb.result: Updates to allow innodb.test to be run with --embedded-server mysql-test/suite/binlog/t/binlog_innodb.test: Updates to allow innodb.test to be run with --embedded-server mysql-test/t/innodb.test: Updates to allow innodb.test to be run with --embedded-server sql/sql_table.cc: build_table_filename(): Don't add FN_ROOTDIR to mysql_data_home if it's already there. This is done to make it easier to write tests which check the output of various error messages, and work with both the embedded server (mysql_data_home is full path, including trailing FN_ROOTDIR) and normal server (mysql_data_home is just ".").
173 lines
3.9 KiB
Plaintext
173 lines
3.9 KiB
Plaintext
source include/have_innodb.inc;
|
|
source include/have_log_bin.inc;
|
|
|
|
SET BINLOG_FORMAT=MIXED;
|
|
|
|
RESET MASTER;
|
|
|
|
CREATE TABLE t1 (a INT PRIMARY KEY, b INT) ENGINE=INNODB;
|
|
INSERT INTO t1 VALUES (1,1),(2,2),(3,3),(4,4),(5,5),(6,6);
|
|
|
|
BEGIN;
|
|
SET SESSION TRANSACTION ISOLATION LEVEL REPEATABLE READ;
|
|
# Should be logged as statement
|
|
UPDATE t1 SET b = 2*a WHERE a > 1;
|
|
COMMIT;
|
|
|
|
BEGIN;
|
|
SET SESSION TRANSACTION ISOLATION LEVEL READ COMMITTED;
|
|
# Should be logged as rows
|
|
UPDATE t1 SET b = a * a WHERE a > 3;
|
|
COMMIT;
|
|
|
|
# Check that errors are generated when trying to use READ COMMITTED
|
|
# transaction isolation level in STATEMENT binlog mode.
|
|
|
|
SET BINLOG_FORMAT=STATEMENT;
|
|
|
|
BEGIN;
|
|
SET SESSION TRANSACTION ISOLATION LEVEL READ UNCOMMITTED;
|
|
error ER_BINLOG_LOGGING_IMPOSSIBLE;
|
|
UPDATE t1 SET b = 1*a WHERE a > 1;
|
|
COMMIT;
|
|
|
|
BEGIN;
|
|
SET SESSION TRANSACTION ISOLATION LEVEL READ COMMITTED;
|
|
error ER_BINLOG_LOGGING_IMPOSSIBLE;
|
|
UPDATE t1 SET b = 2*a WHERE a > 2;
|
|
COMMIT;
|
|
|
|
BEGIN;
|
|
SET SESSION TRANSACTION ISOLATION LEVEL REPEATABLE READ;
|
|
UPDATE t1 SET b = 3*a WHERE a > 3;
|
|
COMMIT;
|
|
|
|
BEGIN;
|
|
SET SESSION TRANSACTION ISOLATION LEVEL SERIALIZABLE;
|
|
UPDATE t1 SET b = 4*a WHERE a > 4;
|
|
COMMIT;
|
|
|
|
SET BINLOG_FORMAT=MIXED;
|
|
|
|
BEGIN;
|
|
SET SESSION TRANSACTION ISOLATION LEVEL READ UNCOMMITTED;
|
|
UPDATE t1 SET b = 1*a WHERE a > 1;
|
|
COMMIT;
|
|
|
|
BEGIN;
|
|
SET SESSION TRANSACTION ISOLATION LEVEL READ COMMITTED;
|
|
UPDATE t1 SET b = 2*a WHERE a > 2;
|
|
COMMIT;
|
|
|
|
BEGIN;
|
|
SET SESSION TRANSACTION ISOLATION LEVEL REPEATABLE READ;
|
|
UPDATE t1 SET b = 3*a WHERE a > 3;
|
|
COMMIT;
|
|
|
|
BEGIN;
|
|
SET SESSION TRANSACTION ISOLATION LEVEL SERIALIZABLE;
|
|
UPDATE t1 SET b = 4*a WHERE a > 4;
|
|
COMMIT;
|
|
|
|
SET BINLOG_FORMAT=ROW;
|
|
|
|
BEGIN;
|
|
SET SESSION TRANSACTION ISOLATION LEVEL READ UNCOMMITTED;
|
|
UPDATE t1 SET b = 1*a WHERE a > 1;
|
|
COMMIT;
|
|
|
|
BEGIN;
|
|
SET SESSION TRANSACTION ISOLATION LEVEL READ COMMITTED;
|
|
UPDATE t1 SET b = 2*a WHERE a > 2;
|
|
COMMIT;
|
|
|
|
BEGIN;
|
|
SET SESSION TRANSACTION ISOLATION LEVEL REPEATABLE READ;
|
|
UPDATE t1 SET b = 3*a WHERE a > 3;
|
|
COMMIT;
|
|
|
|
BEGIN;
|
|
SET SESSION TRANSACTION ISOLATION LEVEL SERIALIZABLE;
|
|
UPDATE t1 SET b = 4*a WHERE a > 4;
|
|
COMMIT;
|
|
|
|
source include/show_binlog_events.inc;
|
|
|
|
DROP TABLE t1;
|
|
|
|
|
|
#
|
|
# Let us test binlog_cache_use and binlog_cache_disk_use status vars.
|
|
# Actually this test has nothing to do with innodb per se, it just requires
|
|
# transactional table.
|
|
#
|
|
show status like "binlog_cache_use";
|
|
show status like "binlog_cache_disk_use";
|
|
|
|
create table t1 (a int) engine=innodb;
|
|
|
|
# Now we are going to create transaction which is long enough so its
|
|
# transaction binlog will be flushed to disk...
|
|
let $1=2000;
|
|
disable_query_log;
|
|
begin;
|
|
while ($1)
|
|
{
|
|
eval insert into t1 values( $1 );
|
|
dec $1;
|
|
}
|
|
commit;
|
|
enable_query_log;
|
|
show status like "binlog_cache_use";
|
|
show status like "binlog_cache_disk_use";
|
|
|
|
# Transaction which should not be flushed to disk and so should not
|
|
# increase binlog_cache_disk_use.
|
|
begin;
|
|
delete from t1;
|
|
commit;
|
|
show status like "binlog_cache_use";
|
|
show status like "binlog_cache_disk_use";
|
|
drop table t1;
|
|
|
|
#
|
|
# Bug#27716 multi-update did partially and has not binlogged
|
|
#
|
|
|
|
CREATE TABLE `t1` (
|
|
`a` int(11) NOT NULL auto_increment,
|
|
`b` int(11) default NULL,
|
|
PRIMARY KEY (`a`)
|
|
) ENGINE=MyISAM DEFAULT CHARSET=latin1 ;
|
|
|
|
CREATE TABLE `t2` (
|
|
`a` int(11) NOT NULL auto_increment,
|
|
`b` int(11) default NULL,
|
|
PRIMARY KEY (`a`)
|
|
) ENGINE=INNODB DEFAULT CHARSET=latin1 ;
|
|
|
|
# A. testing multi_update::send_eof() execution branch
|
|
insert into t1 values (1,1),(2,2);
|
|
insert into t2 values (1,1),(4,4);
|
|
reset master;
|
|
--error ER_DUP_ENTRY
|
|
UPDATE t2,t1 SET t2.a=t1.a+2;
|
|
# check
|
|
select * from t2 /* must be (3,1), (4,4) */;
|
|
show master status /* there must no UPDATE in binlog */;
|
|
|
|
# B. testing multi_update::send_error() execution branch
|
|
delete from t1;
|
|
delete from t2;
|
|
insert into t1 values (1,2),(3,4),(4,4);
|
|
insert into t2 values (1,2),(3,4),(4,4);
|
|
reset master;
|
|
--error ER_DUP_ENTRY
|
|
UPDATE t2,t1 SET t2.a=t2.b where t2.a=t1.a;
|
|
show master status /* there must be no UPDATE query event */;
|
|
|
|
# cleanup bug#27716
|
|
drop table t1, t2;
|
|
|
|
--echo End of tests
|