xref: /sqlite-3.40.0/test/notnull.test (revision 7aa3ebee)
1# 2002 January 29
2#
3# The author disclaims copyright to this source code.  In place of
4# a legal notice, here is a blessing:
5#
6#    May you do good and not evil.
7#    May you find forgiveness for yourself and forgive others.
8#    May you share freely, never taking more than you give.
9#
10#***********************************************************************
11# This file implements regression tests for SQLite library.
12#
13# This file implements tests for the NOT NULL constraint.
14#
15# $Id: notnull.test,v 1.4 2006/01/17 09:35:02 danielk1977 Exp $
16
17set testdir [file dirname $argv0]
18source $testdir/tester.tcl
19
20ifcapable !conflict {
21  finish_test
22  return
23}
24
25do_test notnull-1.0 {
26  execsql {
27    CREATE TABLE t1 (
28      a NOT NULL,
29      b NOT NULL DEFAULT 5,
30      c NOT NULL ON CONFLICT REPLACE DEFAULT 6,
31      d NOT NULL ON CONFLICT IGNORE DEFAULT 7,
32      e NOT NULL ON CONFLICT ABORT DEFAULT 8
33    );
34    SELECT * FROM t1;
35  }
36} {}
37do_test notnull-1.1 {
38  catchsql {
39    DELETE FROM t1;
40    INSERT INTO t1(a,b,c,d,e) VALUES(1,2,3,4,5);
41    SELECT * FROM t1 order by a;
42  }
43} {0 {1 2 3 4 5}}
44do_test notnull-1.2 {
45  catchsql {
46    DELETE FROM t1;
47    INSERT INTO t1(b,c,d,e) VALUES(2,3,4,5);
48    SELECT * FROM t1 order by a;
49  }
50} {1 {NOT NULL constraint failed: t1.a}}
51verify_ex_errcode notnull-1.2b SQLITE_CONSTRAINT_NOTNULL
52do_test notnull-1.3 {
53  catchsql {
54    DELETE FROM t1;
55    INSERT OR IGNORE INTO t1(b,c,d,e) VALUES(2,3,4,5);
56    SELECT * FROM t1 order by a;
57  }
58} {0 {}}
59do_test notnull-1.4 {
60  catchsql {
61    DELETE FROM t1;
62    INSERT OR REPLACE INTO t1(b,c,d,e) VALUES(2,3,4,5);
63    SELECT * FROM t1 order by a;
64  }
65} {1 {NOT NULL constraint failed: t1.a}}
66verify_ex_errcode notnull-1.4b SQLITE_CONSTRAINT_NOTNULL
67do_test notnull-1.5 {
68  catchsql {
69    DELETE FROM t1;
70    INSERT OR ABORT INTO t1(b,c,d,e) VALUES(2,3,4,5);
71    SELECT * FROM t1 order by a;
72  }
73} {1 {NOT NULL constraint failed: t1.a}}
74verify_ex_errcode notnull-1.5b SQLITE_CONSTRAINT_NOTNULL
75do_test notnull-1.6 {
76  catchsql {
77    DELETE FROM t1;
78    INSERT INTO t1(a,c,d,e) VALUES(1,3,4,5);
79    SELECT * FROM t1 order by a;
80  }
81} {0 {1 5 3 4 5}}
82do_test notnull-1.7 {
83  catchsql {
84    DELETE FROM t1;
85    INSERT OR IGNORE INTO t1(a,c,d,e) VALUES(1,3,4,5);
86    SELECT * FROM t1 order by a;
87  }
88} {0 {1 5 3 4 5}}
89do_test notnull-1.8 {
90  catchsql {
91    DELETE FROM t1;
92    INSERT OR REPLACE INTO t1(a,c,d,e) VALUES(1,3,4,5);
93    SELECT * FROM t1 order by a;
94  }
95} {0 {1 5 3 4 5}}
96do_test notnull-1.9 {
97  catchsql {
98    DELETE FROM t1;
99    INSERT OR ABORT INTO t1(a,c,d,e) VALUES(1,3,4,5);
100    SELECT * FROM t1 order by a;
101  }
102} {0 {1 5 3 4 5}}
103do_test notnull-1.10 {
104  catchsql {
105    DELETE FROM t1;
106    INSERT INTO t1(a,b,c,d,e) VALUES(1,null,3,4,5);
107    SELECT * FROM t1 order by a;
108  }
109} {1 {NOT NULL constraint failed: t1.b}}
110verify_ex_errcode notnull-1.10b SQLITE_CONSTRAINT_NOTNULL
111do_test notnull-1.11 {
112  catchsql {
113    DELETE FROM t1;
114    INSERT OR IGNORE INTO t1(a,b,c,d,e) VALUES(1,null,3,4,5);
115    SELECT * FROM t1 order by a;
116  }
117} {0 {}}
118do_test notnull-1.12 {
119  catchsql {
120    DELETE FROM t1;
121    INSERT OR REPLACE INTO t1(a,b,c,d,e) VALUES(1,null,3,4,5);
122    SELECT * FROM t1 order by a;
123  }
124} {0 {1 5 3 4 5}}
125do_test notnull-1.13 {
126  catchsql {
127    DELETE FROM t1;
128    INSERT INTO t1(a,b,c,d,e) VALUES(1,2,null,4,5);
129    SELECT * FROM t1 order by a;
130  }
131} {0 {1 2 6 4 5}}
132do_test notnull-1.14 {
133  catchsql {
134    DELETE FROM t1;
135    INSERT OR IGNORE INTO t1(a,b,c,d,e) VALUES(1,2,null,4,5);
136    SELECT * FROM t1 order by a;
137  }
138} {0 {}}
139do_test notnull-1.15 {
140  catchsql {
141    DELETE FROM t1;
142    INSERT OR REPLACE INTO t1(a,b,c,d,e) VALUES(1,2,null,4,5);
143    SELECT * FROM t1 order by a;
144  }
145} {0 {1 2 6 4 5}}
146do_test notnull-1.16 {
147  catchsql {
148    DELETE FROM t1;
149    INSERT OR ABORT INTO t1(a,b,c,d,e) VALUES(1,2,null,4,5);
150    SELECT * FROM t1 order by a;
151  }
152} {1 {NOT NULL constraint failed: t1.c}}
153verify_ex_errcode notnull-1.16b SQLITE_CONSTRAINT_NOTNULL
154do_test notnull-1.17 {
155  catchsql {
156    DELETE FROM t1;
157    INSERT OR ABORT INTO t1(a,b,c,d,e) VALUES(1,2,3,null,5);
158    SELECT * FROM t1 order by a;
159  }
160} {1 {NOT NULL constraint failed: t1.d}}
161verify_ex_errcode notnull-1.17b SQLITE_CONSTRAINT_NOTNULL
162do_test notnull-1.18 {
163  catchsql {
164    DELETE FROM t1;
165    INSERT OR ABORT INTO t1(a,b,c,e) VALUES(1,2,3,5);
166    SELECT * FROM t1 order by a;
167  }
168} {0 {1 2 3 7 5}}
169do_test notnull-1.19 {
170  catchsql {
171    DELETE FROM t1;
172    INSERT INTO t1(a,b,c,d) VALUES(1,2,3,4);
173    SELECT * FROM t1 order by a;
174  }
175} {0 {1 2 3 4 8}}
176do_test notnull-1.20 {
177  catchsql {
178    DELETE FROM t1;
179    INSERT INTO t1(a,b,c,d,e) VALUES(1,2,3,4,null);
180    SELECT * FROM t1 order by a;
181  }
182} {1 {NOT NULL constraint failed: t1.e}}
183verify_ex_errcode notnull-1.20b SQLITE_CONSTRAINT_NOTNULL
184do_test notnull-1.21 {
185  catchsql {
186    DELETE FROM t1;
187    INSERT OR REPLACE INTO t1(e,d,c,b,a) VALUES(1,2,3,null,5);
188    SELECT * FROM t1 order by a;
189  }
190} {0 {5 5 3 2 1}}
191
192do_test notnull-2.1 {
193  catchsql {
194    DELETE FROM t1;
195    INSERT INTO t1 VALUES(1,2,3,4,5);
196    UPDATE t1 SET a=null;
197    SELECT * FROM t1 ORDER BY a;
198  }
199} {1 {NOT NULL constraint failed: t1.a}}
200verify_ex_errcode notnull-2.1b SQLITE_CONSTRAINT_NOTNULL
201do_test notnull-2.2 {
202  catchsql {
203    DELETE FROM t1;
204    INSERT INTO t1 VALUES(1,2,3,4,5);
205    UPDATE OR REPLACE t1 SET a=null;
206    SELECT * FROM t1 ORDER BY a;
207  }
208} {1 {NOT NULL constraint failed: t1.a}}
209verify_ex_errcode notnull-2.2b SQLITE_CONSTRAINT_NOTNULL
210do_test notnull-2.3 {
211  catchsql {
212    DELETE FROM t1;
213    INSERT INTO t1 VALUES(1,2,3,4,5);
214    UPDATE OR IGNORE t1 SET a=null;
215    SELECT * FROM t1 ORDER BY a;
216  }
217} {0 {1 2 3 4 5}}
218do_test notnull-2.4 {
219  catchsql {
220    DELETE FROM t1;
221    INSERT INTO t1 VALUES(1,2,3,4,5);
222    UPDATE OR ABORT t1 SET a=null;
223    SELECT * FROM t1 ORDER BY a;
224  }
225} {1 {NOT NULL constraint failed: t1.a}}
226verify_ex_errcode notnull-2.4b SQLITE_CONSTRAINT_NOTNULL
227do_test notnull-2.5 {
228  catchsql {
229    DELETE FROM t1;
230    INSERT INTO t1 VALUES(1,2,3,4,5);
231    UPDATE t1 SET b=null;
232    SELECT * FROM t1 ORDER BY a;
233  }
234} {1 {NOT NULL constraint failed: t1.b}}
235verify_ex_errcode notnull-2.6b SQLITE_CONSTRAINT_NOTNULL
236do_test notnull-2.6 {
237  catchsql {
238    DELETE FROM t1;
239    INSERT INTO t1 VALUES(1,2,3,4,5);
240    UPDATE OR REPLACE t1 SET b=null, d=e, e=d;
241    SELECT * FROM t1 ORDER BY a;
242  }
243} {0 {1 5 3 5 4}}
244do_test notnull-2.7 {
245  catchsql {
246    DELETE FROM t1;
247    INSERT INTO t1 VALUES(1,2,3,4,5);
248    UPDATE OR IGNORE t1 SET b=null, d=e, e=d;
249    SELECT * FROM t1 ORDER BY a;
250  }
251} {0 {1 2 3 4 5}}
252do_test notnull-2.8 {
253  catchsql {
254    DELETE FROM t1;
255    INSERT INTO t1 VALUES(1,2,3,4,5);
256    UPDATE t1 SET c=null, d=e, e=d;
257    SELECT * FROM t1 ORDER BY a;
258  }
259} {0 {1 2 6 5 4}}
260do_test notnull-2.9 {
261  catchsql {
262    DELETE FROM t1;
263    INSERT INTO t1 VALUES(1,2,3,4,5);
264    UPDATE t1 SET d=null, a=b, b=a;
265    SELECT * FROM t1 ORDER BY a;
266  }
267} {0 {1 2 3 4 5}}
268do_test notnull-2.10 {
269  catchsql {
270    DELETE FROM t1;
271    INSERT INTO t1 VALUES(1,2,3,4,5);
272    UPDATE t1 SET e=null, a=b, b=a;
273    SELECT * FROM t1 ORDER BY a;
274  }
275} {1 {NOT NULL constraint failed: t1.e}}
276verify_ex_errcode notnull-2.10b SQLITE_CONSTRAINT_NOTNULL
277
278do_test notnull-3.0 {
279  execsql {
280    CREATE INDEX t1a ON t1(a);
281    CREATE INDEX t1b ON t1(b);
282    CREATE INDEX t1c ON t1(c);
283    CREATE INDEX t1d ON t1(d);
284    CREATE INDEX t1e ON t1(e);
285    CREATE INDEX t1abc ON t1(a,b,c);
286  }
287} {}
288do_test notnull-3.1 {
289  catchsql {
290    DELETE FROM t1;
291    INSERT INTO t1(a,b,c,d,e) VALUES(1,2,3,4,5);
292    SELECT * FROM t1 order by a;
293  }
294} {0 {1 2 3 4 5}}
295do_test notnull-3.2 {
296  catchsql {
297    DELETE FROM t1;
298    INSERT INTO t1(b,c,d,e) VALUES(2,3,4,5);
299    SELECT * FROM t1 order by a;
300  }
301} {1 {NOT NULL constraint failed: t1.a}}
302verify_ex_errcode notnull-3.2b SQLITE_CONSTRAINT_NOTNULL
303do_test notnull-3.3 {
304  catchsql {
305    DELETE FROM t1;
306    INSERT OR IGNORE INTO t1(b,c,d,e) VALUES(2,3,4,5);
307    SELECT * FROM t1 order by a;
308  }
309} {0 {}}
310do_test notnull-3.4 {
311  catchsql {
312    DELETE FROM t1;
313    INSERT OR REPLACE INTO t1(b,c,d,e) VALUES(2,3,4,5);
314    SELECT * FROM t1 order by a;
315  }
316} {1 {NOT NULL constraint failed: t1.a}}
317verify_ex_errcode notnull-3.4b SQLITE_CONSTRAINT_NOTNULL
318do_test notnull-3.5 {
319  catchsql {
320    DELETE FROM t1;
321    INSERT OR ABORT INTO t1(b,c,d,e) VALUES(2,3,4,5);
322    SELECT * FROM t1 order by a;
323  }
324} {1 {NOT NULL constraint failed: t1.a}}
325verify_ex_errcode notnull-3.5b SQLITE_CONSTRAINT_NOTNULL
326do_test notnull-3.6 {
327  catchsql {
328    DELETE FROM t1;
329    INSERT INTO t1(a,c,d,e) VALUES(1,3,4,5);
330    SELECT * FROM t1 order by a;
331  }
332} {0 {1 5 3 4 5}}
333do_test notnull-3.7 {
334  catchsql {
335    DELETE FROM t1;
336    INSERT OR IGNORE INTO t1(a,c,d,e) VALUES(1,3,4,5);
337    SELECT * FROM t1 order by a;
338  }
339} {0 {1 5 3 4 5}}
340do_test notnull-3.8 {
341  catchsql {
342    DELETE FROM t1;
343    INSERT OR REPLACE INTO t1(a,c,d,e) VALUES(1,3,4,5);
344    SELECT * FROM t1 order by a;
345  }
346} {0 {1 5 3 4 5}}
347do_test notnull-3.9 {
348  catchsql {
349    DELETE FROM t1;
350    INSERT OR ABORT INTO t1(a,c,d,e) VALUES(1,3,4,5);
351    SELECT * FROM t1 order by a;
352  }
353} {0 {1 5 3 4 5}}
354do_test notnull-3.10 {
355  catchsql {
356    DELETE FROM t1;
357    INSERT INTO t1(a,b,c,d,e) VALUES(1,null,3,4,5);
358    SELECT * FROM t1 order by a;
359  }
360} {1 {NOT NULL constraint failed: t1.b}}
361verify_ex_errcode notnull-3.10b SQLITE_CONSTRAINT_NOTNULL
362do_test notnull-3.11 {
363  catchsql {
364    DELETE FROM t1;
365    INSERT OR IGNORE INTO t1(a,b,c,d,e) VALUES(1,null,3,4,5);
366    SELECT * FROM t1 order by a;
367  }
368} {0 {}}
369do_test notnull-3.12 {
370  catchsql {
371    DELETE FROM t1;
372    INSERT OR REPLACE INTO t1(a,b,c,d,e) VALUES(1,null,3,4,5);
373    SELECT * FROM t1 order by a;
374  }
375} {0 {1 5 3 4 5}}
376do_test notnull-3.13 {
377  catchsql {
378    DELETE FROM t1;
379    INSERT INTO t1(a,b,c,d,e) VALUES(1,2,null,4,5);
380    SELECT * FROM t1 order by a;
381  }
382} {0 {1 2 6 4 5}}
383do_test notnull-3.14 {
384  catchsql {
385    DELETE FROM t1;
386    INSERT OR IGNORE INTO t1(a,b,c,d,e) VALUES(1,2,null,4,5);
387    SELECT * FROM t1 order by a;
388  }
389} {0 {}}
390do_test notnull-3.15 {
391  catchsql {
392    DELETE FROM t1;
393    INSERT OR REPLACE INTO t1(a,b,c,d,e) VALUES(1,2,null,4,5);
394    SELECT * FROM t1 order by a;
395  }
396} {0 {1 2 6 4 5}}
397do_test notnull-3.16 {
398  catchsql {
399    DELETE FROM t1;
400    INSERT OR ABORT INTO t1(a,b,c,d,e) VALUES(1,2,null,4,5);
401    SELECT * FROM t1 order by a;
402  }
403} {1 {NOT NULL constraint failed: t1.c}}
404verify_ex_errcode notnull-3.16b SQLITE_CONSTRAINT_NOTNULL
405do_test notnull-3.17 {
406  catchsql {
407    DELETE FROM t1;
408    INSERT OR ABORT INTO t1(a,b,c,d,e) VALUES(1,2,3,null,5);
409    SELECT * FROM t1 order by a;
410  }
411} {1 {NOT NULL constraint failed: t1.d}}
412verify_ex_errcode notnull-3.17b SQLITE_CONSTRAINT_NOTNULL
413do_test notnull-3.18 {
414  catchsql {
415    DELETE FROM t1;
416    INSERT OR ABORT INTO t1(a,b,c,e) VALUES(1,2,3,5);
417    SELECT * FROM t1 order by a;
418  }
419} {0 {1 2 3 7 5}}
420do_test notnull-3.19 {
421  catchsql {
422    DELETE FROM t1;
423    INSERT INTO t1(a,b,c,d) VALUES(1,2,3,4);
424    SELECT * FROM t1 order by a;
425  }
426} {0 {1 2 3 4 8}}
427do_test notnull-3.20 {
428  catchsql {
429    DELETE FROM t1;
430    INSERT INTO t1(a,b,c,d,e) VALUES(1,2,3,4,null);
431    SELECT * FROM t1 order by a;
432  }
433} {1 {NOT NULL constraint failed: t1.e}}
434verify_ex_errcode notnull-3.20b SQLITE_CONSTRAINT_NOTNULL
435do_test notnull-3.21 {
436  catchsql {
437    DELETE FROM t1;
438    INSERT OR REPLACE INTO t1(e,d,c,b,a) VALUES(1,2,3,null,5);
439    SELECT * FROM t1 order by a;
440  }
441} {0 {5 5 3 2 1}}
442
443do_test notnull-4.1 {
444  catchsql {
445    DELETE FROM t1;
446    INSERT INTO t1 VALUES(1,2,3,4,5);
447    UPDATE t1 SET a=null;
448    SELECT * FROM t1 ORDER BY a;
449  }
450} {1 {NOT NULL constraint failed: t1.a}}
451verify_ex_errcode notnull-4.1b SQLITE_CONSTRAINT_NOTNULL
452do_test notnull-4.2 {
453  catchsql {
454    DELETE FROM t1;
455    INSERT INTO t1 VALUES(1,2,3,4,5);
456    UPDATE OR REPLACE t1 SET a=null;
457    SELECT * FROM t1 ORDER BY a;
458  }
459} {1 {NOT NULL constraint failed: t1.a}}
460verify_ex_errcode notnull-4.2b SQLITE_CONSTRAINT_NOTNULL
461do_test notnull-4.3 {
462  catchsql {
463    DELETE FROM t1;
464    INSERT INTO t1 VALUES(1,2,3,4,5);
465    UPDATE OR IGNORE t1 SET a=null;
466    SELECT * FROM t1 ORDER BY a;
467  }
468} {0 {1 2 3 4 5}}
469do_test notnull-4.4 {
470  catchsql {
471    DELETE FROM t1;
472    INSERT INTO t1 VALUES(1,2,3,4,5);
473    UPDATE OR ABORT t1 SET a=null;
474    SELECT * FROM t1 ORDER BY a;
475  }
476} {1 {NOT NULL constraint failed: t1.a}}
477verify_ex_errcode notnull-4.4b SQLITE_CONSTRAINT_NOTNULL
478do_test notnull-4.5 {
479  catchsql {
480    DELETE FROM t1;
481    INSERT INTO t1 VALUES(1,2,3,4,5);
482    UPDATE t1 SET b=null;
483    SELECT * FROM t1 ORDER BY a;
484  }
485} {1 {NOT NULL constraint failed: t1.b}}
486verify_ex_errcode notnull-4.5b SQLITE_CONSTRAINT_NOTNULL
487do_test notnull-4.6 {
488  catchsql {
489    DELETE FROM t1;
490    INSERT INTO t1 VALUES(1,2,3,4,5);
491    UPDATE OR REPLACE t1 SET b=null, d=e, e=d;
492    SELECT * FROM t1 ORDER BY a;
493  }
494} {0 {1 5 3 5 4}}
495do_test notnull-4.7 {
496  catchsql {
497    DELETE FROM t1;
498    INSERT INTO t1 VALUES(1,2,3,4,5);
499    UPDATE OR IGNORE t1 SET b=null, d=e, e=d;
500    SELECT * FROM t1 ORDER BY a;
501  }
502} {0 {1 2 3 4 5}}
503do_test notnull-4.8 {
504  catchsql {
505    DELETE FROM t1;
506    INSERT INTO t1 VALUES(1,2,3,4,5);
507    UPDATE t1 SET c=null, d=e, e=d;
508    SELECT * FROM t1 ORDER BY a;
509  }
510} {0 {1 2 6 5 4}}
511do_test notnull-4.9 {
512  catchsql {
513    DELETE FROM t1;
514    INSERT INTO t1 VALUES(1,2,3,4,5);
515    UPDATE t1 SET d=null, a=b, b=a;
516    SELECT * FROM t1 ORDER BY a;
517  }
518} {0 {1 2 3 4 5}}
519do_test notnull-4.10 {
520  catchsql {
521    DELETE FROM t1;
522    INSERT INTO t1 VALUES(1,2,3,4,5);
523    UPDATE t1 SET e=null, a=b, b=a;
524    SELECT * FROM t1 ORDER BY a;
525  }
526} {1 {NOT NULL constraint failed: t1.e}}
527verify_ex_errcode notnull-4.10b SQLITE_CONSTRAINT_NOTNULL
528
529# Test that bug 29ab7be99f is fixed.
530#
531do_test notnull-5.1 {
532  execsql {
533    DROP TABLE IF EXISTS t1;
534    CREATE TABLE t1(a, b NOT NULL);
535    CREATE TABLE t2(c, d);
536    INSERT INTO t2 VALUES(3, 4);
537    INSERT INTO t2 VALUES(5, NULL);
538  }
539}  {}
540do_test notnull-5.2 {
541  catchsql {
542    INSERT INTO t1 VALUES(1, 2);
543    INSERT INTO t1 SELECT * FROM t2;
544  }
545} {1 {NOT NULL constraint failed: t1.b}}
546verify_ex_errcode notnull-5.2b SQLITE_CONSTRAINT_NOTNULL
547do_test notnull-5.3 {
548  execsql { SELECT * FROM t1 }
549} {1 2}
550do_test notnull-5.4 {
551  catchsql {
552    DELETE FROM t1;
553    BEGIN;
554      INSERT INTO t1 VALUES(1, 2);
555      INSERT INTO t1 SELECT * FROM t2;
556    COMMIT;
557  }
558} {1 {NOT NULL constraint failed: t1.b}}
559verify_ex_errcode notnull-5.4b SQLITE_CONSTRAINT_NOTNULL
560do_test notnull-5.5 {
561  execsql { SELECT * FROM t1 }
562} {1 2}
563
564finish_test
565