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