mirror of
https://github.com/MariaDB/server.git
synced 2026-01-06 05:22:24 +03:00
More fixes for strict mode:
More tests. Better error messages. Fixed bug when checking if we updated all needed columns for INSERT. Give an error if we encounter a wrong float value during parsing. Don't print DEFAULT for columns without a default value in SHOW CREATE/SHOW FIELDS. Fixed UPDATE IGNORE when using STRICT mode.
This commit is contained in:
@@ -60,7 +60,7 @@ col1
|
||||
0000-00-00
|
||||
0000-00-00
|
||||
drop table t1;
|
||||
set @@sql_mode="strict_trans_tables";
|
||||
set @@sql_mode='strict_trans_tables';
|
||||
CREATE TABLE t1 (col1 date) engine=myisam;
|
||||
INSERT INTO t1 VALUES('2004-13-31'),('2004-1-1');
|
||||
ERROR 22007: Incorrect date value: '2004-13-31' for column 'col1' at row 1
|
||||
@@ -87,7 +87,7 @@ col1
|
||||
0000-00-00
|
||||
2003-02-31
|
||||
drop table t1;
|
||||
set @@sql_mode="strict_trans_tables";
|
||||
set @@sql_mode='strict_trans_tables';
|
||||
CREATE TABLE t1 (col1 date) engine=innodb;
|
||||
INSERT INTO t1 VALUES('2004-13-31'),('2004-1-1');
|
||||
ERROR 22007: Incorrect date value: '2004-13-31' for column 'col1' at row 1
|
||||
@@ -676,3 +676,207 @@ NULL
|
||||
999.99
|
||||
-99.99
|
||||
DROP TABLE t1;
|
||||
CREATE TABLE t1 (col1 FLOAT, col2 FLOAT UNSIGNED);
|
||||
INSERT INTO t1 VALUES (-1.1E-38,0),(+3.4E+38,+3.4E+38);
|
||||
INSERT INTO t1 VALUES ('-1.1E-38',0),('+3.4E+38','+3.4E+38');
|
||||
INSERT INTO t1 (col1) VALUES (3E-46);
|
||||
INSERT INTO t1 (col1) VALUES (+3.4E+39);
|
||||
ERROR 22003: Out of range value adjusted for column 'col1' at row 1
|
||||
INSERT INTO t1 (col2) VALUES (-1.1E-3);
|
||||
ERROR 22003: Out of range value adjusted for column 'col2' at row 1
|
||||
INSERT INTO t1 (col1) VALUES ('+3.4E+39');
|
||||
ERROR 22003: Out of range value adjusted for column 'col1' at row 1
|
||||
INSERT INTO t1 (col2) VALUES ('-1.1E-3');
|
||||
ERROR 22003: Out of range value adjusted for column 'col2' at row 1
|
||||
UPDATE t1 SET col1 =col1 * 5000 WHERE col1 > 0;
|
||||
ERROR 22003: Out of range value adjusted for column 'col1' at row 2
|
||||
UPDATE t1 SET col2 =col2 / 0 WHERE col2 > 0;
|
||||
ERROR 22012: Division by 0
|
||||
SELECT MOD(col1,0) FROM t1;
|
||||
ERROR 22012: Division by 0
|
||||
INSERT INTO t1 (col1) VALUES ('');
|
||||
ERROR 01000: Data truncated for column 'col1' at row 1
|
||||
INSERT INTO t1 (col1) VALUES ('a59b');
|
||||
ERROR 01000: Data truncated for column 'col1' at row 1
|
||||
INSERT INTO t1 (col1) VALUES ('1a');
|
||||
ERROR 01000: Data truncated for column 'col1' at row 1
|
||||
INSERT IGNORE INTO t1 (col1) VALUES ('2a');
|
||||
Warnings:
|
||||
Warning 1265 Data truncated for column 'col1' at row 1
|
||||
INSERT IGNORE INTO t1 (col1) VALUES (1/0);
|
||||
Warnings:
|
||||
Error 1365 Division by 0
|
||||
INSERT IGNORE INTO t1 VALUES (+3.4E+39,-3.4E+39);
|
||||
Warnings:
|
||||
Warning 1264 Out of range value adjusted for column 'col1' at row 1
|
||||
Warning 1264 Out of range value adjusted for column 'col2' at row 1
|
||||
INSERT IGNORE INTO t1 VALUES ('+3.4E+39','-3.4E+39');
|
||||
Warnings:
|
||||
Warning 1264 Out of range value adjusted for column 'col1' at row 1
|
||||
Warning 1264 Out of range value adjusted for column 'col2' at row 1
|
||||
SELECT * FROM t1;
|
||||
col1 col2
|
||||
-1.1e-38 0
|
||||
3.4e+38 3.4e+38
|
||||
-1.1e-38 0
|
||||
3.4e+38 3.4e+38
|
||||
0 NULL
|
||||
2 NULL
|
||||
NULL NULL
|
||||
3.40282e+38 0
|
||||
3.40282e+38 0
|
||||
DROP TABLE t1;
|
||||
CREATE TABLE t1 (col1 DOUBLE PRECISION, col2 DOUBLE PRECISION UNSIGNED);
|
||||
INSERT INTO t1 VALUES (-2.2E-308,0),(+1.7E+308,+1.7E+308);
|
||||
INSERT INTO t1 VALUES ('-2.2E-308',0),('+1.7E+308','+1.7E+308');
|
||||
INSERT INTO t1 (col1) VALUES (-2.2E-330);
|
||||
INSERT INTO t1 (col1) VALUES (+1.7E+309);
|
||||
ERROR 22007: Illegal double '1.7E+309' value found during parsing
|
||||
INSERT INTO t1 (col2) VALUES (-1.1E-3);
|
||||
ERROR 22003: Out of range value adjusted for column 'col2' at row 1
|
||||
INSERT INTO t1 (col1) VALUES ('+1.8E+309');
|
||||
ERROR 22003: Out of range value adjusted for column 'col1' at row 1
|
||||
INSERT INTO t1 (col2) VALUES ('-1.2E-3');
|
||||
ERROR 22003: Out of range value adjusted for column 'col2' at row 1
|
||||
UPDATE t1 SET col1 =col1 * 5000 WHERE col1 > 0;
|
||||
ERROR 22003: Out of range value adjusted for column 'col1' at row 2
|
||||
UPDATE t1 SET col2 =col2 / 0 WHERE col2 > 0;
|
||||
ERROR 22012: Division by 0
|
||||
SELECT MOD(col1,0) FROM t1;
|
||||
ERROR 22012: Division by 0
|
||||
INSERT INTO t1 (col1) VALUES ('');
|
||||
ERROR 01000: Data truncated for column 'col1' at row 1
|
||||
INSERT INTO t1 (col1) VALUES ('a59b');
|
||||
ERROR 01000: Data truncated for column 'col1' at row 1
|
||||
INSERT INTO t1 (col1) VALUES ('1a');
|
||||
ERROR 01000: Data truncated for column 'col1' at row 1
|
||||
INSERT IGNORE INTO t1 (col1) VALUES ('2a');
|
||||
Warnings:
|
||||
Warning 1265 Data truncated for column 'col1' at row 1
|
||||
INSERT IGNORE INTO t1 (col1) values (1/0);
|
||||
Warnings:
|
||||
Error 1365 Division by 0
|
||||
INSERT IGNORE INTO t1 VALUES (+1.9E+309,-1.9E+309);
|
||||
ERROR 22007: Illegal double '1.9E+309' value found during parsing
|
||||
INSERT IGNORE INTO t1 VALUES ('+2.0E+309','-2.0E+309');
|
||||
Warnings:
|
||||
Warning 1264 Out of range value adjusted for column 'col1' at row 1
|
||||
Warning 1264 Out of range value adjusted for column 'col2' at row 1
|
||||
Warning 1264 Out of range value adjusted for column 'col2' at row 1
|
||||
SELECT * FROM t1;
|
||||
col1 col2
|
||||
-2.2e-308 0
|
||||
1.7e+308 1.7e+308
|
||||
-2.2e-308 0
|
||||
1.7e+308 1.7e+308
|
||||
-0 NULL
|
||||
2 NULL
|
||||
NULL NULL
|
||||
1.79769313486232e+308 0
|
||||
DROP TABLE t1;
|
||||
CREATE TABLE t1 (col1 CHAR(5), col2 VARCHAR(5));
|
||||
INSERT INTO t1 VALUES ('hello', 'hello'),('he', 'he'),('hello ', 'hello ');
|
||||
INSERT INTO t1 (col1) VALUES ('hellobob');
|
||||
ERROR 01000: Data truncated for column 'col1' at row 1
|
||||
INSERT INTO t1 (col2) VALUES ('hellobob');
|
||||
ERROR 01000: Data truncated for column 'col2' at row 1
|
||||
UPDATE t1 SET col1 ='hellobob' WHERE col1 ='he';
|
||||
ERROR 01000: Data truncated for column 'col1' at row 2
|
||||
UPDATE t1 SET col2 ='hellobob' WHERE col2 ='he';
|
||||
ERROR 01000: Data truncated for column 'col2' at row 2
|
||||
INSERT IGNORE INTO t1 VALUES ('hellobob', 'hellobob');
|
||||
Warnings:
|
||||
Warning 1265 Data truncated for column 'col1' at row 1
|
||||
Warning 1265 Data truncated for column 'col2' at row 1
|
||||
UPDATE IGNORE t1 SET col2 ='hellotrudy' WHERE col2 ='he';
|
||||
Warnings:
|
||||
Warning 1265 Data truncated for column 'col2' at row 2
|
||||
SELECT * FROM t1;
|
||||
col1 col2
|
||||
hello hello
|
||||
he hello
|
||||
hello hello
|
||||
hello hello
|
||||
DROP TABLE t1;
|
||||
CREATE TABLE t1 (col1 enum('red','blue','green'));
|
||||
INSERT INTO t1 VALUES ('red'),('blue'),('green');
|
||||
INSERT INTO t1 (col1) VALUES ('yellow');
|
||||
ERROR 01000: Data truncated for column 'col1' at row 1
|
||||
INSERT INTO t1 (col1) VALUES ('redd');
|
||||
ERROR 01000: Data truncated for column 'col1' at row 1
|
||||
INSERT INTO t1 VALUES ('');
|
||||
ERROR 01000: Data truncated for column 'col1' at row 1
|
||||
UPDATE t1 SET col1 ='yellow' WHERE col1 ='green';
|
||||
ERROR 01000: Data truncated for column 'col1' at row 3
|
||||
INSERT IGNORE INTO t1 VALUES ('yellow');
|
||||
Warnings:
|
||||
Warning 1265 Data truncated for column 'col1' at row 1
|
||||
UPDATE IGNORE t1 SET col1 ='yellow' WHERE col1 ='blue';
|
||||
Warnings:
|
||||
Warning 1265 Data truncated for column 'col1' at row 2
|
||||
SELECT * FROM t1;
|
||||
col1
|
||||
red
|
||||
|
||||
green
|
||||
|
||||
DROP TABLE t1;
|
||||
CREATE TABLE t1 (col1 INT NOT NULL, col2 CHAR(5) NOT NULL, col3 DATE NOT NULL);
|
||||
INSERT INTO t1 VALUES (100, 'hello', '2004-08-20');
|
||||
INSERT INTO t1 (col1,col2,col3) VALUES (101, 'hell2', '2004-08-21');
|
||||
INSERT INTO t1 (col1,col2,col3) VALUES (NULL, '', '2004-01-01');
|
||||
ERROR 23000: Column 'col1' cannot be null
|
||||
INSERT INTO t1 (col1,col2,col3) VALUES (102, NULL, '2004-01-01');
|
||||
ERROR 23000: Column 'col2' cannot be null
|
||||
INSERT INTO t1 VALUES (103,'',NULL);
|
||||
ERROR 23000: Column 'col3' cannot be null
|
||||
UPDATE t1 SET col1=NULL WHERE col1 =100;
|
||||
ERROR 22004: Column set to default value; NULL supplied to NOT NULL column 'col1' at row 1
|
||||
UPDATE t1 SET col2 =NULL WHERE col2 ='hello';
|
||||
ERROR 22004: Column set to default value; NULL supplied to NOT NULL column 'col2' at row 1
|
||||
UPDATE t1 SET col2 =NULL where col3 IS NOT NULL;
|
||||
ERROR 22004: Column set to default value; NULL supplied to NOT NULL column 'col2' at row 1
|
||||
INSERT IGNORE INTO t1 values (NULL,NULL,NULL);
|
||||
Warnings:
|
||||
Warning 1263 Column set to default value; NULL supplied to NOT NULL column 'col1' at row 1
|
||||
Warning 1263 Column set to default value; NULL supplied to NOT NULL column 'col2' at row 1
|
||||
Warning 1263 Column set to default value; NULL supplied to NOT NULL column 'col3' at row 1
|
||||
SELECT * FROM t1;
|
||||
col1 col2 col3
|
||||
100 hello 2004-08-20
|
||||
101 hell2 2004-08-21
|
||||
0 0000-00-00
|
||||
DROP TABLE t1;
|
||||
CREATE TABLE t1 (col1 INT NOT NULL default 99, col2 CHAR(6) NOT NULL);
|
||||
SHOW CREATE TABLE t1;
|
||||
Table Create Table
|
||||
t1 CREATE TABLE "t1" (
|
||||
"col1" int(11) NOT NULL default '99',
|
||||
"col2" char(6) NOT NULL
|
||||
)
|
||||
INSERT INTO t1 VALUES (1, 'hello');
|
||||
INSERT INTO t1 (col2) VALUES ('hello2');
|
||||
INSERT INTO t1 (col2) VALUES (NULL);
|
||||
ERROR 23000: Column 'col2' cannot be null
|
||||
INSERT INTO t1 (col1) VALUES (2);
|
||||
ERROR HY000: Field 'col2' doesn't have a default value
|
||||
INSERT INTO t1 VALUES(default(col1),default(col2));
|
||||
ERROR HY000: Field 'col2' doesn't have a default value
|
||||
INSERT INTO t1 (col1) SELECT 1;
|
||||
ERROR HY000: Field 'col2' doesn't have a default value
|
||||
INSERT INTO t1 SELECT 1,NULL;
|
||||
ERROR 22004: Column set to default value; NULL supplied to NOT NULL column 'col2' at row 1
|
||||
INSERT IGNORE INTO t1 values (NULL,NULL);
|
||||
Warnings:
|
||||
Warning 1263 Column set to default value; NULL supplied to NOT NULL column 'col1' at row 1
|
||||
Warning 1263 Column set to default value; NULL supplied to NOT NULL column 'col2' at row 1
|
||||
INSERT IGNORE INTO t1 (col1) values (3);
|
||||
INSERT IGNORE INTO t1 () values ();
|
||||
SELECT * FROM t1;
|
||||
col1 col2
|
||||
1 hello
|
||||
99 hello2
|
||||
0
|
||||
3
|
||||
99
|
||||
DROP TABLE t1;
|
||||
|
||||
Reference in New Issue
Block a user