add PRAGMA cipher_memory_security to control settings; lock/unlock memory in manager
[sqlcipher.git] / test / notnull.test
blob23fd33d4bade6ee7c6f200a8c2da9b582cc2668e
1 # 2002 January 29
3 # The author disclaims copyright to this source code.  In place of
4 # a legal notice, here is a blessing:
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.
10 #***********************************************************************
11 # This file implements regression tests for SQLite library.
13 # This file implements tests for the NOT NULL constraint.
15 # $Id: notnull.test,v 1.4 2006/01/17 09:35:02 danielk1977 Exp $
17 set testdir [file dirname $argv0]
18 source $testdir/tester.tcl
20 ifcapable !conflict {
21   finish_test
22   return
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 {NOT NULL constraint failed: t1.a}}
51 verify_ex_errcode notnull-1.2b SQLITE_CONSTRAINT_NOTNULL
52 do_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 {}}
59 do_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}}
66 verify_ex_errcode notnull-1.4b SQLITE_CONSTRAINT_NOTNULL
67 do_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}}
74 verify_ex_errcode notnull-1.5b SQLITE_CONSTRAINT_NOTNULL
75 do_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}}
82 do_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}}
89 do_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}}
96 do_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}}
103 do_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}}
110 verify_ex_errcode notnull-1.10b SQLITE_CONSTRAINT_NOTNULL
111 do_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 {}}
118 do_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}}
125 do_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}}
132 do_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 {}}
139 do_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}}
146 do_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}}
153 verify_ex_errcode notnull-1.16b SQLITE_CONSTRAINT_NOTNULL
154 do_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}}
161 verify_ex_errcode notnull-1.17b SQLITE_CONSTRAINT_NOTNULL
162 do_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}}
169 do_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}}
176 do_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}}
183 verify_ex_errcode notnull-1.20b SQLITE_CONSTRAINT_NOTNULL
184 do_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}}
192 do_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}}
200 verify_ex_errcode notnull-2.1b SQLITE_CONSTRAINT_NOTNULL
201 do_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}}
209 verify_ex_errcode notnull-2.2b SQLITE_CONSTRAINT_NOTNULL
210 do_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}}
218 do_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}}
226 verify_ex_errcode notnull-2.4b SQLITE_CONSTRAINT_NOTNULL
227 do_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}}
235 verify_ex_errcode notnull-2.6b SQLITE_CONSTRAINT_NOTNULL
236 do_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}}
244 do_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}}
252 do_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}}
260 do_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}}
268 do_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}}
276 verify_ex_errcode notnull-2.10b SQLITE_CONSTRAINT_NOTNULL
278 do_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 } {}
288 do_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}}
295 do_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}}
302 verify_ex_errcode notnull-3.2b SQLITE_CONSTRAINT_NOTNULL
303 do_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 {}}
310 do_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}}
317 verify_ex_errcode notnull-3.4b SQLITE_CONSTRAINT_NOTNULL
318 do_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}}
325 verify_ex_errcode notnull-3.5b SQLITE_CONSTRAINT_NOTNULL
326 do_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}}
333 do_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}}
340 do_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}}
347 do_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}}
354 do_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}}
361 verify_ex_errcode notnull-3.10b SQLITE_CONSTRAINT_NOTNULL
362 do_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 {}}
369 do_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}}
376 do_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}}
383 do_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 {}}
390 do_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}}
397 do_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}}
404 verify_ex_errcode notnull-3.16b SQLITE_CONSTRAINT_NOTNULL
405 do_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}}
412 verify_ex_errcode notnull-3.17b SQLITE_CONSTRAINT_NOTNULL
413 do_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}}
420 do_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}}
427 do_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}}
434 verify_ex_errcode notnull-3.20b SQLITE_CONSTRAINT_NOTNULL
435 do_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}}
443 do_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}}
451 verify_ex_errcode notnull-4.1b SQLITE_CONSTRAINT_NOTNULL
452 do_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}}
460 verify_ex_errcode notnull-4.2b SQLITE_CONSTRAINT_NOTNULL
461 do_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}}
469 do_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}}
477 verify_ex_errcode notnull-4.4b SQLITE_CONSTRAINT_NOTNULL
478 do_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}}
486 verify_ex_errcode notnull-4.5b SQLITE_CONSTRAINT_NOTNULL
487 do_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}}
495 do_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}}
503 do_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}}
511 do_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}}
519 do_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}}
527 verify_ex_errcode notnull-4.10b SQLITE_CONSTRAINT_NOTNULL
529 # Test that bug 29ab7be99f is fixed.
531 do_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 }  {}
540 do_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}}
546 verify_ex_errcode notnull-5.2b SQLITE_CONSTRAINT_NOTNULL
547 do_test notnull-5.3 {
548   execsql { SELECT * FROM t1 }
549 } {1 2}
550 do_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}}
559 verify_ex_errcode notnull-5.4b SQLITE_CONSTRAINT_NOTNULL
560 do_test notnull-5.5 {
561   execsql { SELECT * FROM t1 }
562 } {1 2}
564 finish_test