mirror of
				https://github.com/MariaDB/server.git
				synced 2025-10-31 02:46:29 +01:00 
			
		
		
		
	 a69da0c31e
			
		
	
	
	a69da0c31e
	
	
	
		
			
			it's incorrect to zero out table->triggers->extra_null_bitmap before a statement, because if insert uses an explicit field list and omits a field that has no default value, the field should get NULL implicitly. So extra_null_bitmap should have 1s for all fields that have no defaults * create extra_null_bitmap_init and initialize it as above * copy extra_null_bitmap_init to extra_null_bitmap for inserts * still zero out extra_null_bitmap for updates/deletes where all fields definitely have a value * make not_null_fields_have_null_values() to send ER_NO_DEFAULT_FOR_FIELD for fields with no default and no value, otherwise creation of a trigger with an empty body would change the error message
		
			
				
	
	
		
			42 lines
		
	
	
	
		
			1 KiB
		
	
	
	
		
			Text
		
	
	
	
	
	
			
		
		
	
	
			42 lines
		
	
	
	
		
			1 KiB
		
	
	
	
		
			Text
		
	
	
	
	
	
| set sql_mode='strict_all_tables';
 | |
| create table t1 (a int not null, b int);
 | |
| insert t1 (b) values (1);
 | |
| ERROR HY000: Field 'a' doesn't have a default value
 | |
| create trigger trgi before insert on t1 for each row
 | |
| case new.b
 | |
| when 10 then
 | |
| set new.a = new.b;
 | |
| when 30 then
 | |
| set new.a = new.a;
 | |
| else
 | |
| do 1;
 | |
| end case|
 | |
| insert t1 (b) values (10);
 | |
| insert t1 (b) values (20);
 | |
| ERROR HY000: Field 'a' doesn't have a default value
 | |
| insert t1 (b) values (30);
 | |
| ERROR 23000: Column 'a' cannot be null
 | |
| select * from t1;
 | |
| a	b
 | |
| 10	10
 | |
| drop table t1;
 | |
| set sql_mode=default;
 | |
| set sql_mode='';
 | |
| create table t1 (
 | |
| id int(11) not null auto_increment primary key,
 | |
| data1 varchar(10) not null,
 | |
| data2 varchar(10) not null
 | |
| );
 | |
| insert into t1 (data2) values ('x');
 | |
| Warnings:
 | |
| Warning	1364	Field 'data1' doesn't have a default value
 | |
| create trigger test_trigger before insert on t1 for each row begin end;
 | |
| insert into t1 (data2) values ('y');
 | |
| Warnings:
 | |
| Warning	1364	Field 'data1' doesn't have a default value
 | |
| select * from t1;
 | |
| id	data1	data2
 | |
| 1		x
 | |
| 2		y
 | |
| drop table t1;
 | |
| set sql_mode=default;
 |