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