1
# Testing of "strict" mode
4
set @org_mode=@@sql_mode;
5
set @@sql_mode='ansi,traditional';
9
DROP TABLE IF EXISTS t1, t2;
12
# Test INSERT with DATE
14
CREATE TABLE t1 (col1 date);
15
INSERT INTO t1 VALUES('2004-01-01'),('2004-02-29');
16
INSERT INTO t1 VALUES('0000-10-31');
18
# All test cases expected to fail should return
19
# SQLSTATE 22007 <invalid date value>
21
INSERT INTO t1 VALUES('2004-0-31');
23
INSERT INTO t1 VALUES('2004-01-02'),('2004-0-31');
25
INSERT INTO t1 VALUES('2004-10-0');
27
INSERT INTO t1 VALUES('2004-09-31');
29
INSERT INTO t1 VALUES('2004-10-32');
31
INSERT INTO t1 VALUES('2003-02-29');
33
INSERT INTO t1 VALUES('2004-13-15');
35
INSERT INTO t1 VALUES('0000-00-00');
36
# Standard says we should return SQLSTATE 22018
38
INSERT INTO t1 VALUES ('59');
40
# Test the different related modes
41
set @@sql_mode='STRICT_ALL_TABLES';
42
INSERT INTO t1 VALUES('2004-01-03'),('2004-0-31');
43
set @@sql_mode='STRICT_ALL_TABLES,NO_ZERO_IN_DATE';
45
INSERT INTO t1 VALUES('2004-0-30');
47
INSERT INTO t1 VALUES('2004-01-04'),('2004-0-31'),('2004-01-05');
48
INSERT INTO t1 VALUES('0000-00-00');
49
INSERT IGNORE INTO t1 VALUES('2004-0-29');
50
set @@sql_mode='STRICT_ALL_TABLES,NO_ZERO_DATE';
52
INSERT INTO t1 VALUES('0000-00-00');
53
INSERT IGNORE INTO t1 VALUES('0000-00-00');
54
INSERT INTO t1 VALUES ('2004-0-30');
56
INSERT INTO t1 VALUES ('2004-2-30');
57
set @@sql_mode='STRICT_ALL_TABLES,ALLOW_INVALID_DATES';
58
INSERT INTO t1 VALUES ('2004-2-30');
59
set @@sql_mode='ansi,traditional';
60
INSERT IGNORE INTO t1 VALUES('2004-02-29'),('2004-13-15'),('0000-00-00');
65
# Test difference in behaviour with InnoDB and MyISAM tables
67
set @@sql_mode='strict_trans_tables';
68
CREATE TABLE t1 (col1 date) engine=myisam;
70
INSERT INTO t1 VALUES('2004-13-31'),('2004-1-1');
71
INSERT INTO t1 VALUES ('2004-1-2'), ('2004-13-31'),('2004-1-3');
72
INSERT IGNORE INTO t1 VALUES('2004-13-31'),('2004-1-4');
74
INSERT INTO t1 VALUES ('2003-02-29');
75
INSERT ignore INTO t1 VALUES('2003-02-30');
76
set @@sql_mode='STRICT_ALL_TABLES,ALLOW_INVALID_DATES';
77
INSERT ignore INTO t1 VALUES('2003-02-31');
81
set @@sql_mode='strict_trans_tables';
82
CREATE TABLE t1 (col1 date) engine=innodb;
84
INSERT INTO t1 VALUES('2004-13-31'),('2004-1-1');
86
INSERT INTO t1 VALUES ('2004-1-2'), ('2004-13-31'),('2004-1-3');
87
INSERT IGNORE INTO t1 VALUES('2004-13-31'),('2004-1-4');
89
INSERT INTO t1 VALUES ('2003-02-29');
90
INSERT ignore INTO t1 VALUES('2003-02-30');
91
set @@sql_mode='STRICT_ALL_TABLES,ALLOW_INVALID_DATES';
92
INSERT ignore INTO t1 VALUES('2003-02-31');
95
set @@sql_mode='ansi,traditional';
97
# Test INSERT with DATETIME
99
CREATE TABLE t1 (col1 datetime);
100
INSERT INTO t1 VALUES('2004-10-31 15:30:00'),('2004-02-29 15:30:00');
101
INSERT INTO t1 VALUES('0000-10-31 15:30:00');
103
# All test cases expected to fail should return
104
# SQLSTATE 22007 <invalid datetime value>
106
INSERT INTO t1 VALUES('2004-0-31 15:30:00');
108
INSERT INTO t1 VALUES('2004-10-0 15:30:00');
110
INSERT INTO t1 VALUES('2004-09-31 15:30:00');
112
INSERT INTO t1 VALUES('2004-10-32 15:30:00');
114
INSERT INTO t1 VALUES('2003-02-29 15:30:00');
116
INSERT INTO t1 VALUES('2004-13-15 15:30:00');
118
INSERT INTO t1 VALUES('0000-00-00 15:30:00');
119
# Standard says we should return SQLSTATE 22018
121
INSERT INTO t1 VALUES ('59');
125
# Test INSERT with TIMESTAMP
127
CREATE TABLE t1 (col1 timestamp);
128
INSERT INTO t1 VALUES('2004-10-31 15:30:00'),('2004-02-29 15:30:00');
130
# All test cases expected to fail should return
131
# SQLSTATE 22007 <invalid datetime value>
132
# Standard says we should return ok, but we can't as this is out of range
134
INSERT INTO t1 VALUES('0000-10-31 15:30:00');
136
INSERT INTO t1 VALUES('2004-0-31 15:30:00');
138
INSERT INTO t1 VALUES('2004-10-0 15:30:00');
140
INSERT INTO t1 VALUES('2004-09-31 15:30:00');
142
INSERT INTO t1 VALUES('2004-10-32 15:30:00');
144
INSERT INTO t1 VALUES('2003-02-29 15:30:00');
146
INSERT INTO t1 VALUES('2004-13-15 15:30:00');
148
INSERT INTO t1 VALUES('2004-02-29 25:30:00');
150
INSERT INTO t1 VALUES('2004-02-29 15:65:00');
152
INSERT INTO t1 VALUES('2004-02-29 15:31:61');
154
INSERT INTO t1 VALUES('0000-00-00 15:30:00');
156
INSERT INTO t1 VALUES('0000-00-00 00:00:00');
157
INSERT IGNORE INTO t1 VALUES('0000-00-00 00:00:00');
158
# Standard says we should return SQLSTATE 22018
160
INSERT INTO t1 VALUES ('59');
162
set @@sql_mode='STRICT_ALL_TABLES,ALLOW_INVALID_DATES';
164
INSERT INTO t1 VALUES('2004-0-31 15:30:00');
166
INSERT INTO t1 VALUES('2004-10-0 15:30:00');
168
INSERT INTO t1 VALUES('2004-10-32 15:30:00');
170
INSERT INTO t1 VALUES('2004-02-30 15:30:04');
171
INSERT INTO t1 VALUES('0000-00-00 00:00:00');
172
set @@sql_mode='STRICT_ALL_TABLES,NO_ZERO_IN_DATE';
173
INSERT INTO t1 VALUES('0000-00-00 00:00:00');
174
set @@sql_mode='STRICT_ALL_TABLES,NO_ZERO_DATE';
176
INSERT INTO t1 VALUES('0000-00-00 00:00:00');
177
set @@sql_mode='ansi,traditional';
182
#### Test INSERT with STR_TO_DATE into DATE/DATETIME/TIMESTAMP
184
CREATE TABLE t1 (col1 date, col2 datetime, col3 timestamp);
186
INSERT INTO t1 (col1) VALUES (STR_TO_DATE('15.10.2004','%d.%m.%Y'));
187
INSERT INTO t1 (col2) VALUES (STR_TO_DATE('15.10.2004 10.15','%d.%m.%Y %H.%i'));
188
INSERT INTO t1 (col3) VALUES (STR_TO_DATE('15.10.2004 10.15','%d.%m.%Y %H.%i'));
190
## Test INSERT with STR_TO_DATE into DATE
191
# All test cases expected to fail should return
192
# SQLSTATE 22007 <invalid date value>
194
INSERT INTO t1 (col1) VALUES(STR_TO_DATE('31.10.0000 15.30','%d.%m.%Y %H.%i'));
197
INSERT INTO t1 (col1) VALUES(STR_TO_DATE('31.0.2004 15.30','%d.%m.%Y %H.%i'));
199
INSERT INTO t1 (col1) VALUES(STR_TO_DATE('0.10.2004 15.30','%d.%m.%Y %H.%i'));
201
INSERT INTO t1 (col1) VALUES(STR_TO_DATE('31.9.2004 15.30','%d.%m.%Y %H.%i'));
203
INSERT INTO t1 (col1) VALUES(STR_TO_DATE('32.10.2004 15.30','%d.%m.%Y %H.%i'));
205
INSERT INTO t1 (col1) VALUES(STR_TO_DATE('29.02.2003 15.30','%d.%m.%Y %H.%i'));
207
INSERT INTO t1 (col1) VALUES(STR_TO_DATE('15.13.2004 15.30','%d.%m.%Y %H.%i'));
209
INSERT INTO t1 (col1) VALUES(STR_TO_DATE('00.00.0000','%d.%m.%Y'));
211
## Test INSERT with STR_TO_DATE into DATETIME
212
# All test cases expected to fail should return
213
# SQLSTATE 22007 <invalid datetime value>
215
INSERT INTO t1 (col2) VALUES(STR_TO_DATE('31.10.0000 15.30','%d.%m.%Y %H.%i'));
218
INSERT INTO t1 (col2) VALUES(STR_TO_DATE('31.0.2004 15.30','%d.%m.%Y %H.%i'));
220
INSERT INTO t1 (col2) VALUES(STR_TO_DATE('0.10.2004 15.30','%d.%m.%Y %H.%i'));
222
INSERT INTO t1 (col2) VALUES(STR_TO_DATE('31.9.2004 15.30','%d.%m.%Y %H.%i'));
224
INSERT INTO t1 (col2) VALUES(STR_TO_DATE('32.10.2004 15.30','%d.%m.%Y %H.%i'));
226
INSERT INTO t1 (col2) VALUES(STR_TO_DATE('29.02.2003 15.30','%d.%m.%Y %H.%i'));
228
INSERT INTO t1 (col2) VALUES(STR_TO_DATE('15.13.2004 15.30','%d.%m.%Y %H.%i'));
230
INSERT INTO t1 (col2) VALUES(STR_TO_DATE('00.00.0000','%d.%m.%Y'));
232
## Test INSERT with STR_TO_DATE into TIMESTAMP
233
# All test cases expected to fail should return
234
# SQLSTATE 22007 <invalid datetime value>
237
INSERT INTO t1 (col3) VALUES(STR_TO_DATE('31.10.0000 15.30','%d.%m.%Y %H.%i'));
239
INSERT INTO t1 (col3) VALUES(STR_TO_DATE('31.0.2004 15.30','%d.%m.%Y %H.%i'));
241
INSERT INTO t1 (col3) VALUES(STR_TO_DATE('0.10.2004 15.30','%d.%m.%Y %H.%i'));
243
INSERT INTO t1 (col3) VALUES(STR_TO_DATE('31.9.2004 15.30','%d.%m.%Y %H.%i'));
245
INSERT INTO t1 (col3) VALUES(STR_TO_DATE('32.10.2004 15.30','%d.%m.%Y %H.%i'));
247
INSERT INTO t1 (col3) VALUES(STR_TO_DATE('29.02.2003 15.30','%d.%m.%Y %H.%i'));
249
INSERT INTO t1 (col3) VALUES(STR_TO_DATE('15.13.2004 15.30','%d.%m.%Y %H.%i'));
251
INSERT INTO t1 (col3) VALUES(STR_TO_DATE('00.00.0000','%d.%m.%Y'));
256
#### Test INSERT with CAST AS DATE/DATETIME into DATE/DATETIME/TIMESTAMP
258
CREATE TABLE t1 (col1 date, col2 datetime, col3 timestamp);
260
INSERT INTO t1 (col1) VALUES (CAST('2004-10-15' AS DATE));
261
INSERT INTO t1 (col2) VALUES (CAST('2004-10-15 10:15' AS DATETIME));
262
INSERT INTO t1 (col3) VALUES (CAST('2004-10-15 10:15' AS DATETIME));
265
## Test INSERT with CAST AS DATE into DATE
266
# All test cases expected to fail should return
267
# SQLSTATE 22007 <invalid date value>
269
INSERT INTO t1 (col1) VALUES(CAST('0000-10-31' AS DATE));
272
INSERT INTO t1 (col1) VALUES(CAST('2004-10-0' AS DATE));
274
INSERT INTO t1 (col1) VALUES(CAST('2004-0-10' AS DATE));
276
# deactivated because of Bug#8294
277
# Bug#8294 Traditional: Misleading error message for invalid CAST to DATE
279
# INSERT INTO t1 (col1) VALUES(CAST('2004-9-31' AS DATE));
281
# INSERT INTO t1 (col1) VALUES(CAST('2004-10-32' AS DATE));
283
# INSERT INTO t1 (col1) VALUES(CAST('2003-02-29' AS DATE));
285
# INSERT INTO t1 (col1) VALUES(CAST('2004-13-15' AS DATE));
287
# deactivated because of Bug#6145
288
# Bug#6145: Traditional: CONVERT and CAST should reject zero DATE values
290
INSERT INTO t1 (col1) VALUES(CAST('0000-00-00' AS DATE));
292
## Test INSERT with CAST AS DATETIME into DATETIME
293
# All test cases expected to fail should return
294
# SQLSTATE 22007 <invalid datetime value>
296
INSERT INTO t1 (col2) VALUES(CAST('0000-10-31 15:30' AS DATETIME));
299
INSERT INTO t1 (col2) VALUES(CAST('2004-10-0 15:30' AS DATETIME));
301
INSERT INTO t1 (col2) VALUES(CAST('2004-0-10 15:30' AS DATETIME));
303
# deactivated because of Bug#8294
304
# Bug#8294 Traditional: Misleading error message for invalid CAST to DATE
306
#INSERT INTO t1 (col2) VALUES(CAST('2004-9-31 15:30' AS DATETIME));
308
#INSERT INTO t1 (col2) VALUES(CAST('2004-10-32 15:30' AS DATETIME));
310
#INSERT INTO t1 (col2) VALUES(CAST('2003-02-29 15:30' AS DATETIME));
312
#INSERT INTO t1 (col2) VALUES(CAST('2004-13-15 15:30' AS DATETIME));
314
# Bug#6145: Traditional: CONVERT and CAST should reject zero DATE values
316
INSERT INTO t1 (col2) VALUES(CAST('0000-00-00' AS DATETIME));
318
## Test INSERT with CAST AS DATETIME into TIMESTAMP
319
# All test cases expected to fail should return
320
# SQLSTATE 22007 <invalid datetime value>
322
INSERT INTO t1 (col3) VALUES(CAST('0000-10-31 15:30' AS DATETIME));
324
# We accept this to be a failure
327
INSERT INTO t1 (col3) VALUES(CAST('2004-10-0 15:30' AS DATETIME));
329
INSERT INTO t1 (col3) VALUES(CAST('2004-0-10 15:30' AS DATETIME));
330
# should return SQLSTATE 22007 <invalid datetime value>
332
# deactivated because of Bug#8294
333
# Bug#8294 Traditional: Misleading error message for invalid CAST to DATE
335
#INSERT INTO t1 (col3) VALUES(CAST('2004-9-31 15:30' AS DATETIME));
337
#INSERT INTO t1 (col3) VALUES(CAST('2004-10-32 15:30' AS DATETIME));
339
#INSERT INTO t1 (col3) VALUES(CAST('2003-02-29 15:30' AS DATETIME));
341
#INSERT INTO t1 (col3) VALUES(CAST('2004-13-15 15:30' AS DATETIME));
343
# Bug#6145: Traditional: CONVERT and CAST should reject zero DATE values
345
INSERT INTO t1 (col3) VALUES(CAST('0000-00-00' AS DATETIME));
350
#### Test INSERT with CONVERT to DATE/DATETIME into DATE/DATETIME/TIMESTAMP
352
CREATE TABLE t1 (col1 date, col2 datetime, col3 timestamp);
354
INSERT INTO t1 (col1) VALUES (CONVERT('2004-10-15',DATE));
355
INSERT INTO t1 (col2) VALUES (CONVERT('2004-10-15 10:15',DATETIME));
356
INSERT INTO t1 (col3) VALUES (CONVERT('2004-10-15 10:15',DATETIME));
359
## Test INSERT with CONVERT to DATE into DATE
360
# All test cases expected to fail should return
361
# SQLSTATE 22007 <invalid date value>
363
INSERT INTO t1 (col1) VALUES(CONVERT('0000-10-31' , DATE));
366
INSERT INTO t1 (col1) VALUES(CONVERT('2004-10-0' , DATE));
368
INSERT INTO t1 (col1) VALUES(CONVERT('2004-0-10' , DATE));
370
# deactivated because of Bug#8294
371
# Bug#8294 Traditional: Misleading error message for invalid CAST to DATE
373
#INSERT INTO t1 (col1) VALUES(CONVERT('2004-9-31' , DATE));
375
#INSERT INTO t1 (col1) VALUES(CONVERT('2004-10-32' , DATE));
377
#INSERT INTO t1 (col1) VALUES(CONVERT('2003-02-29' , DATE));
379
#INSERT INTO t1 (col1) VALUES(CONVERT('2004-13-15',DATE));
381
# Bug#6145: Traditional: CONVERT and CAST should reject zero DATE values
383
INSERT INTO t1 (col1) VALUES(CONVERT('0000-00-00',DATE));
385
## Test INSERT with CONVERT to DATETIME into DATETIME
386
# All test cases expected to fail should return
387
# SQLSTATE 22007 <invalid datetime value>
389
INSERT INTO t1 (col2) VALUES(CONVERT('0000-10-31 15:30',DATETIME));
392
INSERT INTO t1 (col2) VALUES(CONVERT('2004-10-0 15:30',DATETIME));
394
INSERT INTO t1 (col2) VALUES(CONVERT('2004-0-10 15:30',DATETIME));
396
# deactivated because of Bug#8294
397
# Bug#8294 Traditional: Misleading error message for invalid CAST to DATE
399
#INSERT INTO t1 (col2) VALUES(CONVERT('2004-9-31 15:30',DATETIME));
401
#INSERT INTO t1 (col2) VALUES(CONVERT('2004-10-32 15:30',DATETIME));
403
#INSERT INTO t1 (col2) VALUES(CONVERT('2003-02-29 15:30',DATETIME));
405
#INSERT INTO t1 (col2) VALUES(CONVERT('2004-13-15 15:30',DATETIME));
407
# Bug#6145: Traditional: CONVERT and CAST should reject zero DATE values
409
INSERT INTO t1 (col2) VALUES(CONVERT('0000-00-00',DATETIME));
411
## Test INSERT with CONVERT to DATETIME into DATETIME
412
# All test cases expected to fail should return
413
# SQLSTATE 22007 <invalid datetime value>
415
INSERT INTO t1 (col3) VALUES(CONVERT('0000-10-31 15:30',DATETIME));
417
# We accept this to be a failure
420
INSERT INTO t1 (col3) VALUES(CONVERT('2004-10-0 15:30',DATETIME));
422
INSERT INTO t1 (col3) VALUES(CONVERT('2004-0-10 15:30',DATETIME));
424
# deactivated because of Bug#8294
425
# Bug#8294 Traditional: Misleading error message for invalid CAST to DATE
427
#INSERT INTO t1 (col3) VALUES(CONVERT('2004-9-31 15:30',DATETIME));
429
#INSERT INTO t1 (col3) VALUES(CONVERT('2004-10-32 15:30',DATETIME));
431
#INSERT INTO t1 (col3) VALUES(CONVERT('2003-02-29 15:30',DATETIME));
433
#INSERT INTO t1 (col3) VALUES(CONVERT('2004-13-15 15:30',DATETIME));
435
# Bug#6145: Traditional: CONVERT and CAST should reject zero DATE values
437
INSERT INTO t1 (col3) VALUES(CONVERT('0000-00-00',DATETIME));
442
# Test INSERT with int
444
CREATE TABLE t1(col1 int, col2 int UNSIGNED);
445
INSERT INTO t1 VALUES(-128,0),(0,0),(127,255),('-128','0'),('0','0'),('127','255'),(-128.0,0.0),(0.0,0.0),(127.0,255.0);
446
# Test that we restored the mode checking properly after an ok query
447
SELECT MOD(col1,0) FROM t1 WHERE col1 > 0 LIMIT 2;
448
INSERT INTO t1 (col1) VALUES(-129);
449
INSERT INTO t1 (col1) VALUES(128);
450
INSERT INTO t1 (col2) VALUES(-1);
451
INSERT INTO t1 (col2) VALUES(256);
452
INSERT INTO t1 (col1) VALUES('-129');
453
INSERT INTO t1 (col1) VALUES('128');
454
INSERT INTO t1 (col2) VALUES('-1');
455
INSERT INTO t1 (col2) VALUES('256');
456
INSERT INTO t1 (col1) VALUES(128.0);
457
INSERT INTO t1 (col2) VALUES(-1.0);
458
INSERT INTO t1 (col2) VALUES(256.0);
459
SELECT MOD(col1,0) FROM t1 WHERE col1 > 0 LIMIT 1;
461
UPDATE t1 SET col1 = col1 - 50 WHERE col1 < 0;
463
UPDATE t1 SET col2=col2 + 50 WHERE col2 > 0;
465
UPDATE t1 SET col1=col1 / 0 WHERE col1 > 0;
466
set @@sql_mode='ERROR_FOR_DIVISION_BY_ZERO';
467
INSERT INTO t1 values (1/0,1/0);
468
set @@sql_mode='ansi,traditional';
469
SELECT MOD(col1,0) FROM t1 WHERE col1 > 0 LIMIT 2;
470
# Should return SQLSTATE 22018 invalid character value for cast
472
INSERT INTO t1 (col1) VALUES ('');
474
INSERT INTO t1 (col1) VALUES ('a59b');
476
INSERT INTO t1 (col1) VALUES ('1a');
477
INSERT IGNORE INTO t1 (col1) VALUES ('2a');
478
INSERT IGNORE INTO t1 values (1/0,1/0);
479
set @@sql_mode='ansi';
480
INSERT INTO t1 values (1/0,1/0);
481
set @@sql_mode='ansi,traditional';
482
INSERT IGNORE INTO t1 VALUES('-129','-1'),('128','256');
483
INSERT IGNORE INTO t1 VALUES(-129.0,-1.0),(128.0,256.0);
484
UPDATE IGNORE t1 SET col2=1/NULL where col1=0;
489
# Test INSERT with int
491
CREATE TABLE t1(col1 int, col2 int UNSIGNED);
492
INSERT INTO t1 VALUES(-32768,0),(0,0),(32767,65535),('-32768','0'),('32767','65535'),(-32768.0,0.0),(32767.0,65535.0);
495
INSERT INTO t1 (col1) VALUES(-32769);
497
INSERT INTO t1 (col1) VALUES(32768);
499
INSERT INTO t1 (col2) VALUES(-1);
501
INSERT INTO t1 (col2) VALUES(65536);
503
INSERT INTO t1 (col1) VALUES('-32769');
505
INSERT INTO t1 (col1) VALUES('32768');
507
INSERT INTO t1 (col2) VALUES('-1');
509
INSERT INTO t1 (col2) VALUES('65536');
511
INSERT INTO t1 (col1) VALUES(-32769.0);
513
INSERT INTO t1 (col1) VALUES(32768.0);
515
INSERT INTO t1 (col2) VALUES(-1.0);
517
INSERT INTO t1 (col2) VALUES(65536.0);
519
UPDATE t1 SET col1 = col1 - 50 WHERE col1 < 0;
521
UPDATE t1 SET col2 = col2 + 50 WHERE col2 > 0;
523
UPDATE t1 SET col1 = col1 / 0 WHERE col1 > 0;
525
UPDATE t1 SET col1= MOD(col1,0) WHERE col1 > 0;
527
INSERT INTO t1 (col1) VALUES ('');
529
INSERT INTO t1 (col1) VALUES ('a59b');
531
INSERT INTO t1 (col1) VALUES ('1a');
532
INSERT IGNORE INTO t1 (col1) VALUES ('2a');
533
INSERT IGNORE INTO t1 values (1/0,1/0);
534
INSERT IGNORE INTO t1 VALUES(-32769,-1),(32768,65536);
535
INSERT IGNORE INTO t1 VALUES('-32769','-1'),('32768','65536');
536
INSERT IGNORE INTO t1 VALUES(-32769,-1.0),(32768.0,65536.0);
537
UPDATE IGNORE t1 SET col2=1/NULL where col1=0;
542
# Test INSERT with MEDIUMINT
544
CREATE TABLE t1 (col1 MEDIUMINT, col2 MEDIUMINT UNSIGNED);
545
INSERT INTO t1 VALUES(-8388608,0),(0,0),(8388607,16777215),('-8388608','0'),('8388607','16777215'),(-8388608.0,0.0),(8388607.0,16777215.0);
547
INSERT INTO t1 (col1) VALUES(-8388609);
549
INSERT INTO t1 (col1) VALUES(8388608);
551
INSERT INTO t1 (col2) VALUES(-1);
553
INSERT INTO t1 (col2) VALUES(16777216);
555
INSERT INTO t1 (col1) VALUES('-8388609');
557
INSERT INTO t1 (col1) VALUES('8388608');
559
INSERT INTO t1 (col2) VALUES('-1');
561
INSERT INTO t1 (col2) VALUES('16777216');
563
INSERT INTO t1 (col1) VALUES(-8388609.0);
565
INSERT INTO t1 (col1) VALUES(8388608.0);
567
INSERT INTO t1 (col2) VALUES(-1.0);
569
INSERT INTO t1 (col2) VALUES(16777216.0);
572
UPDATE t1 SET col1 = col1 - 50 WHERE col1 < 0;
574
UPDATE t1 SET col2 = col2 + 50 WHERE col2 > 0;
576
UPDATE t1 SET col1 =col1 / 0 WHERE col1 > 0;
578
UPDATE t1 SET col1= MOD(col1,0) WHERE col1 > 0;
580
INSERT INTO t1 (col1) VALUES ('');
582
INSERT INTO t1 (col1) VALUES ('a59b');
584
INSERT INTO t1 (col1) VALUES ('1a');
585
INSERT IGNORE INTO t1 (col1) VALUES ('2a');
586
INSERT IGNORE INTO t1 values (1/0,1/0);
587
INSERT IGNORE INTO t1 VALUES(-8388609,-1),(8388608,16777216);
588
INSERT IGNORE INTO t1 VALUES('-8388609','-1'),('8388608','16777216');
589
INSERT IGNORE INTO t1 VALUES(-8388609.0,-1.0),(8388608.0,16777216.0);
590
UPDATE IGNORE t1 SET col2=1/NULL where col1=0;
595
# Test INSERT with INT
597
CREATE TABLE t1 (col1 INT, col2 INT UNSIGNED);
598
INSERT INTO t1 VALUES(-2147483648,0),(0,0),(2147483647,4294967295),('-2147483648','0'),('2147483647','4294967295'),(-2147483648.0,0.0),(2147483647.0,4294967295.0);
600
INSERT INTO t1 (col1) VALUES(-2147483649);
602
INSERT INTO t1 (col1) VALUES(2147643648);
604
INSERT INTO t1 (col2) VALUES(-1);
606
INSERT INTO t1 (col2) VALUES(4294967296);
608
INSERT INTO t1 (col1) VALUES('-2147483649');
610
INSERT INTO t1 (col1) VALUES('2147643648');
612
INSERT INTO t1 (col2) VALUES('-1');
614
INSERT INTO t1 (col2) VALUES('4294967296');
616
INSERT INTO t1 (col1) VALUES(-2147483649.0);
618
INSERT INTO t1 (col1) VALUES(2147643648.0);
620
INSERT INTO t1 (col2) VALUES(-1.0);
622
INSERT INTO t1 (col2) VALUES(4294967296.0);
625
UPDATE t1 SET col1 = col1 - 50 WHERE col1 < 0;
627
UPDATE t1 SET col2 =col2 + 50 WHERE col2 > 0;
629
UPDATE t1 SET col1 =col1 / 0 WHERE col1 > 0;
631
UPDATE t1 SET col1= MOD(col1,0) WHERE col1 > 0;
633
INSERT INTO t1 (col1) VALUES ('');
635
INSERT INTO t1 (col1) VALUES ('a59b');
637
INSERT INTO t1 (col1) VALUES ('1a');
638
INSERT IGNORE INTO t1 (col1) VALUES ('2a');
639
INSERT IGNORE INTO t1 values (1/0,1/0);
640
INSERT IGNORE INTO t1 values (-2147483649, -1),(2147643648,4294967296);
641
INSERT IGNORE INTO t1 values ('-2147483649', '-1'),('2147643648','4294967296');
642
INSERT IGNORE INTO t1 values (-2147483649.0, -1.0),(2147643648.0,4294967296.0);
643
UPDATE IGNORE t1 SET col2=1/NULL where col1=0;
647
# Test INSERT with BIGINT
648
# Note that this doesn't behave 100 % to standard as we rotate
649
# integers when it's too big/small (just like C)
651
CREATE TABLE t1 (col1 BIGINT, col2 BIGINT UNSIGNED);
652
INSERT INTO t1 VALUES(-9223372036854775808,0),(0,0),(9223372036854775807,18446744073709551615);
653
INSERT INTO t1 VALUES('-9223372036854775808','0'),('9223372036854775807','18446744073709551615');
654
INSERT INTO t1 VALUES(-9223372036854774000.0,0.0),(9223372036854775700.0,1844674407370954000.0);
657
INSERT INTO t1 (col1) VALUES(-9223372036854775809);
659
INSERT INTO t1 (col1) VALUES(9223372036854775808);
661
INSERT INTO t1 (col2) VALUES(-1);
664
INSERT INTO t1 (col2) VALUES(18446744073709551616);
666
INSERT INTO t1 (col1) VALUES('-9223372036854775809');
668
INSERT INTO t1 (col1) VALUES('9223372036854775808');
670
INSERT INTO t1 (col2) VALUES('-1');
672
INSERT INTO t1 (col2) VALUES('18446744073709551616');
674
# Note that the following two double numbers are slighty bigger than max/min
675
# bigint becasue of rounding errors when converting it to bigint
677
INSERT INTO t1 (col1) VALUES(-9223372036854785809.0);
679
INSERT INTO t1 (col1) VALUES(9223372036854785808.0);
681
INSERT INTO t1 (col2) VALUES(-1.0);
683
INSERT INTO t1 (col2) VALUES(18446744073709551616.0);
685
# The following doesn't give an error as it's done in integer context
686
# UPDATE t1 SET col1=col1 - 5000 WHERE col1 < 0;
687
# UPDATE t1 SET col2 =col2 + 5000 WHERE col2 > 0;
690
UPDATE t1 SET col1 =col1 / 0 WHERE col1 > 0;
692
UPDATE t1 SET col1= MOD(col1,0) WHERE col1 > 0;
694
INSERT INTO t1 (col1) VALUES ('');
696
INSERT INTO t1 (col1) VALUES ('a59b');
698
INSERT INTO t1 (col1) VALUES ('1a');
699
INSERT IGNORE INTO t1 (col1) VALUES ('2a');
700
INSERT IGNORE INTO t1 values (1/0,1/0);
701
INSERT IGNORE INTO t1 VALUES(-9223372036854775809,-1),(9223372036854775808,18446744073709551616);
702
INSERT IGNORE INTO t1 VALUES('-9223372036854775809','-1'),('9223372036854775808','18446744073709551616');
703
INSERT IGNORE INTO t1 VALUES(-9223372036854785809.0,-1.0),(9223372036854785808.0,18446744073709551616.0);
704
UPDATE IGNORE t1 SET col2=1/NULL where col1=0;
708
# Test INSERT with NUMERIC
710
CREATE TABLE t1 (col1 NUMERIC(4,2));
711
INSERT INTO t1 VALUES (10.55),(10.5555),(0),(-10.55),(-10.5555),(11),(1e+01);
712
# Note that the +/-10.5555 is inserted as +/-10.55, not +/-10.56 !
713
INSERT INTO t1 VALUES ('10.55'),('10.5555'),('-10.55'),('-10.5555'),('11'),('1e+01');
715
# The 2 following inserts should generate a warning, but doesn't yet
716
# because NUMERIC works like DECIMAL
718
INSERT INTO t1 VALUES (101.55);
720
INSERT INTO t1 VALUES (101);
722
INSERT INTO t1 VALUES (-101.55);
724
INSERT INTO t1 VALUES (1010.55);
726
INSERT INTO t1 VALUES (1010);
727
# The 2 following inserts should generate a warning, but doesn't yet
728
# because NUMERIC works like DECIMAL
730
INSERT INTO t1 VALUES ('101.55');
732
INSERT INTO t1 VALUES ('101');
734
INSERT INTO t1 VALUES ('-101.55');
736
INSERT INTO t1 VALUES ('-1010.55');
738
INSERT INTO t1 VALUES ('-100E+1');
740
INSERT INTO t1 VALUES ('-100E');
742
UPDATE t1 SET col1 =col1 * 50000 WHERE col1 =11;
744
UPDATE t1 SET col1 =col1 / 0 WHERE col1 > 0;
746
UPDATE t1 SET col1= MOD(col1,0) WHERE col1 > 0;
749
INSERT INTO t1 (col1) VALUES ('');
752
INSERT INTO t1 (col1) VALUES ('a59b');
754
INSERT INTO t1 (col1) VALUES ('1a');
755
INSERT IGNORE INTO t1 (col1) VALUES ('2a');
756
INSERT IGNORE INTO t1 values (1/0);
757
INSERT IGNORE INTO t1 VALUES(1000),(-1000);
758
INSERT IGNORE INTO t1 VALUES('1000'),('-1000');
759
INSERT IGNORE INTO t1 VALUES(1000.0),(-1000.0);
760
UPDATE IGNORE t1 SET col1=1/NULL where col1=0;
764
# Test INSERT with FLOAT
766
CREATE TABLE t1 (col1 FLOAT, col2 FLOAT UNSIGNED);
767
INSERT INTO t1 VALUES (-1.1E-37,0),(+3.4E+38,+3.4E+38);
768
INSERT INTO t1 VALUES ('-1.1E-37',0),('+3.4E+38','+3.4E+38');
769
# We don't give warnings for underflow
770
INSERT INTO t1 (col1) VALUES (3E-46);
772
INSERT INTO t1 (col1) VALUES (+3.4E+39);
774
INSERT INTO t1 (col2) VALUES (-1.1E-3);
776
INSERT INTO t1 (col1) VALUES ('+3.4E+39');
778
INSERT INTO t1 (col2) VALUES ('-1.1E-3');
780
UPDATE t1 SET col1 =col1 * 5000 WHERE col1 > 0;
782
UPDATE t1 SET col2 =col2 / 0 WHERE col2 > 0;
784
UPDATE t1 SET col2= MOD(col2,0) WHERE col2 > 0;
786
INSERT INTO t1 (col1) VALUES ('');
788
INSERT INTO t1 (col1) VALUES ('a59b');
790
INSERT INTO t1 (col1) VALUES ('1a');
791
INSERT IGNORE INTO t1 (col1) VALUES ('2a');
792
INSERT IGNORE INTO t1 (col1) VALUES (1/0);
793
INSERT IGNORE INTO t1 VALUES (+3.4E+39,-3.4E+39);
794
INSERT IGNORE INTO t1 VALUES ('+3.4E+39','-3.4E+39');
798
# Test INSERT with DOUBLE
800
CREATE TABLE t1 (col1 DOUBLE PRECISION, col2 DOUBLE PRECISION UNSIGNED);
801
INSERT INTO t1 VALUES (-2.2E-307,0),(2E-307,0),(+1.7E+308,+1.7E+308);
802
INSERT INTO t1 VALUES ('-2.2E-307',0),('-2E-307',0),('+1.7E+308','+1.7E+308');
803
# We don't give warnings for underflow
804
INSERT INTO t1 (col1) VALUES (-2.2E-330);
806
INSERT INTO t1 (col1) VALUES (+1.7E+309);
808
INSERT INTO t1 (col2) VALUES (-1.1E-3);
810
INSERT INTO t1 (col1) VALUES ('+1.8E+309');
812
INSERT INTO t1 (col2) VALUES ('-1.2E-3');
813
UPDATE t1 SET col1 =col1 * 5000 WHERE col1 > 0;
815
UPDATE t1 SET col2 =col2 / 0 WHERE col2 > 0;
817
UPDATE t1 SET col2= MOD(col2,0) WHERE col2 > 0;
819
INSERT INTO t1 (col1) VALUES ('');
821
INSERT INTO t1 (col1) VALUES ('a59b');
823
INSERT INTO t1 (col1) VALUES ('1a');
824
INSERT IGNORE INTO t1 (col1) VALUES ('2a');
825
INSERT IGNORE INTO t1 (col1) values (1/0);
827
INSERT IGNORE INTO t1 VALUES (+1.9E+309,-1.9E+309);
828
INSERT IGNORE INTO t1 VALUES ('+2.0E+309','-2.0E+309');
830
--replace_result -0 0 1.7976931348623e+308 1.79769313486232e+308
834
# Testing INSERT with CHAR/VARCHAR
836
CREATE TABLE t1 (col1 CHAR(5), col2 VARCHAR(6));
837
INSERT INTO t1 VALUES ('hello', 'hello'),('he', 'he'),('hello ', 'hello ');
839
INSERT INTO t1 (col1) VALUES ('hellobob');
841
INSERT INTO t1 (col2) VALUES ('hellobob');
842
INSERT INTO t1 (col2) VALUES ('hello ');
844
UPDATE t1 SET col1 ='hellobob' WHERE col1 ='he';
846
UPDATE t1 SET col2 ='hellobob' WHERE col2 ='he';
847
INSERT IGNORE INTO t1 VALUES ('hellobob', 'hellobob');
848
UPDATE IGNORE t1 SET col2 ='hellotrudy' WHERE col2 ='he';
852
# Testing INSERT with ENUM
854
CREATE TABLE t1 (col1 enum('red','blue','green'));
855
INSERT INTO t1 VALUES ('red'),('blue'),('green');
857
INSERT INTO t1 (col1) VALUES ('yellow');
859
INSERT INTO t1 (col1) VALUES ('redd');
861
INSERT INTO t1 VALUES ('');
863
UPDATE t1 SET col1 ='yellow' WHERE col1 ='green';
864
INSERT IGNORE INTO t1 VALUES ('yellow');
865
UPDATE IGNORE t1 SET col1 ='yellow' WHERE col1 ='blue';
869
# Testing of insert of NULL in not NULL column
871
CREATE TABLE t1 (col1 INT NOT NULL, col2 CHAR(5) NOT NULL, col3 DATE NOT NULL);
872
INSERT INTO t1 VALUES (100, 'hello', '2004-08-20');
873
INSERT INTO t1 (col1,col2,col3) VALUES (101, 'hell2', '2004-08-21');
875
INSERT INTO t1 (col1,col2,col3) VALUES (NULL, '', '2004-01-01');
877
INSERT INTO t1 (col1,col2,col3) VALUES (102, NULL, '2004-01-01');
879
INSERT INTO t1 VALUES (103,'',NULL);
881
UPDATE t1 SET col1=NULL WHERE col1 =100;
883
UPDATE t1 SET col2 =NULL WHERE col2 ='hello';
885
UPDATE t1 SET col2 =NULL where col3 IS NOT NULL;
886
INSERT IGNORE INTO t1 values (NULL,NULL,NULL);
890
# Testing of default values
892
CREATE TABLE t1 (col1 INT NOT NULL default 99, col2 CHAR(6) NOT NULL);
893
SHOW CREATE TABLE t1;
894
INSERT INTO t1 VALUES (1, 'hello');
895
INSERT INTO t1 (col2) VALUES ('hello2');
897
INSERT INTO t1 (col2) VALUES (NULL);
899
INSERT INTO t1 (col1) VALUES (2);
901
INSERT INTO t1 VALUES(default(col1),default(col2));
903
INSERT INTO t1 (col1) SELECT 1;
905
INSERT INTO t1 SELECT 1,NULL;
906
INSERT IGNORE INTO t1 values (NULL,NULL);
907
INSERT IGNORE INTO t1 (col1) values (3);
908
INSERT IGNORE INTO t1 () values ();
913
# Bug #9029 Traditional: Wrong SQLSTATE returned for string truncation
916
set sql_mode='traditional';
917
create table t1 (charcol char(255), varcharcol varchar(255),
918
binarycol binary(255), varbinarycol varbinary(255), tinytextcol tinytext,
919
tinyblobcol tinyblob);
921
insert into t1 (charcol) values (repeat('x',256));
923
insert into t1 (varcharcol) values (repeat('x',256));
925
insert into t1 (binarycol) values (repeat('x',256));
927
insert into t1 (varbinarycol) values (repeat('x',256));
929
insert into t1 (tinytextcol) values (repeat('x',256));
931
insert into t1 (tinyblobcol) values (repeat('x',256));
936
# Bug #5902: STR_TO_DATE() didn't give errors in traditional mode
939
set sql_mode='traditional';
940
create table t1 (col1 datetime);
942
insert into t1 values(STR_TO_DATE('31.10.2004 15.30 abc','%d.%m.%Y %H.%i'));
944
insert into t1 values(STR_TO_DATE('32.10.2004 15.30','%d.%m.%Y %H.%i'));
946
insert into t1 values(STR_TO_DATE('2004.12.12 22:22:33 AM','%Y.%m.%d %r'));
948
insert into t1 values(STR_TO_DATE('2004.12.12 abc','%Y.%m.%d %T'));
950
insert into t1 values(STR_TO_DATE('31.10.2004 15.30 abc','%d.%m.%Y %H.%i'));
951
insert into t1 values(STR_TO_DATE('32.10.2004 15.30','%d.%m.%Y %H.%i'));
952
insert into t1 values(STR_TO_DATE('2004.12.12 22:22:33 AM','%Y.%m.%d %r'));
953
insert into t1 values(STR_TO_DATE('2004.12.12 abc','%Y.%m.%d %T'));
955
# Some correct values, just to test the functions
956
insert into t1 values(STR_TO_DATE('31.10.2004 15.30','%d.%m.%Y %H.%i'));
957
insert into t1 values(STR_TO_DATE('2004.12.12 11:22:33 AM','%Y.%m.%d %r'));
958
insert into t1 values(STR_TO_DATE('2004.12.12 10:22:59','%Y.%m.%d %T'));
962
# Check that select don't abort even in strict mode (for now)
963
set sql_mode='traditional';
965
select count(*) from t1 where STR_TO_DATE('2004.12.12 10:22:61','%Y.%m.%d %T') IS NULL;
970
# Check insert with wrong CAST() (Bug #5912)
973
create table t1 (col1 char(3), col2 integer);
975
insert into t1 (col1) values (cast(1000 as char(3)));
977
insert into t1 (col1) values (cast(1000E+0 as char(3)));
979
insert into t1 (col1) values (cast(1000.0 as char(3)));
981
insert into t1 (col2) values (cast('abc' as signed integer));
983
insert into t1 (col2) values (10E+0 + 'a');
985
insert into t1 (col2) values (cast('10a' as integer));
986
insert into t1 (col2) values (cast('10' as integer));
987
insert into t1 (col2) values (cast('10' as signed integer));
988
insert into t1 (col2) values (10E+0 + '0 ');
993
# Zero dates using numbers was not checked properly (Bug #5933 & #6145)
996
create table t1 (col1 date, col2 datetime, col3 timestamp);
998
insert into t1 values (0,0,0);
1000
insert into t1 values (0.0,0.0,0.0);
1002
insert into t1 (col1) values (convert('0000-00-00',date));
1004
insert into t1 (col1) values (cast('0000-00-00' as date));
1006
set sql_mode='no_zero_date';
1007
insert into t1 values (0,0,0);
1008
insert into t1 values (0.0,0.0,0.0);
1010
set sql_mode='traditional';
1011
create table t1 (col1 date);
1012
insert ignore into t1 values ('0000-00-00');
1014
insert into t1 select * from t1;
1015
insert ignore into t1 values ('0000-00-00');
1016
insert ignore into t1 (col1) values (cast('0000-00-00' as date));
1018
insert into t1 select * from t1;
1020
alter table t1 modify col1 datetime;
1021
alter ignore table t1 modify col1 datetime;
1023
insert into t1 select * from t1;
1028
# Test of inserting an invalid value via a stored procedure (Bug #5907)
1030
create table t1 (col1 int);
1031
drop procedure if exists t1;
1033
create procedure t1 () begin declare exit handler for sqlexception
1034
select'a'; insert into t1 values (200); end;|
1044
set sql_mode=@org_mode;
1046
# Test fields with no default value that are NOT NULL (Bug #5986)
1047
SET @@sql_mode = 'traditional';
1048
CREATE TABLE t1 (i int not null);
1050
INSERT INTO t1 VALUES ();
1052
INSERT INTO t1 VALUES (DEFAULT);
1054
INSERT INTO t1 VALUES (DEFAULT(i));
1055
ALTER TABLE t1 ADD j int;
1057
INSERT INTO t1 SET j = 1;
1059
INSERT INTO t1 SET j = 1, i = DEFAULT;
1061
INSERT INTO t1 SET j = 1, i = DEFAULT(i);
1063
INSERT INTO t1 VALUES (DEFAULT,1);
1065
SET @@sql_mode = '';
1066
CREATE TABLE t1 (i int not null);
1067
INSERT INTO t1 VALUES ();
1068
INSERT INTO t1 VALUES (DEFAULT);
1069
# DEFAULT(i) is an error even with the default sql_mode
1071
INSERT INTO t1 VALUES (DEFAULT(i));
1072
ALTER TABLE t1 ADD j int;
1073
INSERT INTO t1 SET j = 1;
1074
INSERT INTO t1 SET j = 1, i = DEFAULT;
1076
INSERT INTO t1 SET j = 1, i = DEFAULT(i);
1077
INSERT INTO t1 VALUES (DEFAULT,1);
1081
# Bugs #8295 and #8296: varchar and varbinary conversion
1084
set @@sql_mode='traditional';
1086
create table t1(a varchar(65537));
1088
create table t1(a varbinary(65537));
1091
# Bug #9881: problem with altering table
1094
set @@sql_mode='traditional';
1095
create table t1(a int, b date not null);
1096
alter table t1 modify a bigint not null;
1097
show create table t1;
1101
# Bug #5906: handle invalid date due to conversion
1103
set @@sql_mode='traditional';
1104
create table t1 (d date);
1106
insert into t1 values ('2000-10-00');
1108
insert into t1 values (1000);
1109
insert into t1 values ('2000-10-01');
1111
update t1 set d = 1100;
1116
# Bug #11964: alter table with timestamp field
1119
set @@sql_mode='traditional';
1120
create table t1(a int, b timestamp);
1121
alter table t1 add primary key(a);
1122
show create table t1;
1124
create table t1(a int, b timestamp default 20050102030405);
1125
alter table t1 add primary key(a);
1126
show create table t1;
1133
set @@sql_mode='traditional';
1134
create table t1(a bit(2));
1136
insert into t1 values(b'101');
1141
# Bug#17626 CREATE TABLE ... SELECT failure with TRADITIONAL SQL mode
1143
set sql_mode='traditional';
1144
create table t1 (date date not null);
1145
create table t2 select date from t1;
1146
show create table t2;
1148
set @@sql_mode= @org_mode;
1151
create table t1 (i int)
1152
comment '123456789*123456789*123456789*123456789*123456789*123456789*';
1153
show create table t1;
1157
# Bug #26359: Strings becoming truncated and converted to numbers under STRICT mode
1159
set sql_mode= 'traditional';
1160
create table t1(col1 int, col2 int,
1162
col5 mediumint, col6 mediumint,
1164
col9 bigint, col10 bigint);
1166
insert into t1(col1) values('-');
1168
insert into t1(col2) values('+');
1170
insert into t1(col3) values('-');
1172
insert into t1(col4) values('+');
1174
insert into t1(col5) values('-');
1176
insert into t1(col6) values('+');
1178
insert into t1(col7) values('-');
1180
insert into t1(col8) values('+');
1182
insert into t1(col9) values('-');
1184
insert into t1(col10) values('+');
1188
# Bug #27176: Assigning a string to an year column has unexpected results
1190
set sql_mode='traditional';
1191
create table t1(a year);
1193
insert into t1 values ('-');
1195
insert into t1 values ('+');
1197
insert into t1 values ('');
1199
insert into t1 values ('2000a');
1201
insert into t1 values ('2E3x');
1205
# Bug#27069 set with identical elements are created
1207
set sql_mode='traditional';
1209
create table t1 (f1 set('a','a'));
1211
create table t1 (f1 enum('a','a'));
1214
# Bug #22824: strict, datetime, NULL, wrong warning
1216
set @@sql_mode='NO_ZERO_DATE';
1217
create table t1(a datetime not null);
1218
select count(*) from t1 where a is null;
1221
--echo End of 5.0 tests