mirror of
				https://github.com/MariaDB/server.git
				synced 2025-10-31 15:50:51 +03:00 
			
		
		
		
	 e4d3595b18
			
		
	
	e4d3595b18
	
	
	
		
			
			In 5.0 we made LOAD DATA INFILE autocommit in all engines, while only NDB wanted that. Users and trainers complained that it affected InnoDB and was a change compared to 4.1 where only NDB autocommitted. To revert to the behaviour of 4.1, we move the autocommit logic out of mysql_load() into ha_ndbcluster::external_lock(). The result is that LOAD DATA INFILE commits all uncommitted changes of NDB if this is an NDB table, its own changes if this is an NDB table, but does not affect other engines. Note: even though there is no "commit the full transaction at end" anymore, LOAD DATA INFILE stays disabled in routines (re-entrency problems per a comment of Pem). Note: ha_ndbcluster::has_transactions() does not give reliable results because it says "yes" even if transactions are disabled in this engine...
		
			
				
	
	
		
			104 lines
		
	
	
		
			2.8 KiB
		
	
	
	
		
			Plaintext
		
	
	
	
	
	
			
		
		
	
	
			104 lines
		
	
	
		
			2.8 KiB
		
	
	
	
		
			Plaintext
		
	
	
	
	
	
| stop slave;
 | |
| drop table if exists t1,t2,t3,t4,t5,t6,t7,t8,t9;
 | |
| reset master;
 | |
| reset slave;
 | |
| drop table if exists t1,t2,t3,t4,t5,t6,t7,t8,t9;
 | |
| start slave;
 | |
| create table t1 (a int, unique(a)) engine=ndbcluster;
 | |
| create table t2 (a int, unique(a)) engine=innodb;
 | |
| begin;
 | |
| insert into t1 values(1);
 | |
| insert into t2 values(1);
 | |
| rollback;
 | |
| select count(*) from t1;
 | |
| count(*)
 | |
| 0
 | |
| select count(*) from t2;
 | |
| count(*)
 | |
| 0
 | |
| select count(*) from t1;
 | |
| count(*)
 | |
| 0
 | |
| select count(*) from t2;
 | |
| count(*)
 | |
| 0
 | |
| begin;
 | |
| load data infile '../std_data_ln/rpl_loaddata.dat' into table t2;
 | |
| Warnings:
 | |
| Warning	1262	Row 1 was truncated; it contained more data than there were input columns
 | |
| Warning	1262	Row 2 was truncated; it contained more data than there were input columns
 | |
| load data infile '../std_data_ln/rpl_loaddata.dat' into table t1;
 | |
| Warnings:
 | |
| Warning	1262	Row 1 was truncated; it contained more data than there were input columns
 | |
| Warning	1262	Row 2 was truncated; it contained more data than there were input columns
 | |
| rollback;
 | |
| Warnings:
 | |
| Warning	1196	Some non-transactional changed tables couldn't be rolled back
 | |
| select count(*) from t1;
 | |
| count(*)
 | |
| 2
 | |
| select count(*) from t2;
 | |
| count(*)
 | |
| 0
 | |
| select count(*) from t1;
 | |
| count(*)
 | |
| 2
 | |
| select count(*) from t2;
 | |
| count(*)
 | |
| 0
 | |
| delete from t1;
 | |
| delete from t2;
 | |
| begin;
 | |
| load data infile '../std_data_ln/rpl_loaddata.dat' into table t2;
 | |
| Warnings:
 | |
| Warning	1262	Row 1 was truncated; it contained more data than there were input columns
 | |
| Warning	1262	Row 2 was truncated; it contained more data than there were input columns
 | |
| load data infile '../std_data_ln/rpl_loaddata.dat' into table t1;
 | |
| Warnings:
 | |
| Warning	1262	Row 1 was truncated; it contained more data than there were input columns
 | |
| Warning	1262	Row 2 was truncated; it contained more data than there were input columns
 | |
| rollback;
 | |
| Warnings:
 | |
| Warning	1196	Some non-transactional changed tables couldn't be rolled back
 | |
| select count(*) from t1;
 | |
| count(*)
 | |
| 2
 | |
| select count(*) from t2;
 | |
| count(*)
 | |
| 0
 | |
| select count(*) from t1;
 | |
| count(*)
 | |
| 2
 | |
| select count(*) from t2;
 | |
| count(*)
 | |
| 0
 | |
| delete from t1;
 | |
| delete from t2;
 | |
| begin;
 | |
| insert into t2 values(3),(4);
 | |
| insert into t1 values(3),(4);
 | |
| load data infile '../std_data_ln/rpl_loaddata.dat' into table t2;
 | |
| Warnings:
 | |
| Warning	1262	Row 1 was truncated; it contained more data than there were input columns
 | |
| Warning	1262	Row 2 was truncated; it contained more data than there were input columns
 | |
| load data infile '../std_data_ln/rpl_loaddata.dat' into table t1;
 | |
| Warnings:
 | |
| Warning	1262	Row 1 was truncated; it contained more data than there were input columns
 | |
| Warning	1262	Row 2 was truncated; it contained more data than there were input columns
 | |
| rollback;
 | |
| Warnings:
 | |
| Warning	1196	Some non-transactional changed tables couldn't be rolled back
 | |
| select count(*) from t1;
 | |
| count(*)
 | |
| 4
 | |
| select count(*) from t2;
 | |
| count(*)
 | |
| 0
 | |
| select count(*) from t1;
 | |
| count(*)
 | |
| 4
 | |
| select count(*) from t2;
 | |
| count(*)
 | |
| 0
 | |
| drop table t1,t2;
 |