3
3
-- source include/have_innodb.inc
5
set @org_mode=@@sql_mode;
6
set @@sql_mode='ansi,traditional';
8
DROP TABLE IF EXISTS t1;
10
DROP TABLE IF EXISTS t1, t2;
10
CREATE TABLE t1 (col1 INT);
11
INSERT INTO t1 VALUES(-2147483648);
12
INSERT INTO t1 VALUES (0);
13
INSERT INTO t1 VALUES (2147483647);
14
INSERT INTO t1 VALUES ('-2147483648');
15
INSERT INTO t1 VALUES ('2147483647');
16
INSERT INTO t1 VALUES (-2147483648.0);
17
INSERT INTO t1 VALUES (2147483647.0);
18
--error ER_WARN_DATA_OUT_OF_RANGE
13
# Test INSERT with DATE
15
CREATE TABLE t1 (col1 date);
16
INSERT INTO t1 VALUES('2004-01-01'),('2004-02-29');
17
INSERT INTO t1 VALUES('0000-10-31');
19
# All test cases expected to fail should return
20
# SQLSTATE 22007 <invalid date value>
22
INSERT INTO t1 VALUES('2004-0-31');
24
INSERT INTO t1 VALUES('2004-01-02'),('2004-0-31');
26
INSERT INTO t1 VALUES('2004-10-0');
28
INSERT INTO t1 VALUES('2004-09-31');
30
INSERT INTO t1 VALUES('2004-10-32');
32
INSERT INTO t1 VALUES('2003-02-29');
34
INSERT INTO t1 VALUES('2004-13-15');
36
INSERT INTO t1 VALUES('0000-00-00');
37
# Standard says we should return SQLSTATE 22018
39
INSERT INTO t1 VALUES ('59');
41
# Test the different related modes
42
set @@sql_mode='STRICT_ALL_TABLES';
43
INSERT INTO t1 VALUES('2004-01-03'),('2004-0-31');
44
set @@sql_mode='STRICT_ALL_TABLES,NO_ZERO_IN_DATE';
46
INSERT INTO t1 VALUES('2004-0-30');
48
INSERT INTO t1 VALUES('2004-01-04'),('2004-0-31'),('2004-01-05');
49
INSERT INTO t1 VALUES('0000-00-00');
50
INSERT IGNORE INTO t1 VALUES('2004-0-29');
51
set @@sql_mode='STRICT_ALL_TABLES,NO_ZERO_DATE';
53
INSERT INTO t1 VALUES('0000-00-00');
54
INSERT IGNORE INTO t1 VALUES('0000-00-00');
55
INSERT INTO t1 VALUES ('2004-0-30');
57
INSERT INTO t1 VALUES ('2004-2-30');
58
set @@sql_mode='STRICT_ALL_TABLES,ALLOW_INVALID_DATES';
59
INSERT INTO t1 VALUES ('2004-2-30');
60
set @@sql_mode='ansi,traditional';
61
INSERT IGNORE INTO t1 VALUES('2004-02-29'),('2004-13-15'),('0000-00-00');
66
# Test difference in behaviour with InnoDB and MyISAM tables
68
set @@sql_mode='strict_trans_tables';
69
CREATE TABLE t1 (col1 date) engine=myisam;
71
INSERT INTO t1 VALUES('2004-13-31'),('2004-1-1');
72
INSERT INTO t1 VALUES ('2004-1-2'), ('2004-13-31'),('2004-1-3');
73
INSERT IGNORE INTO t1 VALUES('2004-13-31'),('2004-1-4');
75
INSERT INTO t1 VALUES ('2003-02-29');
76
INSERT ignore INTO t1 VALUES('2003-02-30');
77
set @@sql_mode='STRICT_ALL_TABLES,ALLOW_INVALID_DATES';
78
INSERT ignore INTO t1 VALUES('2003-02-31');
82
set @@sql_mode='strict_trans_tables';
83
CREATE TABLE t1 (col1 date) engine=innodb;
85
INSERT INTO t1 VALUES('2004-13-31'),('2004-1-1');
87
INSERT INTO t1 VALUES ('2004-1-2'), ('2004-13-31'),('2004-1-3');
88
INSERT IGNORE INTO t1 VALUES('2004-13-31'),('2004-1-4');
90
INSERT INTO t1 VALUES ('2003-02-29');
91
INSERT ignore INTO t1 VALUES('2003-02-30');
92
set @@sql_mode='STRICT_ALL_TABLES,ALLOW_INVALID_DATES';
93
INSERT ignore INTO t1 VALUES('2003-02-31');
96
set @@sql_mode='ansi,traditional';
98
# Test INSERT with DATETIME
100
CREATE TABLE t1 (col1 datetime);
101
INSERT INTO t1 VALUES('2004-10-31 15:30:00'),('2004-02-29 15:30:00');
102
INSERT INTO t1 VALUES('0000-10-31 15:30:00');
104
# All test cases expected to fail should return
105
# SQLSTATE 22007 <invalid datetime value>
107
INSERT INTO t1 VALUES('2004-0-31 15:30:00');
109
INSERT INTO t1 VALUES('2004-10-0 15:30:00');
111
INSERT INTO t1 VALUES('2004-09-31 15:30:00');
113
INSERT INTO t1 VALUES('2004-10-32 15:30:00');
115
INSERT INTO t1 VALUES('2003-02-29 15:30:00');
117
INSERT INTO t1 VALUES('2004-13-15 15:30:00');
119
INSERT INTO t1 VALUES('0000-00-00 15:30:00');
120
# Standard says we should return SQLSTATE 22018
122
INSERT INTO t1 VALUES ('59');
126
# Test INSERT with TIMESTAMP
128
CREATE TABLE t1 (col1 timestamp);
129
INSERT INTO t1 VALUES('2004-10-31 15:30:00'),('2004-02-29 15:30:00');
131
# All test cases expected to fail should return
132
# SQLSTATE 22007 <invalid datetime value>
133
# Standard says we should return ok, but we can't as this is out of range
135
INSERT INTO t1 VALUES('0000-10-31 15:30:00');
137
INSERT INTO t1 VALUES('2004-0-31 15:30:00');
139
INSERT INTO t1 VALUES('2004-10-0 15:30:00');
141
INSERT INTO t1 VALUES('2004-09-31 15:30:00');
143
INSERT INTO t1 VALUES('2004-10-32 15:30:00');
145
INSERT INTO t1 VALUES('2003-02-29 15:30:00');
147
INSERT INTO t1 VALUES('2004-13-15 15:30:00');
149
INSERT INTO t1 VALUES('2004-02-29 25:30:00');
151
INSERT INTO t1 VALUES('2004-02-29 15:65:00');
153
INSERT INTO t1 VALUES('2004-02-29 15:31:61');
155
INSERT INTO t1 VALUES('0000-00-00 15:30:00');
157
INSERT INTO t1 VALUES('0000-00-00 00:00:00');
158
INSERT IGNORE INTO t1 VALUES('0000-00-00 00:00:00');
159
# Standard says we should return SQLSTATE 22018
161
INSERT INTO t1 VALUES ('59');
163
set @@sql_mode='STRICT_ALL_TABLES,ALLOW_INVALID_DATES';
165
INSERT INTO t1 VALUES('2004-0-31 15:30:00');
167
INSERT INTO t1 VALUES('2004-10-0 15:30:00');
169
INSERT INTO t1 VALUES('2004-10-32 15:30:00');
171
INSERT INTO t1 VALUES('2004-02-30 15:30:04');
172
INSERT INTO t1 VALUES('0000-00-00 00:00:00');
173
set @@sql_mode='STRICT_ALL_TABLES,NO_ZERO_IN_DATE';
174
INSERT INTO t1 VALUES('0000-00-00 00:00:00');
175
set @@sql_mode='STRICT_ALL_TABLES,NO_ZERO_DATE';
177
INSERT INTO t1 VALUES('0000-00-00 00:00:00');
178
set @@sql_mode='ansi,traditional';
183
#### Test INSERT with STR_TO_DATE into DATE/DATETIME/TIMESTAMP
185
CREATE TABLE t1 (col1 date, col2 datetime, col3 timestamp);
187
INSERT INTO t1 (col1) VALUES (STR_TO_DATE('15.10.2004','%d.%m.%Y'));
188
INSERT INTO t1 (col2) VALUES (STR_TO_DATE('15.10.2004 10.15','%d.%m.%Y %H.%i'));
189
INSERT INTO t1 (col3) VALUES (STR_TO_DATE('15.10.2004 10.15','%d.%m.%Y %H.%i'));
191
## Test INSERT with STR_TO_DATE into DATE
192
# All test cases expected to fail should return
193
# SQLSTATE 22007 <invalid date value>
195
INSERT INTO t1 (col1) VALUES(STR_TO_DATE('31.10.0000 15.30','%d.%m.%Y %H.%i'));
198
INSERT INTO t1 (col1) VALUES(STR_TO_DATE('31.0.2004 15.30','%d.%m.%Y %H.%i'));
200
INSERT INTO t1 (col1) VALUES(STR_TO_DATE('0.10.2004 15.30','%d.%m.%Y %H.%i'));
202
INSERT INTO t1 (col1) VALUES(STR_TO_DATE('31.9.2004 15.30','%d.%m.%Y %H.%i'));
204
INSERT INTO t1 (col1) VALUES(STR_TO_DATE('32.10.2004 15.30','%d.%m.%Y %H.%i'));
206
INSERT INTO t1 (col1) VALUES(STR_TO_DATE('29.02.2003 15.30','%d.%m.%Y %H.%i'));
208
INSERT INTO t1 (col1) VALUES(STR_TO_DATE('15.13.2004 15.30','%d.%m.%Y %H.%i'));
210
INSERT INTO t1 (col1) VALUES(STR_TO_DATE('00.00.0000','%d.%m.%Y'));
212
## Test INSERT with STR_TO_DATE into DATETIME
213
# All test cases expected to fail should return
214
# SQLSTATE 22007 <invalid datetime value>
216
INSERT INTO t1 (col2) VALUES(STR_TO_DATE('31.10.0000 15.30','%d.%m.%Y %H.%i'));
219
INSERT INTO t1 (col2) VALUES(STR_TO_DATE('31.0.2004 15.30','%d.%m.%Y %H.%i'));
221
INSERT INTO t1 (col2) VALUES(STR_TO_DATE('0.10.2004 15.30','%d.%m.%Y %H.%i'));
223
INSERT INTO t1 (col2) VALUES(STR_TO_DATE('31.9.2004 15.30','%d.%m.%Y %H.%i'));
225
INSERT INTO t1 (col2) VALUES(STR_TO_DATE('32.10.2004 15.30','%d.%m.%Y %H.%i'));
227
INSERT INTO t1 (col2) VALUES(STR_TO_DATE('29.02.2003 15.30','%d.%m.%Y %H.%i'));
229
INSERT INTO t1 (col2) VALUES(STR_TO_DATE('15.13.2004 15.30','%d.%m.%Y %H.%i'));
231
INSERT INTO t1 (col2) VALUES(STR_TO_DATE('00.00.0000','%d.%m.%Y'));
233
## Test INSERT with STR_TO_DATE into TIMESTAMP
234
# All test cases expected to fail should return
235
# SQLSTATE 22007 <invalid datetime value>
238
INSERT INTO t1 (col3) VALUES(STR_TO_DATE('31.10.0000 15.30','%d.%m.%Y %H.%i'));
240
INSERT INTO t1 (col3) VALUES(STR_TO_DATE('31.0.2004 15.30','%d.%m.%Y %H.%i'));
242
INSERT INTO t1 (col3) VALUES(STR_TO_DATE('0.10.2004 15.30','%d.%m.%Y %H.%i'));
244
INSERT INTO t1 (col3) VALUES(STR_TO_DATE('31.9.2004 15.30','%d.%m.%Y %H.%i'));
246
INSERT INTO t1 (col3) VALUES(STR_TO_DATE('32.10.2004 15.30','%d.%m.%Y %H.%i'));
248
INSERT INTO t1 (col3) VALUES(STR_TO_DATE('29.02.2003 15.30','%d.%m.%Y %H.%i'));
250
INSERT INTO t1 (col3) VALUES(STR_TO_DATE('15.13.2004 15.30','%d.%m.%Y %H.%i'));
252
INSERT INTO t1 (col3) VALUES(STR_TO_DATE('00.00.0000','%d.%m.%Y'));
257
#### Test INSERT with CAST AS DATE/DATETIME into DATE/DATETIME/TIMESTAMP
259
CREATE TABLE t1 (col1 date, col2 datetime, col3 timestamp);
261
INSERT INTO t1 (col1) VALUES (CAST('2004-10-15' AS DATE));
262
INSERT INTO t1 (col2) VALUES (CAST('2004-10-15 10:15' AS DATETIME));
263
INSERT INTO t1 (col3) VALUES (CAST('2004-10-15 10:15' AS DATETIME));
266
## Test INSERT with CAST AS DATE into DATE
267
# All test cases expected to fail should return
268
# SQLSTATE 22007 <invalid date value>
270
INSERT INTO t1 (col1) VALUES(CAST('0000-10-31' AS DATE));
273
INSERT INTO t1 (col1) VALUES(CAST('2004-10-0' AS DATE));
275
INSERT INTO t1 (col1) VALUES(CAST('2004-0-10' AS DATE));
277
# deactivated because of Bug#8294
278
# Bug#8294 Traditional: Misleading error message for invalid CAST to DATE
280
# INSERT INTO t1 (col1) VALUES(CAST('2004-9-31' AS DATE));
282
# INSERT INTO t1 (col1) VALUES(CAST('2004-10-32' AS DATE));
284
# INSERT INTO t1 (col1) VALUES(CAST('2003-02-29' AS DATE));
286
# INSERT INTO t1 (col1) VALUES(CAST('2004-13-15' AS DATE));
288
# deactivated because of Bug#6145
289
# Bug#6145: Traditional: CONVERT and CAST should reject zero DATE values
291
INSERT INTO t1 (col1) VALUES(CAST('0000-00-00' AS DATE));
293
## Test INSERT with CAST AS DATETIME into DATETIME
294
# All test cases expected to fail should return
295
# SQLSTATE 22007 <invalid datetime value>
297
INSERT INTO t1 (col2) VALUES(CAST('0000-10-31 15:30' AS DATETIME));
300
INSERT INTO t1 (col2) VALUES(CAST('2004-10-0 15:30' AS DATETIME));
302
INSERT INTO t1 (col2) VALUES(CAST('2004-0-10 15:30' AS DATETIME));
304
# deactivated because of Bug#8294
305
# Bug#8294 Traditional: Misleading error message for invalid CAST to DATE
307
#INSERT INTO t1 (col2) VALUES(CAST('2004-9-31 15:30' AS DATETIME));
309
#INSERT INTO t1 (col2) VALUES(CAST('2004-10-32 15:30' AS DATETIME));
311
#INSERT INTO t1 (col2) VALUES(CAST('2003-02-29 15:30' AS DATETIME));
313
#INSERT INTO t1 (col2) VALUES(CAST('2004-13-15 15:30' AS DATETIME));
315
# Bug#6145: Traditional: CONVERT and CAST should reject zero DATE values
317
INSERT INTO t1 (col2) VALUES(CAST('0000-00-00' AS DATETIME));
319
## Test INSERT with CAST AS DATETIME into TIMESTAMP
320
# All test cases expected to fail should return
321
# SQLSTATE 22007 <invalid datetime value>
323
INSERT INTO t1 (col3) VALUES(CAST('0000-10-31 15:30' AS DATETIME));
325
# We accept this to be a failure
328
INSERT INTO t1 (col3) VALUES(CAST('2004-10-0 15:30' AS DATETIME));
330
INSERT INTO t1 (col3) VALUES(CAST('2004-0-10 15:30' AS DATETIME));
331
# should return SQLSTATE 22007 <invalid datetime value>
333
# deactivated because of Bug#8294
334
# Bug#8294 Traditional: Misleading error message for invalid CAST to DATE
336
#INSERT INTO t1 (col3) VALUES(CAST('2004-9-31 15:30' AS DATETIME));
338
#INSERT INTO t1 (col3) VALUES(CAST('2004-10-32 15:30' AS DATETIME));
340
#INSERT INTO t1 (col3) VALUES(CAST('2003-02-29 15:30' AS DATETIME));
342
#INSERT INTO t1 (col3) VALUES(CAST('2004-13-15 15:30' AS DATETIME));
344
# Bug#6145: Traditional: CONVERT and CAST should reject zero DATE values
346
INSERT INTO t1 (col3) VALUES(CAST('0000-00-00' AS DATETIME));
351
#### Test INSERT with CONVERT to DATE/DATETIME into DATE/DATETIME/TIMESTAMP
353
CREATE TABLE t1 (col1 date, col2 datetime, col3 timestamp);
355
INSERT INTO t1 (col1) VALUES (CONVERT('2004-10-15',DATE));
356
INSERT INTO t1 (col2) VALUES (CONVERT('2004-10-15 10:15',DATETIME));
357
INSERT INTO t1 (col3) VALUES (CONVERT('2004-10-15 10:15',DATETIME));
360
## Test INSERT with CONVERT to DATE into DATE
361
# All test cases expected to fail should return
362
# SQLSTATE 22007 <invalid date value>
364
INSERT INTO t1 (col1) VALUES(CONVERT('0000-10-31' , DATE));
367
INSERT INTO t1 (col1) VALUES(CONVERT('2004-10-0' , DATE));
369
INSERT INTO t1 (col1) VALUES(CONVERT('2004-0-10' , DATE));
371
# deactivated because of Bug#8294
372
# Bug#8294 Traditional: Misleading error message for invalid CAST to DATE
374
#INSERT INTO t1 (col1) VALUES(CONVERT('2004-9-31' , DATE));
376
#INSERT INTO t1 (col1) VALUES(CONVERT('2004-10-32' , DATE));
378
#INSERT INTO t1 (col1) VALUES(CONVERT('2003-02-29' , DATE));
380
#INSERT INTO t1 (col1) VALUES(CONVERT('2004-13-15',DATE));
382
# Bug#6145: Traditional: CONVERT and CAST should reject zero DATE values
384
INSERT INTO t1 (col1) VALUES(CONVERT('0000-00-00',DATE));
386
## Test INSERT with CONVERT to DATETIME into DATETIME
387
# All test cases expected to fail should return
388
# SQLSTATE 22007 <invalid datetime value>
390
INSERT INTO t1 (col2) VALUES(CONVERT('0000-10-31 15:30',DATETIME));
393
INSERT INTO t1 (col2) VALUES(CONVERT('2004-10-0 15:30',DATETIME));
395
INSERT INTO t1 (col2) VALUES(CONVERT('2004-0-10 15:30',DATETIME));
397
# deactivated because of Bug#8294
398
# Bug#8294 Traditional: Misleading error message for invalid CAST to DATE
400
#INSERT INTO t1 (col2) VALUES(CONVERT('2004-9-31 15:30',DATETIME));
402
#INSERT INTO t1 (col2) VALUES(CONVERT('2004-10-32 15:30',DATETIME));
404
#INSERT INTO t1 (col2) VALUES(CONVERT('2003-02-29 15:30',DATETIME));
406
#INSERT INTO t1 (col2) VALUES(CONVERT('2004-13-15 15:30',DATETIME));
408
# Bug#6145: Traditional: CONVERT and CAST should reject zero DATE values
410
INSERT INTO t1 (col2) VALUES(CONVERT('0000-00-00',DATETIME));
412
## Test INSERT with CONVERT to DATETIME into DATETIME
413
# All test cases expected to fail should return
414
# SQLSTATE 22007 <invalid datetime value>
416
INSERT INTO t1 (col3) VALUES(CONVERT('0000-10-31 15:30',DATETIME));
418
# We accept this to be a failure
421
INSERT INTO t1 (col3) VALUES(CONVERT('2004-10-0 15:30',DATETIME));
423
INSERT INTO t1 (col3) VALUES(CONVERT('2004-0-10 15:30',DATETIME));
425
# deactivated because of Bug#8294
426
# Bug#8294 Traditional: Misleading error message for invalid CAST to DATE
428
#INSERT INTO t1 (col3) VALUES(CONVERT('2004-9-31 15:30',DATETIME));
430
#INSERT INTO t1 (col3) VALUES(CONVERT('2004-10-32 15:30',DATETIME));
432
#INSERT INTO t1 (col3) VALUES(CONVERT('2003-02-29 15:30',DATETIME));
434
#INSERT INTO t1 (col3) VALUES(CONVERT('2004-13-15 15:30',DATETIME));
436
# Bug#6145: Traditional: CONVERT and CAST should reject zero DATE values
438
INSERT INTO t1 (col3) VALUES(CONVERT('0000-00-00',DATETIME));
443
# Test INSERT with int
445
CREATE TABLE t1(col1 int, col2 int UNSIGNED);
446
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);
447
# Test that we restored the mode checking properly after an ok query
448
SELECT MOD(col1,0) FROM t1 WHERE col1 > 0 LIMIT 2;
450
INSERT INTO t1 (col1) VALUES(-129);
452
INSERT INTO t1 (col1) VALUES(128);
454
INSERT INTO t1 (col2) VALUES(-1);
456
INSERT INTO t1 (col2) VALUES(256);
458
INSERT INTO t1 (col1) VALUES('-129');
460
INSERT INTO t1 (col1) VALUES('128');
462
INSERT INTO t1 (col2) VALUES('-1');
464
INSERT INTO t1 (col2) VALUES('256');
466
INSERT INTO t1 (col1) VALUES(128.0);
468
INSERT INTO t1 (col2) VALUES(-1.0);
470
INSERT INTO t1 (col2) VALUES(256.0);
471
SELECT MOD(col1,0) FROM t1 WHERE col1 > 0 LIMIT 1;
473
UPDATE t1 SET col1 = col1 - 50 WHERE col1 < 0;
475
UPDATE t1 SET col2=col2 + 50 WHERE col2 > 0;
477
UPDATE t1 SET col1=col1 / 0 WHERE col1 > 0;
478
set @@sql_mode='ERROR_FOR_DIVISION_BY_ZERO';
479
INSERT INTO t1 values (1/0,1/0);
480
set @@sql_mode='ansi,traditional';
481
SELECT MOD(col1,0) FROM t1 WHERE col1 > 0 LIMIT 2;
482
# Should return SQLSTATE 22018 invalid character value for cast
484
INSERT INTO t1 (col1) VALUES ('');
486
INSERT INTO t1 (col1) VALUES ('a59b');
488
INSERT INTO t1 (col1) VALUES ('1a');
489
INSERT IGNORE INTO t1 (col1) VALUES ('2a');
490
INSERT IGNORE INTO t1 values (1/0,1/0);
491
set @@sql_mode='ansi';
492
INSERT INTO t1 values (1/0,1/0);
493
set @@sql_mode='ansi,traditional';
494
INSERT IGNORE INTO t1 VALUES('-129','-1'),('128','256');
495
INSERT IGNORE INTO t1 VALUES(-129.0,-1.0),(128.0,256.0);
496
UPDATE IGNORE t1 SET col2=1/NULL where col1=0;
501
# Test INSERT with int
503
CREATE TABLE t1(col1 int, col2 int UNSIGNED);
504
INSERT INTO t1 VALUES(-32768,0),(0,0),(32767,65535),('-32768','0'),('32767','65535'),(-32768.0,0.0),(32767.0,65535.0);
507
INSERT INTO t1 (col1) VALUES(-32769);
509
INSERT INTO t1 (col1) VALUES(32768);
511
INSERT INTO t1 (col2) VALUES(-1);
513
INSERT INTO t1 (col2) VALUES(65536);
515
INSERT INTO t1 (col1) VALUES('-32769');
517
INSERT INTO t1 (col1) VALUES('32768');
519
INSERT INTO t1 (col2) VALUES('-1');
521
INSERT INTO t1 (col2) VALUES('65536');
523
INSERT INTO t1 (col1) VALUES(-32769.0);
525
INSERT INTO t1 (col1) VALUES(32768.0);
527
INSERT INTO t1 (col2) VALUES(-1.0);
529
INSERT INTO t1 (col2) VALUES(65536.0);
531
UPDATE t1 SET col1 = col1 - 50 WHERE col1 < 0;
533
UPDATE t1 SET col2 = col2 + 50 WHERE col2 > 0;
535
UPDATE t1 SET col1 = col1 / 0 WHERE col1 > 0;
537
UPDATE t1 SET col1= MOD(col1,0) WHERE col1 > 0;
539
INSERT INTO t1 (col1) VALUES ('');
541
INSERT INTO t1 (col1) VALUES ('a59b');
543
INSERT INTO t1 (col1) VALUES ('1a');
544
INSERT IGNORE INTO t1 (col1) VALUES ('2a');
545
INSERT IGNORE INTO t1 values (1/0,1/0);
546
INSERT IGNORE INTO t1 VALUES(-32769,-1),(32768,65536);
547
INSERT IGNORE INTO t1 VALUES('-32769','-1'),('32768','65536');
548
INSERT IGNORE INTO t1 VALUES(-32769,-1.0),(32768.0,65536.0);
549
UPDATE IGNORE t1 SET col2=1/NULL where col1=0;
554
# Test INSERT with MEDIUMINT
556
CREATE TABLE t1 (col1 MEDIUMINT, col2 MEDIUMINT UNSIGNED);
557
INSERT INTO t1 VALUES(-8388608,0),(0,0),(8388607,16777215),('-8388608','0'),('8388607','16777215'),(-8388608.0,0.0),(8388607.0,16777215.0);
559
INSERT INTO t1 (col1) VALUES(-8388609);
561
INSERT INTO t1 (col1) VALUES(8388608);
563
INSERT INTO t1 (col2) VALUES(-1);
565
INSERT INTO t1 (col2) VALUES(16777216);
567
INSERT INTO t1 (col1) VALUES('-8388609');
569
INSERT INTO t1 (col1) VALUES('8388608');
571
INSERT INTO t1 (col2) VALUES('-1');
573
INSERT INTO t1 (col2) VALUES('16777216');
575
INSERT INTO t1 (col1) VALUES(-8388609.0);
577
INSERT INTO t1 (col1) VALUES(8388608.0);
579
INSERT INTO t1 (col2) VALUES(-1.0);
581
INSERT INTO t1 (col2) VALUES(16777216.0);
584
UPDATE t1 SET col1 = col1 - 50 WHERE col1 < 0;
586
UPDATE t1 SET col2 = col2 + 50 WHERE col2 > 0;
588
UPDATE t1 SET col1 =col1 / 0 WHERE col1 > 0;
590
UPDATE t1 SET col1= MOD(col1,0) WHERE col1 > 0;
592
INSERT INTO t1 (col1) VALUES ('');
594
INSERT INTO t1 (col1) VALUES ('a59b');
596
INSERT INTO t1 (col1) VALUES ('1a');
597
INSERT IGNORE INTO t1 (col1) VALUES ('2a');
598
INSERT IGNORE INTO t1 values (1/0,1/0);
599
INSERT IGNORE INTO t1 VALUES(-8388609,-1),(8388608,16777216);
600
INSERT IGNORE INTO t1 VALUES('-8388609','-1'),('8388608','16777216');
601
INSERT IGNORE INTO t1 VALUES(-8388609.0,-1.0),(8388608.0,16777216.0);
602
UPDATE IGNORE t1 SET col2=1/NULL where col1=0;
607
# Test INSERT with INT
609
CREATE TABLE t1 (col1 INT, col2 INT UNSIGNED);
610
INSERT INTO t1 VALUES(-2147483648,0),(0,0),(2147483647,4294967295),('-2147483648','0'),('2147483647','4294967295'),(-2147483648.0,0.0),(2147483647.0,4294967295.0);
19
612
INSERT INTO t1 (col1) VALUES(-2147483649);
20
--error ER_WARN_DATA_OUT_OF_RANGE
21
614
INSERT INTO t1 (col1) VALUES(2147643648);
22
--error ER_WARN_DATA_OUT_OF_RANGE
616
INSERT INTO t1 (col2) VALUES(-1);
618
INSERT INTO t1 (col2) VALUES(4294967296);
23
620
INSERT INTO t1 (col1) VALUES('-2147483649');
24
--error ER_WARN_DATA_OUT_OF_RANGE
25
622
INSERT INTO t1 (col1) VALUES('2147643648');
26
--error ER_WARN_DATA_OUT_OF_RANGE
624
INSERT INTO t1 (col2) VALUES('-1');
626
INSERT INTO t1 (col2) VALUES('4294967296');
27
628
INSERT INTO t1 (col1) VALUES(-2147483649.0);
28
--error ER_WARN_DATA_OUT_OF_RANGE
29
630
INSERT INTO t1 (col1) VALUES(2147643648.0);
632
INSERT INTO t1 (col2) VALUES(-1.0);
634
INSERT INTO t1 (col2) VALUES(4294967296.0);
31
--error ER_WARN_DATA_OUT_OF_RANGE
32
637
UPDATE t1 SET col1 = col1 - 50 WHERE col1 < 0;
33
--error ER_DIVISION_BY_ZERO
639
UPDATE t1 SET col2 =col2 + 50 WHERE col2 > 0;
34
641
UPDATE t1 SET col1 =col1 / 0 WHERE col1 > 0;
35
--error ER_DIVISION_BY_ZERO
36
643
UPDATE t1 SET col1= MOD(col1,0) WHERE col1 > 0;
37
--error ER_TRUNCATED_WRONG_VALUE_FOR_FIELD
38
645
INSERT INTO t1 (col1) VALUES ('');
39
--error ER_TRUNCATED_WRONG_VALUE_FOR_FIELD
40
647
INSERT INTO t1 (col1) VALUES ('a59b');
41
--error ER_WARN_DATA_TRUNCATED
42
649
INSERT INTO t1 (col1) VALUES ('1a');
43
650
INSERT IGNORE INTO t1 (col1) VALUES ('2a');
44
--error ER_DIVISION_BY_ZERO
45
INSERT IGNORE INTO t1 values (1/0);
46
INSERT IGNORE INTO t1 values (-2147483649);
47
INSERT IGNORE INTO t1 values (2147643648);
48
INSERT IGNORE INTO t1 values ('-2147483649');
49
INSERT IGNORE INTO t1 values ('2147643648');
50
INSERT IGNORE INTO t1 values (-2147483649.0);
51
INSERT IGNORE INTO t1 values (2147643648.0);
651
INSERT IGNORE INTO t1 values (1/0,1/0);
652
INSERT IGNORE INTO t1 values (-2147483649, -1),(2147643648,4294967296);
653
INSERT IGNORE INTO t1 values ('-2147483649', '-1'),('2147643648','4294967296');
654
INSERT IGNORE INTO t1 values (-2147483649.0, -1.0),(2147643648.0,4294967296.0);
655
UPDATE IGNORE t1 SET col2=1/NULL where col1=0;
56
660
# Note that this doesn't behave 100 % to standard as we rotate
57
661
# integers when it's too big/small (just like C)
59
CREATE TABLE t1 (col1 BIGINT);
60
INSERT INTO t1 VALUES (-9223372036854775808);
61
INSERT INTO t1 VALUES (0);
62
INSERT INTO t1 VALUES (9223372036854775807);
63
INSERT INTO t1 VALUES ('-9223372036854775808');
64
INSERT INTO t1 VALUES ('9223372036854775807');
65
INSERT INTO t1 VALUES (-9223372036854774000.0);
66
INSERT INTO t1 VALUES (9223372036854775700.0);
663
CREATE TABLE t1 (col1 BIGINT, col2 BIGINT UNSIGNED);
664
INSERT INTO t1 VALUES(-9223372036854775808,0),(0,0),(9223372036854775807,18446744073709551615);
665
INSERT INTO t1 VALUES('-9223372036854775808','0'),('9223372036854775807','18446744073709551615');
666
INSERT INTO t1 VALUES(-9223372036854774000.0,0.0),(9223372036854775700.0,1844674407370954000.0);
68
--error ER_WARN_DATA_OUT_OF_RANGE
69
669
INSERT INTO t1 (col1) VALUES(-9223372036854775809);
70
# https://bugs.launchpad.net/drizzle/+bug/316221
71
--error ER_WARN_DATA_OUT_OF_RANGE
72
671
INSERT INTO t1 (col1) VALUES(9223372036854775808);
673
INSERT INTO t1 (col2) VALUES(-1);
74
--error ER_WARN_DATA_OUT_OF_RANGE
676
INSERT INTO t1 (col2) VALUES(18446744073709551616);
75
678
INSERT INTO t1 (col1) VALUES('-9223372036854775809');
76
--error ER_WARN_DATA_OUT_OF_RANGE
77
680
INSERT INTO t1 (col1) VALUES('9223372036854775808');
682
INSERT INTO t1 (col2) VALUES('-1');
684
INSERT INTO t1 (col2) VALUES('18446744073709551616');
79
686
# Note that the following two double numbers are slighty bigger than max/min
80
687
# bigint becasue of rounding errors when converting it to bigint
81
--error ER_WARN_DATA_OUT_OF_RANGE
82
689
INSERT INTO t1 (col1) VALUES(-9223372036854785809.0);
83
--error ER_WARN_DATA_OUT_OF_RANGE
84
691
INSERT INTO t1 (col1) VALUES(9223372036854785808.0);
693
INSERT INTO t1 (col2) VALUES(-1.0);
695
INSERT INTO t1 (col2) VALUES(18446744073709551616.0);
86
697
# The following doesn't give an error as it's done in integer context
87
698
# UPDATE t1 SET col1=col1 - 5000 WHERE col1 < 0;
88
699
# UPDATE t1 SET col2 =col2 + 5000 WHERE col2 > 0;
90
--error ER_DIVISION_BY_ZERO
91
702
UPDATE t1 SET col1 =col1 / 0 WHERE col1 > 0;
92
--error ER_DIVISION_BY_ZERO
93
704
UPDATE t1 SET col1= MOD(col1,0) WHERE col1 > 0;
94
--error ER_TRUNCATED_WRONG_VALUE_FOR_FIELD
95
706
INSERT INTO t1 (col1) VALUES ('');
96
--error ER_TRUNCATED_WRONG_VALUE_FOR_FIELD
97
708
INSERT INTO t1 (col1) VALUES ('a59b');
98
--error ER_WARN_DATA_TRUNCATED
99
710
INSERT INTO t1 (col1) VALUES ('1a');
100
711
INSERT IGNORE INTO t1 (col1) VALUES ('2a');
101
--error ER_DIVISION_BY_ZERO
102
INSERT IGNORE INTO t1 values (1/0);
103
INSERT IGNORE INTO t1 VALUES (-9223372036854775809);
104
INSERT IGNORE INTO t1 VALUES (9223372036854775808);
105
INSERT IGNORE INTO t1 VALUES ('-9223372036854775809');
106
INSERT IGNORE INTO t1 VALUES ('9223372036854775808');
107
INSERT IGNORE INTO t1 VALUES (-9223372036854785809.0);
108
INSERT IGNORE INTO t1 VALUES (9223372036854785808.0);
712
INSERT IGNORE INTO t1 values (1/0,1/0);
713
INSERT IGNORE INTO t1 VALUES(-9223372036854775809,-1),(9223372036854775808,18446744073709551616);
714
INSERT IGNORE INTO t1 VALUES('-9223372036854775809','-1'),('9223372036854775808','18446744073709551616');
715
INSERT IGNORE INTO t1 VALUES(-9223372036854785809.0,-1.0),(9223372036854785808.0,18446744073709551616.0);
716
UPDATE IGNORE t1 SET col2=1/NULL where col1=0;
109
717
SELECT * FROM t1;
112
720
# Test INSERT with NUMERIC
114
722
CREATE TABLE t1 (col1 NUMERIC(4,2));
115
# The following INSERT statements used to look as follows before
116
# the fix for bug#337038 was implemented:
118
# VALUES (10.55),(10.5555),(0),(-10.55),(-10.5555),(11),(1e+01);
119
# Now that decimal truncation gives an error instead of a warning, we will
120
# get an error on certain INSERT statements below about decimal truncation.
122
INSERT INTO t1 VALUES (10.55);
123
# this statement errors due to decimal truncation. The number
124
# used in insertion is chosen to test that this this error does
126
--error ER_WARN_DATA_TRUNCATED
127
INSERT INTO t1 VALUES (10.5555);
128
INSERT INTO t1 VALUES (0);
129
INSERT INTO t1 VALUES (-10.55);
130
# this statement errors due to decimal truncation. The number
131
# used in insertion is chosen to test that this this error does
133
--error ER_WARN_DATA_TRUNCATED
134
INSERT INTO t1 VALUES (-10.5555);
135
INSERT INTO t1 VALUES (11);
136
INSERT INTO t1 VALUES (1e+01);
138
# The following INSERT statements used to look as follows before
139
# the fix for bug#337038 was implemented:
140
# INSERT INTO t1 VALUES ('10.55'),('10.5555'),('-10.55'),('-10.5555'),('11'),('1e+01');
141
# Now that decimal truncation gives an error instead of a warning, we will
142
# get an error on certain INSERT statements below about decimal truncation.
144
INSERT INTO t1 VALUES ('10.55');
145
# this statement errors due to decimal truncation. The number
146
# used in insertion is chosen to test that this this error does
148
--error ER_WARN_DATA_TRUNCATED
149
INSERT INTO t1 VALUES ('10.5555');
150
INSERT INTO t1 VALUES ('-10.55');
151
# this statement errors due to decimal truncation. The number
152
# used in insertion is chosen to test that this error does
154
--error ER_WARN_DATA_TRUNCATED
155
INSERT INTO t1 VALUES ('-10.5555');
156
INSERT INTO t1 VALUES ('11');
157
INSERT INTO t1 VALUES ('1e+01');
723
INSERT INTO t1 VALUES (10.55),(10.5555),(0),(-10.55),(-10.5555),(11),(1e+01);
724
# Note that the +/-10.5555 is inserted as +/-10.55, not +/-10.56 !
725
INSERT INTO t1 VALUES ('10.55'),('10.5555'),('-10.55'),('-10.5555'),('11'),('1e+01');
159
727
# The 2 following inserts should generate a warning, but doesn't yet
160
728
# because NUMERIC works like DECIMAL
161
--error ER_WARN_DATA_OUT_OF_RANGE
162
730
INSERT INTO t1 VALUES (101.55);
163
--error ER_WARN_DATA_OUT_OF_RANGE
164
732
INSERT INTO t1 VALUES (101);
165
--error ER_WARN_DATA_OUT_OF_RANGE
166
734
INSERT INTO t1 VALUES (-101.55);
167
--error ER_WARN_DATA_OUT_OF_RANGE
168
736
INSERT INTO t1 VALUES (1010.55);
169
--error ER_WARN_DATA_OUT_OF_RANGE
170
738
INSERT INTO t1 VALUES (1010);
171
739
# The 2 following inserts should generate a warning, but doesn't yet
172
740
# because NUMERIC works like DECIMAL
173
--error ER_WARN_DATA_OUT_OF_RANGE
174
742
INSERT INTO t1 VALUES ('101.55');
175
--error ER_WARN_DATA_OUT_OF_RANGE
176
744
INSERT INTO t1 VALUES ('101');
177
--error ER_WARN_DATA_OUT_OF_RANGE
178
746
INSERT INTO t1 VALUES ('-101.55');
179
--error ER_WARN_DATA_OUT_OF_RANGE
180
748
INSERT INTO t1 VALUES ('-1010.55');
181
--error ER_WARN_DATA_OUT_OF_RANGE
182
750
INSERT INTO t1 VALUES ('-100E+1');
183
--error ER_TRUNCATED_WRONG_VALUE_FOR_FIELD
184
752
INSERT INTO t1 VALUES ('-100E');
185
--error ER_WARN_DATA_OUT_OF_RANGE
186
754
UPDATE t1 SET col1 =col1 * 50000 WHERE col1 =11;
187
--error ER_DIVISION_BY_ZERO
188
756
UPDATE t1 SET col1 =col1 / 0 WHERE col1 > 0;
189
--error ER_DIVISION_BY_ZERO
190
758
UPDATE t1 SET col1= MOD(col1,0) WHERE col1 > 0;
191
#--error ER_WARN_DATA_TRUNCATED
192
--error ER_TRUNCATED_WRONG_VALUE_FOR_FIELD
193
761
INSERT INTO t1 (col1) VALUES ('');
194
#--error ER_WARN_DATA_TRUNCATED
195
--error ER_TRUNCATED_WRONG_VALUE_FOR_FIELD
196
764
INSERT INTO t1 (col1) VALUES ('a59b');
197
--error ER_TRUNCATED_WRONG_VALUE_FOR_FIELD
198
766
INSERT INTO t1 (col1) VALUES ('1a');
199
767
INSERT IGNORE INTO t1 (col1) VALUES ('2a');
200
--error ER_DIVISION_BY_ZERO
201
768
INSERT IGNORE INTO t1 values (1/0);
202
INSERT IGNORE INTO t1 VALUES (1000);
203
INSERT IGNORE INTO t1 VALUES (-1000);
204
INSERT IGNORE INTO t1 VALUES ('1000');
205
INSERT IGNORE INTO t1 VALUES ('-1000');
206
INSERT IGNORE INTO t1 VALUES (1000.0);
207
INSERT IGNORE INTO t1 VALUES (-1000.0);
769
INSERT IGNORE INTO t1 VALUES(1000),(-1000);
770
INSERT IGNORE INTO t1 VALUES('1000'),('-1000');
771
INSERT IGNORE INTO t1 VALUES(1000.0),(-1000.0);
208
772
UPDATE IGNORE t1 SET col1=1/NULL where col1=0;
776
# Test INSERT with FLOAT
778
CREATE TABLE t1 (col1 FLOAT, col2 FLOAT UNSIGNED);
779
INSERT INTO t1 VALUES (-1.1E-37,0),(+3.4E+38,+3.4E+38);
780
INSERT INTO t1 VALUES ('-1.1E-37',0),('+3.4E+38','+3.4E+38');
781
# We don't give warnings for underflow
782
INSERT INTO t1 (col1) VALUES (3E-46);
784
INSERT INTO t1 (col1) VALUES (+3.4E+39);
786
INSERT INTO t1 (col2) VALUES (-1.1E-3);
788
INSERT INTO t1 (col1) VALUES ('+3.4E+39');
790
INSERT INTO t1 (col2) VALUES ('-1.1E-3');
792
UPDATE t1 SET col1 =col1 * 5000 WHERE col1 > 0;
794
UPDATE t1 SET col2 =col2 / 0 WHERE col2 > 0;
796
UPDATE t1 SET col2= MOD(col2,0) WHERE col2 > 0;
798
INSERT INTO t1 (col1) VALUES ('');
800
INSERT INTO t1 (col1) VALUES ('a59b');
802
INSERT INTO t1 (col1) VALUES ('1a');
803
INSERT IGNORE INTO t1 (col1) VALUES ('2a');
804
INSERT IGNORE INTO t1 (col1) VALUES (1/0);
805
INSERT IGNORE INTO t1 VALUES (+3.4E+39,-3.4E+39);
806
INSERT IGNORE INTO t1 VALUES ('+3.4E+39','-3.4E+39');
810
# Test INSERT with DOUBLE
812
CREATE TABLE t1 (col1 DOUBLE PRECISION, col2 DOUBLE PRECISION UNSIGNED);
813
INSERT INTO t1 VALUES (-2.2E-307,0),(2E-307,0),(+1.7E+308,+1.7E+308);
814
INSERT INTO t1 VALUES ('-2.2E-307',0),('-2E-307',0),('+1.7E+308','+1.7E+308');
815
# We don't give warnings for underflow
816
INSERT INTO t1 (col1) VALUES (-2.2E-330);
818
INSERT INTO t1 (col1) VALUES (+1.7E+309);
820
INSERT INTO t1 (col2) VALUES (-1.1E-3);
822
INSERT INTO t1 (col1) VALUES ('+1.8E+309');
824
INSERT INTO t1 (col2) VALUES ('-1.2E-3');
825
UPDATE t1 SET col1 =col1 * 5000 WHERE col1 > 0;
827
UPDATE t1 SET col2 =col2 / 0 WHERE col2 > 0;
829
UPDATE t1 SET col2= MOD(col2,0) WHERE col2 > 0;
831
INSERT INTO t1 (col1) VALUES ('');
833
INSERT INTO t1 (col1) VALUES ('a59b');
835
INSERT INTO t1 (col1) VALUES ('1a');
836
INSERT IGNORE INTO t1 (col1) VALUES ('2a');
837
INSERT IGNORE INTO t1 (col1) values (1/0);
839
INSERT IGNORE INTO t1 VALUES (+1.9E+309,-1.9E+309);
840
INSERT IGNORE INTO t1 VALUES ('+2.0E+309','-2.0E+309');
842
--replace_result -0 0 1.7976931348623e+308 1.79769313486232e+308
210
843
SELECT * FROM t1;
213
846
# Testing INSERT with CHAR/VARCHAR
215
848
CREATE TABLE t1 (col1 CHAR(5), col2 VARCHAR(6));
216
INSERT INTO t1 VALUES ('hello', 'hello');
217
INSERT INTO t1 VALUES ('he', 'he');
218
--error ER_DATA_TOO_LONG
219
INSERT INTO t1 VALUES ('hello ', 'hello ');
220
--error ER_DATA_TOO_LONG
849
INSERT INTO t1 VALUES ('hello', 'hello'),('he', 'he'),('hello ', 'hello ');
221
851
INSERT INTO t1 (col1) VALUES ('hellobob');
222
--error ER_DATA_TOO_LONG
223
853
INSERT INTO t1 (col2) VALUES ('hellobob');
224
--error ER_DATA_TOO_LONG
225
854
INSERT INTO t1 (col2) VALUES ('hello ');
226
--error ER_DATA_TOO_LONG
227
856
UPDATE t1 SET col1 ='hellobob' WHERE col1 ='he';
228
--error ER_DATA_TOO_LONG
229
858
UPDATE t1 SET col2 ='hellobob' WHERE col2 ='he';
230
859
INSERT IGNORE INTO t1 VALUES ('hellobob', 'hellobob');
231
860
UPDATE IGNORE t1 SET col2 ='hellotrudy' WHERE col2 ='he';
233
861
SELECT * FROM t1;
236
864
# Testing INSERT with ENUM
238
866
CREATE TABLE t1 (col1 enum('red','blue','green'));
239
INSERT INTO t1 VALUES ('red');
240
INSERT INTO t1 VALUES ('blue');
241
INSERT INTO t1 VALUES ('green');
242
--error ER_INVALID_ENUM_VALUE # Bad enum
867
INSERT INTO t1 VALUES ('red'),('blue'),('green');
243
869
INSERT INTO t1 (col1) VALUES ('yellow');
244
--error ER_INVALID_ENUM_VALUE # Bad enum
245
871
INSERT INTO t1 (col1) VALUES ('redd');
246
--error ER_INVALID_ENUM_VALUE # Bad enum
247
873
INSERT INTO t1 VALUES ('');
248
--error ER_INVALID_ENUM_VALUE # Bad enum
249
875
UPDATE t1 SET col1 ='yellow' WHERE col1 ='green';
250
--error ER_INVALID_ENUM_VALUE # Bad enum
251
876
INSERT IGNORE INTO t1 VALUES ('yellow');
252
--error ER_INVALID_ENUM_VALUE # Bad enum
253
877
UPDATE IGNORE t1 SET col1 ='yellow' WHERE col1 ='blue';
254
878
SELECT * FROM t1;