summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorunknown <gshchepa/uchum@host.loc>2008-01-11 05:06:08 +0400
committerunknown <gshchepa/uchum@host.loc>2008-01-11 05:06:08 +0400
commita114ede24abff88609e5686f0eafbaf7fc2ed0b7 (patch)
treed8feee23dcee7d250b78786ec8170e5e615d4e65
parent34cae15606134da46ed426d4ac42f01c93992324 (diff)
downloadmariadb-git-a114ede24abff88609e5686f0eafbaf7fc2ed0b7.tar.gz
Bug#33699: The UPDATE statement allows NULL as new value on a NOT NULL
columns (default datatype value is assigned). The mysql_update function has been modified to generate an error when trying to set a NOT NULL field to NULL rather than a warning in the set_field_to_null_with_conversions function. mysql-test/extra/rpl_tests/rpl_extraMaster_Col.test: Updated test case (for bug#33699). mysql-test/include/ps_modify.inc: Updated test case (for bug#33699). mysql-test/r/auto_increment.result: Updated test case (for bug#33699). mysql-test/r/null.result: Updated test case (for bug#33699). mysql-test/r/ps_2myisam.result: Updated test case (for bug#33699). mysql-test/r/ps_3innodb.result: Updated test case (for bug#33699). mysql-test/r/ps_4heap.result: Updated test case (for bug#33699). mysql-test/r/ps_5merge.result: Updated test case (for bug#33699). mysql-test/r/warnings.result: Updated test case (for bug#33699). mysql-test/suite/ndb/r/ps_7ndb.result: Updated test case (for bug#33699). mysql-test/suite/rpl/r/rpl_extraColmaster_innodb.result: Updated test case (for bug#33699). mysql-test/suite/rpl/r/rpl_extraColmaster_myisam.result: Updated test case (for bug#33699). mysql-test/suite/rpl/t/rpl_err_ignoredtable.test: Updated test case (for bug#33699). mysql-test/t/auto_increment.test: Updated test case (for bug#33699). mysql-test/t/null.test: Updated test case (for bug#33699). mysql-test/t/warnings.test: Updated test case (for bug#33699). sql/sql_update.cc: Bug#33699: The mysql_update function has been modified to generate an error when trying to set a NOT NULL field to NULL rather than a warning in the set_field_to_null_with_conversions function. tests/mysql_client_test.c: Updated test case (for bug#33699).
-rw-r--r--mysql-test/extra/rpl_tests/rpl_extraMaster_Col.test2
-rw-r--r--mysql-test/include/ps_modify.inc1
-rw-r--r--mysql-test/r/auto_increment.result12
-rw-r--r--mysql-test/r/null.result8
-rw-r--r--mysql-test/r/ps_2myisam.result5
-rw-r--r--mysql-test/r/ps_3innodb.result5
-rw-r--r--mysql-test/r/ps_4heap.result5
-rw-r--r--mysql-test/r/ps_5merge.result10
-rw-r--r--mysql-test/r/warnings.result3
-rw-r--r--mysql-test/suite/ndb/r/ps_7ndb.result5
-rw-r--r--mysql-test/suite/rpl/r/rpl_extraColmaster_innodb.result12
-rw-r--r--mysql-test/suite/rpl/r/rpl_extraColmaster_myisam.result12
-rw-r--r--mysql-test/suite/rpl/t/rpl_err_ignoredtable.test2
-rw-r--r--mysql-test/t/auto_increment.test2
-rw-r--r--mysql-test/t/null.test2
-rw-r--r--mysql-test/t/warnings.test1
-rw-r--r--sql/sql_update.cc4
-rw-r--r--tests/mysql_client_test.c2
18 files changed, 40 insertions, 53 deletions
diff --git a/mysql-test/extra/rpl_tests/rpl_extraMaster_Col.test b/mysql-test/extra/rpl_tests/rpl_extraMaster_Col.test
index cdd828305dc..5fc5a6cce1a 100644
--- a/mysql-test/extra/rpl_tests/rpl_extraMaster_Col.test
+++ b/mysql-test/extra/rpl_tests/rpl_extraMaster_Col.test
@@ -419,7 +419,7 @@ connection master;
update t31 set f5=555555555555555 where f3=6;
update t31 set f2=2 where f3=2;
update t31 set f1=NULL where f3=1;
- update t31 set f3=NULL, f27=NULL, f35='f35 new value' where f3=3;
+ update t31 set f3=0, f27=NULL, f35='f35 new value' where f3=3;
--echo
--echo ** Delete from Master **
diff --git a/mysql-test/include/ps_modify.inc b/mysql-test/include/ps_modify.inc
index f66f888261d..4cde18b97d1 100644
--- a/mysql-test/include/ps_modify.inc
+++ b/mysql-test/include/ps_modify.inc
@@ -108,6 +108,7 @@ execute stmt1 using @arg00, @arg01;
select a,b from t1 where a=@arg00;
set @arg00=NULL;
set @arg01=2;
+--error 1048
execute stmt1 using @arg00, @arg01;
select a,b from t1 order by a;
set @arg00=0;
diff --git a/mysql-test/r/auto_increment.result b/mysql-test/r/auto_increment.result
index 54c2df34a7f..bc9daf43f14 100644
--- a/mysql-test/r/auto_increment.result
+++ b/mysql-test/r/auto_increment.result
@@ -231,8 +231,7 @@ a b
204 7
delete from t1 where a=0;
update t1 set a=NULL where b=6;
-Warnings:
-Warning 1048 Column 'a' cannot be null
+ERROR 23000: Column 'a' cannot be null
update t1 set a=300 where b=7;
SET SQL_MODE='';
insert into t1(a,b)values(NULL,8);
@@ -247,7 +246,7 @@ a b
1 1
200 2
201 4
-0 6
+203 6
300 7
301 8
400 9
@@ -263,6 +262,7 @@ a b
1 1
200 2
201 4
+203 6
300 7
301 8
400 9
@@ -273,20 +273,20 @@ a b
405 14
delete from t1 where a=0;
update t1 set a=NULL where b=13;
-Warnings:
-Warning 1048 Column 'a' cannot be null
+ERROR 23000: Column 'a' cannot be null
update t1 set a=500 where b=14;
select * from t1 order by b;
a b
1 1
200 2
201 4
+203 6
300 7
301 8
400 9
401 10
402 11
-0 13
+404 13
500 14
drop table t1;
create table t1 (a bigint);
diff --git a/mysql-test/r/null.result b/mysql-test/r/null.result
index 345c9b07b98..5a2ebc37cc8 100644
--- a/mysql-test/r/null.result
+++ b/mysql-test/r/null.result
@@ -93,11 +93,9 @@ INSERT INTO t1 SET a = "", d= "2003-01-14 03:54:55";
Warnings:
Warning 1265 Data truncated for column 'd' at row 1
UPDATE t1 SET d=1/NULL;
-Warnings:
-Warning 1265 Data truncated for column 'd' at row 1
+ERROR 23000: Column 'd' cannot be null
UPDATE t1 SET d=NULL;
-Warnings:
-Warning 1048 Column 'd' cannot be null
+ERROR 23000: Column 'd' cannot be null
INSERT INTO t1 (a) values (null);
ERROR 23000: Column 'a' cannot be null
INSERT INTO t1 (a) values (1/null);
@@ -132,7 +130,7 @@ Warning 1048 Column 'd' cannot be null
Warning 1048 Column 'd' cannot be null
select * from t1;
a b c d
- 0 0000-00-00 00:00:00 0
+ 0 0000-00-00 00:00:00 2003
0 0000-00-00 00:00:00 0
0 0000-00-00 00:00:00 0
0 0000-00-00 00:00:00 0
diff --git a/mysql-test/r/ps_2myisam.result b/mysql-test/r/ps_2myisam.result
index fbc6781e5e7..06bfd78a351 100644
--- a/mysql-test/r/ps_2myisam.result
+++ b/mysql-test/r/ps_2myisam.result
@@ -1303,12 +1303,11 @@ a b
set @arg00=NULL;
set @arg01=2;
execute stmt1 using @arg00, @arg01;
-Warnings:
-Warning 1048 Column 'a' cannot be null
+ERROR 23000: Column 'a' cannot be null
select a,b from t1 order by a;
a b
-0 two
1 one
+2 two
3 three
4 four
set @arg00=0;
diff --git a/mysql-test/r/ps_3innodb.result b/mysql-test/r/ps_3innodb.result
index fcd0b5de9a0..f56b1d37a2c 100644
--- a/mysql-test/r/ps_3innodb.result
+++ b/mysql-test/r/ps_3innodb.result
@@ -1286,12 +1286,11 @@ a b
set @arg00=NULL;
set @arg01=2;
execute stmt1 using @arg00, @arg01;
-Warnings:
-Warning 1048 Column 'a' cannot be null
+ERROR 23000: Column 'a' cannot be null
select a,b from t1 order by a;
a b
-0 two
1 one
+2 two
3 three
4 four
set @arg00=0;
diff --git a/mysql-test/r/ps_4heap.result b/mysql-test/r/ps_4heap.result
index 862c0ff75c1..0c643facf72 100644
--- a/mysql-test/r/ps_4heap.result
+++ b/mysql-test/r/ps_4heap.result
@@ -1287,12 +1287,11 @@ a b
set @arg00=NULL;
set @arg01=2;
execute stmt1 using @arg00, @arg01;
-Warnings:
-Warning 1048 Column 'a' cannot be null
+ERROR 23000: Column 'a' cannot be null
select a,b from t1 order by a;
a b
-0 two
1 one
+2 two
3 three
4 four
set @arg00=0;
diff --git a/mysql-test/r/ps_5merge.result b/mysql-test/r/ps_5merge.result
index 51393cc8bc3..bd3cd4ac1fc 100644
--- a/mysql-test/r/ps_5merge.result
+++ b/mysql-test/r/ps_5merge.result
@@ -1329,12 +1329,11 @@ a b
set @arg00=NULL;
set @arg01=2;
execute stmt1 using @arg00, @arg01;
-Warnings:
-Warning 1048 Column 'a' cannot be null
+ERROR 23000: Column 'a' cannot be null
select a,b from t1 order by a;
a b
-0 two
1 one
+2 two
3 three
4 four
set @arg00=0;
@@ -4351,12 +4350,11 @@ a b
set @arg00=NULL;
set @arg01=2;
execute stmt1 using @arg00, @arg01;
-Warnings:
-Warning 1048 Column 'a' cannot be null
+ERROR 23000: Column 'a' cannot be null
select a,b from t1 order by a;
a b
-0 two
1 one
+2 two
3 three
4 four
set @arg00=0;
diff --git a/mysql-test/r/warnings.result b/mysql-test/r/warnings.result
index 2929328a9b1..249cd583345 100644
--- a/mysql-test/r/warnings.result
+++ b/mysql-test/r/warnings.result
@@ -98,8 +98,7 @@ Warning 1265 Data truncated for column 'c' at row 1
Warning 1265 Data truncated for column 'c' at row 2
alter table t1 add d char(2);
update t1 set a=NULL where a=10;
-Warnings:
-Warning 1048 Column 'a' cannot be null
+ERROR 23000: Column 'a' cannot be null
update t1 set c='mysql ab' where c='test';
Warnings:
Warning 1265 Data truncated for column 'c' at row 4
diff --git a/mysql-test/suite/ndb/r/ps_7ndb.result b/mysql-test/suite/ndb/r/ps_7ndb.result
index 6e2e61bbc5e..3cbc1a0e76f 100644
--- a/mysql-test/suite/ndb/r/ps_7ndb.result
+++ b/mysql-test/suite/ndb/r/ps_7ndb.result
@@ -1286,12 +1286,11 @@ a b
set @arg00=NULL;
set @arg01=2;
execute stmt1 using @arg00, @arg01;
-Warnings:
-Warning 1048 Column 'a' cannot be null
+ERROR 23000: Column 'a' cannot be null
select a,b from t1 order by a;
a b
-0 two
1 one
+2 two
3 three
4 four
set @arg00=0;
diff --git a/mysql-test/suite/rpl/r/rpl_extraColmaster_innodb.result b/mysql-test/suite/rpl/r/rpl_extraColmaster_innodb.result
index af460ded1e7..d7fadfb13e3 100644
--- a/mysql-test/suite/rpl/r/rpl_extraColmaster_innodb.result
+++ b/mysql-test/suite/rpl/r/rpl_extraColmaster_innodb.result
@@ -454,9 +454,7 @@ f1 f2 f3 f4
update t31 set f5=555555555555555 where f3=6;
update t31 set f2=2 where f3=2;
update t31 set f1=NULL where f3=1;
-update t31 set f3=NULL, f27=NULL, f35='f35 new value' where f3=3;
-Warnings:
-Warning 1048 Column 'f3' cannot be null
+update t31 set f3=0, f27=NULL, f35='f35 new value' where f3=3;
** Delete from Master **
@@ -1594,9 +1592,7 @@ f1 f2 f3 f4
update t31 set f5=555555555555555 where f3=6;
update t31 set f2=2 where f3=2;
update t31 set f1=NULL where f3=1;
-update t31 set f3=NULL, f27=NULL, f35='f35 new value' where f3=3;
-Warnings:
-Warning 1048 Column 'f3' cannot be null
+update t31 set f3=0, f27=NULL, f35='f35 new value' where f3=3;
** Delete from Master **
@@ -2734,9 +2730,7 @@ f1 f2 f3 f4
update t31 set f5=555555555555555 where f3=6;
update t31 set f2=2 where f3=2;
update t31 set f1=NULL where f3=1;
-update t31 set f3=NULL, f27=NULL, f35='f35 new value' where f3=3;
-Warnings:
-Warning 1048 Column 'f3' cannot be null
+update t31 set f3=0, f27=NULL, f35='f35 new value' where f3=3;
** Delete from Master **
diff --git a/mysql-test/suite/rpl/r/rpl_extraColmaster_myisam.result b/mysql-test/suite/rpl/r/rpl_extraColmaster_myisam.result
index f0613c16825..cd2aec999db 100644
--- a/mysql-test/suite/rpl/r/rpl_extraColmaster_myisam.result
+++ b/mysql-test/suite/rpl/r/rpl_extraColmaster_myisam.result
@@ -454,9 +454,7 @@ f1 f2 f3 f4
update t31 set f5=555555555555555 where f3=6;
update t31 set f2=2 where f3=2;
update t31 set f1=NULL where f3=1;
-update t31 set f3=NULL, f27=NULL, f35='f35 new value' where f3=3;
-Warnings:
-Warning 1048 Column 'f3' cannot be null
+update t31 set f3=0, f27=NULL, f35='f35 new value' where f3=3;
** Delete from Master **
@@ -1594,9 +1592,7 @@ f1 f2 f3 f4
update t31 set f5=555555555555555 where f3=6;
update t31 set f2=2 where f3=2;
update t31 set f1=NULL where f3=1;
-update t31 set f3=NULL, f27=NULL, f35='f35 new value' where f3=3;
-Warnings:
-Warning 1048 Column 'f3' cannot be null
+update t31 set f3=0, f27=NULL, f35='f35 new value' where f3=3;
** Delete from Master **
@@ -2734,9 +2730,7 @@ f1 f2 f3 f4
update t31 set f5=555555555555555 where f3=6;
update t31 set f2=2 where f3=2;
update t31 set f1=NULL where f3=1;
-update t31 set f3=NULL, f27=NULL, f35='f35 new value' where f3=3;
-Warnings:
-Warning 1048 Column 'f3' cannot be null
+update t31 set f3=0, f27=NULL, f35='f35 new value' where f3=3;
** Delete from Master **
diff --git a/mysql-test/suite/rpl/t/rpl_err_ignoredtable.test b/mysql-test/suite/rpl/t/rpl_err_ignoredtable.test
index 4e06a6a7096..a36cfb11dae 100644
--- a/mysql-test/suite/rpl/t/rpl_err_ignoredtable.test
+++ b/mysql-test/suite/rpl/t/rpl_err_ignoredtable.test
@@ -49,7 +49,7 @@ kill @id;
drop table t2,t3;
insert into t4 values (3),(4);
connection master;
---error 0,1053,2013
+--error 0,1053,2013,1048
reap;
connection master1;
save_master_pos;
diff --git a/mysql-test/t/auto_increment.test b/mysql-test/t/auto_increment.test
index 99e9b783d55..ff92c743960 100644
--- a/mysql-test/t/auto_increment.test
+++ b/mysql-test/t/auto_increment.test
@@ -149,6 +149,7 @@ delete from t1 where a=0;
update t1 set a=0 where b=5;
select * from t1 order by b;
delete from t1 where a=0;
+--error 1048
update t1 set a=NULL where b=6;
update t1 set a=300 where b=7;
SET SQL_MODE='';
@@ -164,6 +165,7 @@ delete from t1 where a=0;
update t1 set a=0 where b=12;
select * from t1 order by b;
delete from t1 where a=0;
+--error 1048
update t1 set a=NULL where b=13;
update t1 set a=500 where b=14;
select * from t1 order by b;
diff --git a/mysql-test/t/null.test b/mysql-test/t/null.test
index 2878b54c357..ddf6b8870fa 100644
--- a/mysql-test/t/null.test
+++ b/mysql-test/t/null.test
@@ -61,7 +61,9 @@ drop table t1;
#
CREATE TABLE t1 (a varchar(16) NOT NULL default '', b smallint(6) NOT NULL default 0, c datetime NOT NULL default '0000-00-00 00:00:00', d smallint(6) NOT NULL default 0);
INSERT INTO t1 SET a = "", d= "2003-01-14 03:54:55";
+--error 1048
UPDATE t1 SET d=1/NULL;
+--error 1048
UPDATE t1 SET d=NULL;
--error 1048
INSERT INTO t1 (a) values (null);
diff --git a/mysql-test/t/warnings.test b/mysql-test/t/warnings.test
index b5bae109f5f..d0eaaf1a764 100644
--- a/mysql-test/t/warnings.test
+++ b/mysql-test/t/warnings.test
@@ -65,6 +65,7 @@ create table t1(a tinyint NOT NULL, b tinyint unsigned, c char(5));
insert into t1 values(NULL,100,'mysql'),(10,-1,'mysql ab'),(500,256,'open source'),(20,NULL,'test');
alter table t1 modify c char(4);
alter table t1 add d char(2);
+--error 1048
update t1 set a=NULL where a=10;
update t1 set c='mysql ab' where c='test';
update t1 set d=c;
diff --git a/sql/sql_update.cc b/sql/sql_update.cc
index ecb7acda61b..8a6c2f0f7f4 100644
--- a/sql/sql_update.cc
+++ b/sql/sql_update.cc
@@ -526,7 +526,9 @@ int mysql_update(THD *thd,
init_read_record(&info,thd,table,select,0,1);
updated= found= 0;
- thd->count_cuted_fields= CHECK_FIELD_WARN; /* calc cuted fields */
+ /* Generate an error when trying to set a NOT NULL field to NULL. */
+ thd->count_cuted_fields= ignore ? CHECK_FIELD_WARN
+ : CHECK_FIELD_ERROR_FOR_NULL;
thd->cuted_fields=0L;
thd->proc_info="Updating";
diff --git a/tests/mysql_client_test.c b/tests/mysql_client_test.c
index 9284b2182b1..3776be79399 100644
--- a/tests/mysql_client_test.c
+++ b/tests/mysql_client_test.c
@@ -15674,7 +15674,7 @@ static void test_mysql_insert_id()
myquery(rc);
res= mysql_insert_id(mysql);
DIE_UNLESS(res == 0);
- rc= mysql_query(mysql, "update t2 set f1=NULL where f1=14");
+ rc= mysql_query(mysql, "update t2 set f1=0 where f1=14");
myquery(rc);
res= mysql_insert_id(mysql);
DIE_UNLESS(res == 0);