xref: /sqlite-3.40.0/test/notnull.test (revision 6ab91a7a)
1ef6764a1Sdrh# 2002 January 29
2ef6764a1Sdrh#
3ef6764a1Sdrh# The author disclaims copyright to this source code.  In place of
4ef6764a1Sdrh# a legal notice, here is a blessing:
5ef6764a1Sdrh#
6ef6764a1Sdrh#    May you do good and not evil.
7ef6764a1Sdrh#    May you find forgiveness for yourself and forgive others.
8ef6764a1Sdrh#    May you share freely, never taking more than you give.
9ef6764a1Sdrh#
10ef6764a1Sdrh#***********************************************************************
11ef6764a1Sdrh# This file implements regression tests for SQLite library.
12ef6764a1Sdrh#
13ef6764a1Sdrh# This file implements tests for the NOT NULL constraint.
14ef6764a1Sdrh#
153bdca9c9Sdanielk1977# $Id: notnull.test,v 1.4 2006/01/17 09:35:02 danielk1977 Exp $
16ef6764a1Sdrh
17ef6764a1Sdrhset testdir [file dirname $argv0]
18ef6764a1Sdrhsource $testdir/tester.tcl
19ef6764a1Sdrh
203bdca9c9Sdanielk1977ifcapable !conflict {
213bdca9c9Sdanielk1977  finish_test
223bdca9c9Sdanielk1977  return
233bdca9c9Sdanielk1977}
243bdca9c9Sdanielk1977
25ef6764a1Sdrhdo_test notnull-1.0 {
26ef6764a1Sdrh  execsql {
27ef6764a1Sdrh    CREATE TABLE t1 (
28ef6764a1Sdrh      a NOT NULL,
29ef6764a1Sdrh      b NOT NULL DEFAULT 5,
301c92853dSdrh      c NOT NULL ON CONFLICT REPLACE DEFAULT 6,
311c92853dSdrh      d NOT NULL ON CONFLICT IGNORE DEFAULT 7,
321c92853dSdrh      e NOT NULL ON CONFLICT ABORT DEFAULT 8
33ef6764a1Sdrh    );
34ef6764a1Sdrh    SELECT * FROM t1;
35ef6764a1Sdrh  }
36ef6764a1Sdrh} {}
37ef6764a1Sdrhdo_test notnull-1.1 {
38ef6764a1Sdrh  catchsql {
39ef6764a1Sdrh    DELETE FROM t1;
40ef6764a1Sdrh    INSERT INTO t1(a,b,c,d,e) VALUES(1,2,3,4,5);
41ef6764a1Sdrh    SELECT * FROM t1 order by a;
42ef6764a1Sdrh  }
43ef6764a1Sdrh} {0 {1 2 3 4 5}}
44ef6764a1Sdrhdo_test notnull-1.2 {
45ef6764a1Sdrh  catchsql {
46ef6764a1Sdrh    DELETE FROM t1;
47ef6764a1Sdrh    INSERT INTO t1(b,c,d,e) VALUES(2,3,4,5);
48ef6764a1Sdrh    SELECT * FROM t1 order by a;
49ef6764a1Sdrh  }
50f9c8ce3cSdrh} {1 {NOT NULL constraint failed: t1.a}}
51433dccfbSdrhverify_ex_errcode notnull-1.2b SQLITE_CONSTRAINT_NOTNULL
52ef6764a1Sdrhdo_test notnull-1.3 {
53ef6764a1Sdrh  catchsql {
54ef6764a1Sdrh    DELETE FROM t1;
551c92853dSdrh    INSERT OR IGNORE INTO t1(b,c,d,e) VALUES(2,3,4,5);
56ef6764a1Sdrh    SELECT * FROM t1 order by a;
57ef6764a1Sdrh  }
58ef6764a1Sdrh} {0 {}}
59ef6764a1Sdrhdo_test notnull-1.4 {
60ef6764a1Sdrh  catchsql {
61ef6764a1Sdrh    DELETE FROM t1;
621c92853dSdrh    INSERT OR REPLACE INTO t1(b,c,d,e) VALUES(2,3,4,5);
63ef6764a1Sdrh    SELECT * FROM t1 order by a;
64ef6764a1Sdrh  }
65f9c8ce3cSdrh} {1 {NOT NULL constraint failed: t1.a}}
66433dccfbSdrhverify_ex_errcode notnull-1.4b SQLITE_CONSTRAINT_NOTNULL
67ef6764a1Sdrhdo_test notnull-1.5 {
68ef6764a1Sdrh  catchsql {
69ef6764a1Sdrh    DELETE FROM t1;
701c92853dSdrh    INSERT OR ABORT INTO t1(b,c,d,e) VALUES(2,3,4,5);
71ef6764a1Sdrh    SELECT * FROM t1 order by a;
72ef6764a1Sdrh  }
73f9c8ce3cSdrh} {1 {NOT NULL constraint failed: t1.a}}
74433dccfbSdrhverify_ex_errcode notnull-1.5b SQLITE_CONSTRAINT_NOTNULL
75ef6764a1Sdrhdo_test notnull-1.6 {
76ef6764a1Sdrh  catchsql {
77ef6764a1Sdrh    DELETE FROM t1;
78ef6764a1Sdrh    INSERT INTO t1(a,c,d,e) VALUES(1,3,4,5);
79ef6764a1Sdrh    SELECT * FROM t1 order by a;
80ef6764a1Sdrh  }
81ef6764a1Sdrh} {0 {1 5 3 4 5}}
82ef6764a1Sdrhdo_test notnull-1.7 {
83ef6764a1Sdrh  catchsql {
84ef6764a1Sdrh    DELETE FROM t1;
851c92853dSdrh    INSERT OR IGNORE INTO t1(a,c,d,e) VALUES(1,3,4,5);
86ef6764a1Sdrh    SELECT * FROM t1 order by a;
87ef6764a1Sdrh  }
88ef6764a1Sdrh} {0 {1 5 3 4 5}}
89ef6764a1Sdrhdo_test notnull-1.8 {
90ef6764a1Sdrh  catchsql {
91ef6764a1Sdrh    DELETE FROM t1;
921c92853dSdrh    INSERT OR REPLACE INTO t1(a,c,d,e) VALUES(1,3,4,5);
93ef6764a1Sdrh    SELECT * FROM t1 order by a;
94ef6764a1Sdrh  }
95ef6764a1Sdrh} {0 {1 5 3 4 5}}
96ef6764a1Sdrhdo_test notnull-1.9 {
97ef6764a1Sdrh  catchsql {
98ef6764a1Sdrh    DELETE FROM t1;
991c92853dSdrh    INSERT OR ABORT INTO t1(a,c,d,e) VALUES(1,3,4,5);
100ef6764a1Sdrh    SELECT * FROM t1 order by a;
101ef6764a1Sdrh  }
102ef6764a1Sdrh} {0 {1 5 3 4 5}}
103ef6764a1Sdrhdo_test notnull-1.10 {
104ef6764a1Sdrh  catchsql {
105ef6764a1Sdrh    DELETE FROM t1;
106ef6764a1Sdrh    INSERT INTO t1(a,b,c,d,e) VALUES(1,null,3,4,5);
107ef6764a1Sdrh    SELECT * FROM t1 order by a;
108ef6764a1Sdrh  }
109f9c8ce3cSdrh} {1 {NOT NULL constraint failed: t1.b}}
110433dccfbSdrhverify_ex_errcode notnull-1.10b SQLITE_CONSTRAINT_NOTNULL
111ef6764a1Sdrhdo_test notnull-1.11 {
112ef6764a1Sdrh  catchsql {
113ef6764a1Sdrh    DELETE FROM t1;
1141c92853dSdrh    INSERT OR IGNORE INTO t1(a,b,c,d,e) VALUES(1,null,3,4,5);
115ef6764a1Sdrh    SELECT * FROM t1 order by a;
116ef6764a1Sdrh  }
117ef6764a1Sdrh} {0 {}}
118ef6764a1Sdrhdo_test notnull-1.12 {
119ef6764a1Sdrh  catchsql {
120ef6764a1Sdrh    DELETE FROM t1;
1211c92853dSdrh    INSERT OR REPLACE INTO t1(a,b,c,d,e) VALUES(1,null,3,4,5);
122ef6764a1Sdrh    SELECT * FROM t1 order by a;
123ef6764a1Sdrh  }
124ef6764a1Sdrh} {0 {1 5 3 4 5}}
125ef6764a1Sdrhdo_test notnull-1.13 {
126ef6764a1Sdrh  catchsql {
127ef6764a1Sdrh    DELETE FROM t1;
128ef6764a1Sdrh    INSERT INTO t1(a,b,c,d,e) VALUES(1,2,null,4,5);
129ef6764a1Sdrh    SELECT * FROM t1 order by a;
130ef6764a1Sdrh  }
131ef6764a1Sdrh} {0 {1 2 6 4 5}}
132ef6764a1Sdrhdo_test notnull-1.14 {
133ef6764a1Sdrh  catchsql {
134ef6764a1Sdrh    DELETE FROM t1;
1351c92853dSdrh    INSERT OR IGNORE INTO t1(a,b,c,d,e) VALUES(1,2,null,4,5);
136ef6764a1Sdrh    SELECT * FROM t1 order by a;
137ef6764a1Sdrh  }
138ef6764a1Sdrh} {0 {}}
139ef6764a1Sdrhdo_test notnull-1.15 {
140ef6764a1Sdrh  catchsql {
141ef6764a1Sdrh    DELETE FROM t1;
1421c92853dSdrh    INSERT OR REPLACE INTO t1(a,b,c,d,e) VALUES(1,2,null,4,5);
143ef6764a1Sdrh    SELECT * FROM t1 order by a;
144ef6764a1Sdrh  }
145ef6764a1Sdrh} {0 {1 2 6 4 5}}
146ef6764a1Sdrhdo_test notnull-1.16 {
147ef6764a1Sdrh  catchsql {
148ef6764a1Sdrh    DELETE FROM t1;
1491c92853dSdrh    INSERT OR ABORT INTO t1(a,b,c,d,e) VALUES(1,2,null,4,5);
150ef6764a1Sdrh    SELECT * FROM t1 order by a;
151ef6764a1Sdrh  }
152f9c8ce3cSdrh} {1 {NOT NULL constraint failed: t1.c}}
153433dccfbSdrhverify_ex_errcode notnull-1.16b SQLITE_CONSTRAINT_NOTNULL
154ef6764a1Sdrhdo_test notnull-1.17 {
155ef6764a1Sdrh  catchsql {
156ef6764a1Sdrh    DELETE FROM t1;
1571c92853dSdrh    INSERT OR ABORT INTO t1(a,b,c,d,e) VALUES(1,2,3,null,5);
158ef6764a1Sdrh    SELECT * FROM t1 order by a;
159ef6764a1Sdrh  }
160f9c8ce3cSdrh} {1 {NOT NULL constraint failed: t1.d}}
161433dccfbSdrhverify_ex_errcode notnull-1.17b SQLITE_CONSTRAINT_NOTNULL
162ef6764a1Sdrhdo_test notnull-1.18 {
163ef6764a1Sdrh  catchsql {
164ef6764a1Sdrh    DELETE FROM t1;
1651c92853dSdrh    INSERT OR ABORT INTO t1(a,b,c,e) VALUES(1,2,3,5);
166ef6764a1Sdrh    SELECT * FROM t1 order by a;
167ef6764a1Sdrh  }
168ef6764a1Sdrh} {0 {1 2 3 7 5}}
169ef6764a1Sdrhdo_test notnull-1.19 {
170ef6764a1Sdrh  catchsql {
171ef6764a1Sdrh    DELETE FROM t1;
172ef6764a1Sdrh    INSERT INTO t1(a,b,c,d) VALUES(1,2,3,4);
173ef6764a1Sdrh    SELECT * FROM t1 order by a;
174ef6764a1Sdrh  }
175ef6764a1Sdrh} {0 {1 2 3 4 8}}
176ef6764a1Sdrhdo_test notnull-1.20 {
177ef6764a1Sdrh  catchsql {
178ef6764a1Sdrh    DELETE FROM t1;
179ef6764a1Sdrh    INSERT INTO t1(a,b,c,d,e) VALUES(1,2,3,4,null);
180ef6764a1Sdrh    SELECT * FROM t1 order by a;
181ef6764a1Sdrh  }
182f9c8ce3cSdrh} {1 {NOT NULL constraint failed: t1.e}}
183433dccfbSdrhverify_ex_errcode notnull-1.20b SQLITE_CONSTRAINT_NOTNULL
184ef6764a1Sdrhdo_test notnull-1.21 {
185ef6764a1Sdrh  catchsql {
186ef6764a1Sdrh    DELETE FROM t1;
1871c92853dSdrh    INSERT OR REPLACE INTO t1(e,d,c,b,a) VALUES(1,2,3,null,5);
188ef6764a1Sdrh    SELECT * FROM t1 order by a;
189ef6764a1Sdrh  }
190ef6764a1Sdrh} {0 {5 5 3 2 1}}
191ef6764a1Sdrh
192ef6764a1Sdrhdo_test notnull-2.1 {
193ef6764a1Sdrh  catchsql {
194ef6764a1Sdrh    DELETE FROM t1;
195ef6764a1Sdrh    INSERT INTO t1 VALUES(1,2,3,4,5);
196ef6764a1Sdrh    UPDATE t1 SET a=null;
197ef6764a1Sdrh    SELECT * FROM t1 ORDER BY a;
198ef6764a1Sdrh  }
199f9c8ce3cSdrh} {1 {NOT NULL constraint failed: t1.a}}
200433dccfbSdrhverify_ex_errcode notnull-2.1b SQLITE_CONSTRAINT_NOTNULL
201ef6764a1Sdrhdo_test notnull-2.2 {
202ef6764a1Sdrh  catchsql {
203ef6764a1Sdrh    DELETE FROM t1;
204ef6764a1Sdrh    INSERT INTO t1 VALUES(1,2,3,4,5);
2051c92853dSdrh    UPDATE OR REPLACE t1 SET a=null;
206ef6764a1Sdrh    SELECT * FROM t1 ORDER BY a;
207ef6764a1Sdrh  }
208f9c8ce3cSdrh} {1 {NOT NULL constraint failed: t1.a}}
209433dccfbSdrhverify_ex_errcode notnull-2.2b SQLITE_CONSTRAINT_NOTNULL
210ef6764a1Sdrhdo_test notnull-2.3 {
211ef6764a1Sdrh  catchsql {
212ef6764a1Sdrh    DELETE FROM t1;
213ef6764a1Sdrh    INSERT INTO t1 VALUES(1,2,3,4,5);
2141c92853dSdrh    UPDATE OR IGNORE t1 SET a=null;
215ef6764a1Sdrh    SELECT * FROM t1 ORDER BY a;
216ef6764a1Sdrh  }
217ef6764a1Sdrh} {0 {1 2 3 4 5}}
218ef6764a1Sdrhdo_test notnull-2.4 {
219ef6764a1Sdrh  catchsql {
220ef6764a1Sdrh    DELETE FROM t1;
221ef6764a1Sdrh    INSERT INTO t1 VALUES(1,2,3,4,5);
2221c92853dSdrh    UPDATE OR ABORT t1 SET a=null;
223ef6764a1Sdrh    SELECT * FROM t1 ORDER BY a;
224ef6764a1Sdrh  }
225f9c8ce3cSdrh} {1 {NOT NULL constraint failed: t1.a}}
226433dccfbSdrhverify_ex_errcode notnull-2.4b SQLITE_CONSTRAINT_NOTNULL
227ef6764a1Sdrhdo_test notnull-2.5 {
228ef6764a1Sdrh  catchsql {
229ef6764a1Sdrh    DELETE FROM t1;
230ef6764a1Sdrh    INSERT INTO t1 VALUES(1,2,3,4,5);
231ef6764a1Sdrh    UPDATE t1 SET b=null;
232ef6764a1Sdrh    SELECT * FROM t1 ORDER BY a;
233ef6764a1Sdrh  }
234f9c8ce3cSdrh} {1 {NOT NULL constraint failed: t1.b}}
235433dccfbSdrhverify_ex_errcode notnull-2.6b SQLITE_CONSTRAINT_NOTNULL
236ef6764a1Sdrhdo_test notnull-2.6 {
237ef6764a1Sdrh  catchsql {
238ef6764a1Sdrh    DELETE FROM t1;
239ef6764a1Sdrh    INSERT INTO t1 VALUES(1,2,3,4,5);
2401c92853dSdrh    UPDATE OR REPLACE t1 SET b=null, d=e, e=d;
241ef6764a1Sdrh    SELECT * FROM t1 ORDER BY a;
242ef6764a1Sdrh  }
243ef6764a1Sdrh} {0 {1 5 3 5 4}}
244ef6764a1Sdrhdo_test notnull-2.7 {
245ef6764a1Sdrh  catchsql {
246ef6764a1Sdrh    DELETE FROM t1;
247ef6764a1Sdrh    INSERT INTO t1 VALUES(1,2,3,4,5);
2481c92853dSdrh    UPDATE OR IGNORE t1 SET b=null, d=e, e=d;
249ef6764a1Sdrh    SELECT * FROM t1 ORDER BY a;
250ef6764a1Sdrh  }
251ef6764a1Sdrh} {0 {1 2 3 4 5}}
252ef6764a1Sdrhdo_test notnull-2.8 {
253ef6764a1Sdrh  catchsql {
254ef6764a1Sdrh    DELETE FROM t1;
255ef6764a1Sdrh    INSERT INTO t1 VALUES(1,2,3,4,5);
256ef6764a1Sdrh    UPDATE t1 SET c=null, d=e, e=d;
257ef6764a1Sdrh    SELECT * FROM t1 ORDER BY a;
258ef6764a1Sdrh  }
259ef6764a1Sdrh} {0 {1 2 6 5 4}}
260ef6764a1Sdrhdo_test notnull-2.9 {
261ef6764a1Sdrh  catchsql {
262ef6764a1Sdrh    DELETE FROM t1;
263ef6764a1Sdrh    INSERT INTO t1 VALUES(1,2,3,4,5);
264ef6764a1Sdrh    UPDATE t1 SET d=null, a=b, b=a;
265ef6764a1Sdrh    SELECT * FROM t1 ORDER BY a;
266ef6764a1Sdrh  }
267ef6764a1Sdrh} {0 {1 2 3 4 5}}
268ef6764a1Sdrhdo_test notnull-2.10 {
269ef6764a1Sdrh  catchsql {
270ef6764a1Sdrh    DELETE FROM t1;
271ef6764a1Sdrh    INSERT INTO t1 VALUES(1,2,3,4,5);
272ef6764a1Sdrh    UPDATE t1 SET e=null, a=b, b=a;
273ef6764a1Sdrh    SELECT * FROM t1 ORDER BY a;
274ef6764a1Sdrh  }
275f9c8ce3cSdrh} {1 {NOT NULL constraint failed: t1.e}}
276433dccfbSdrhverify_ex_errcode notnull-2.10b SQLITE_CONSTRAINT_NOTNULL
277ef6764a1Sdrh
278ef6764a1Sdrhdo_test notnull-3.0 {
279ef6764a1Sdrh  execsql {
280ef6764a1Sdrh    CREATE INDEX t1a ON t1(a);
281ef6764a1Sdrh    CREATE INDEX t1b ON t1(b);
282ef6764a1Sdrh    CREATE INDEX t1c ON t1(c);
283ef6764a1Sdrh    CREATE INDEX t1d ON t1(d);
284ef6764a1Sdrh    CREATE INDEX t1e ON t1(e);
285ef6764a1Sdrh    CREATE INDEX t1abc ON t1(a,b,c);
286ef6764a1Sdrh  }
287ef6764a1Sdrh} {}
288ef6764a1Sdrhdo_test notnull-3.1 {
289ef6764a1Sdrh  catchsql {
290ef6764a1Sdrh    DELETE FROM t1;
291ef6764a1Sdrh    INSERT INTO t1(a,b,c,d,e) VALUES(1,2,3,4,5);
292ef6764a1Sdrh    SELECT * FROM t1 order by a;
293ef6764a1Sdrh  }
294ef6764a1Sdrh} {0 {1 2 3 4 5}}
295ef6764a1Sdrhdo_test notnull-3.2 {
296ef6764a1Sdrh  catchsql {
297ef6764a1Sdrh    DELETE FROM t1;
298ef6764a1Sdrh    INSERT INTO t1(b,c,d,e) VALUES(2,3,4,5);
299ef6764a1Sdrh    SELECT * FROM t1 order by a;
300ef6764a1Sdrh  }
301f9c8ce3cSdrh} {1 {NOT NULL constraint failed: t1.a}}
302433dccfbSdrhverify_ex_errcode notnull-3.2b SQLITE_CONSTRAINT_NOTNULL
303ef6764a1Sdrhdo_test notnull-3.3 {
304ef6764a1Sdrh  catchsql {
305ef6764a1Sdrh    DELETE FROM t1;
3061c92853dSdrh    INSERT OR IGNORE INTO t1(b,c,d,e) VALUES(2,3,4,5);
307ef6764a1Sdrh    SELECT * FROM t1 order by a;
308ef6764a1Sdrh  }
309ef6764a1Sdrh} {0 {}}
310ef6764a1Sdrhdo_test notnull-3.4 {
311ef6764a1Sdrh  catchsql {
312ef6764a1Sdrh    DELETE FROM t1;
3131c92853dSdrh    INSERT OR REPLACE INTO t1(b,c,d,e) VALUES(2,3,4,5);
314ef6764a1Sdrh    SELECT * FROM t1 order by a;
315ef6764a1Sdrh  }
316f9c8ce3cSdrh} {1 {NOT NULL constraint failed: t1.a}}
317433dccfbSdrhverify_ex_errcode notnull-3.4b SQLITE_CONSTRAINT_NOTNULL
318ef6764a1Sdrhdo_test notnull-3.5 {
319ef6764a1Sdrh  catchsql {
320ef6764a1Sdrh    DELETE FROM t1;
3211c92853dSdrh    INSERT OR ABORT INTO t1(b,c,d,e) VALUES(2,3,4,5);
322ef6764a1Sdrh    SELECT * FROM t1 order by a;
323ef6764a1Sdrh  }
324f9c8ce3cSdrh} {1 {NOT NULL constraint failed: t1.a}}
325433dccfbSdrhverify_ex_errcode notnull-3.5b SQLITE_CONSTRAINT_NOTNULL
326ef6764a1Sdrhdo_test notnull-3.6 {
327ef6764a1Sdrh  catchsql {
328ef6764a1Sdrh    DELETE FROM t1;
329ef6764a1Sdrh    INSERT INTO t1(a,c,d,e) VALUES(1,3,4,5);
330ef6764a1Sdrh    SELECT * FROM t1 order by a;
331ef6764a1Sdrh  }
332ef6764a1Sdrh} {0 {1 5 3 4 5}}
333ef6764a1Sdrhdo_test notnull-3.7 {
334ef6764a1Sdrh  catchsql {
335ef6764a1Sdrh    DELETE FROM t1;
3361c92853dSdrh    INSERT OR IGNORE INTO t1(a,c,d,e) VALUES(1,3,4,5);
337ef6764a1Sdrh    SELECT * FROM t1 order by a;
338ef6764a1Sdrh  }
339ef6764a1Sdrh} {0 {1 5 3 4 5}}
340ef6764a1Sdrhdo_test notnull-3.8 {
341ef6764a1Sdrh  catchsql {
342ef6764a1Sdrh    DELETE FROM t1;
3431c92853dSdrh    INSERT OR REPLACE INTO t1(a,c,d,e) VALUES(1,3,4,5);
344ef6764a1Sdrh    SELECT * FROM t1 order by a;
345ef6764a1Sdrh  }
346ef6764a1Sdrh} {0 {1 5 3 4 5}}
347ef6764a1Sdrhdo_test notnull-3.9 {
348ef6764a1Sdrh  catchsql {
349ef6764a1Sdrh    DELETE FROM t1;
3501c92853dSdrh    INSERT OR ABORT INTO t1(a,c,d,e) VALUES(1,3,4,5);
351ef6764a1Sdrh    SELECT * FROM t1 order by a;
352ef6764a1Sdrh  }
353ef6764a1Sdrh} {0 {1 5 3 4 5}}
354ef6764a1Sdrhdo_test notnull-3.10 {
355ef6764a1Sdrh  catchsql {
356ef6764a1Sdrh    DELETE FROM t1;
357ef6764a1Sdrh    INSERT INTO t1(a,b,c,d,e) VALUES(1,null,3,4,5);
358ef6764a1Sdrh    SELECT * FROM t1 order by a;
359ef6764a1Sdrh  }
360f9c8ce3cSdrh} {1 {NOT NULL constraint failed: t1.b}}
361433dccfbSdrhverify_ex_errcode notnull-3.10b SQLITE_CONSTRAINT_NOTNULL
362ef6764a1Sdrhdo_test notnull-3.11 {
363ef6764a1Sdrh  catchsql {
364ef6764a1Sdrh    DELETE FROM t1;
3651c92853dSdrh    INSERT OR IGNORE INTO t1(a,b,c,d,e) VALUES(1,null,3,4,5);
366ef6764a1Sdrh    SELECT * FROM t1 order by a;
367ef6764a1Sdrh  }
368ef6764a1Sdrh} {0 {}}
369ef6764a1Sdrhdo_test notnull-3.12 {
370ef6764a1Sdrh  catchsql {
371ef6764a1Sdrh    DELETE FROM t1;
3721c92853dSdrh    INSERT OR REPLACE INTO t1(a,b,c,d,e) VALUES(1,null,3,4,5);
373ef6764a1Sdrh    SELECT * FROM t1 order by a;
374ef6764a1Sdrh  }
375ef6764a1Sdrh} {0 {1 5 3 4 5}}
376ef6764a1Sdrhdo_test notnull-3.13 {
377ef6764a1Sdrh  catchsql {
378ef6764a1Sdrh    DELETE FROM t1;
379ef6764a1Sdrh    INSERT INTO t1(a,b,c,d,e) VALUES(1,2,null,4,5);
380ef6764a1Sdrh    SELECT * FROM t1 order by a;
381ef6764a1Sdrh  }
382ef6764a1Sdrh} {0 {1 2 6 4 5}}
383ef6764a1Sdrhdo_test notnull-3.14 {
384ef6764a1Sdrh  catchsql {
385ef6764a1Sdrh    DELETE FROM t1;
3861c92853dSdrh    INSERT OR IGNORE INTO t1(a,b,c,d,e) VALUES(1,2,null,4,5);
387ef6764a1Sdrh    SELECT * FROM t1 order by a;
388ef6764a1Sdrh  }
389ef6764a1Sdrh} {0 {}}
390ef6764a1Sdrhdo_test notnull-3.15 {
391ef6764a1Sdrh  catchsql {
392ef6764a1Sdrh    DELETE FROM t1;
3931c92853dSdrh    INSERT OR REPLACE INTO t1(a,b,c,d,e) VALUES(1,2,null,4,5);
394ef6764a1Sdrh    SELECT * FROM t1 order by a;
395ef6764a1Sdrh  }
396ef6764a1Sdrh} {0 {1 2 6 4 5}}
397ef6764a1Sdrhdo_test notnull-3.16 {
398ef6764a1Sdrh  catchsql {
399ef6764a1Sdrh    DELETE FROM t1;
4001c92853dSdrh    INSERT OR ABORT INTO t1(a,b,c,d,e) VALUES(1,2,null,4,5);
401ef6764a1Sdrh    SELECT * FROM t1 order by a;
402ef6764a1Sdrh  }
403f9c8ce3cSdrh} {1 {NOT NULL constraint failed: t1.c}}
404433dccfbSdrhverify_ex_errcode notnull-3.16b SQLITE_CONSTRAINT_NOTNULL
405ef6764a1Sdrhdo_test notnull-3.17 {
406ef6764a1Sdrh  catchsql {
407ef6764a1Sdrh    DELETE FROM t1;
4081c92853dSdrh    INSERT OR ABORT INTO t1(a,b,c,d,e) VALUES(1,2,3,null,5);
409ef6764a1Sdrh    SELECT * FROM t1 order by a;
410ef6764a1Sdrh  }
411f9c8ce3cSdrh} {1 {NOT NULL constraint failed: t1.d}}
412433dccfbSdrhverify_ex_errcode notnull-3.17b SQLITE_CONSTRAINT_NOTNULL
413ef6764a1Sdrhdo_test notnull-3.18 {
414ef6764a1Sdrh  catchsql {
415ef6764a1Sdrh    DELETE FROM t1;
4161c92853dSdrh    INSERT OR ABORT INTO t1(a,b,c,e) VALUES(1,2,3,5);
417ef6764a1Sdrh    SELECT * FROM t1 order by a;
418ef6764a1Sdrh  }
419ef6764a1Sdrh} {0 {1 2 3 7 5}}
420ef6764a1Sdrhdo_test notnull-3.19 {
421ef6764a1Sdrh  catchsql {
422ef6764a1Sdrh    DELETE FROM t1;
423ef6764a1Sdrh    INSERT INTO t1(a,b,c,d) VALUES(1,2,3,4);
424ef6764a1Sdrh    SELECT * FROM t1 order by a;
425ef6764a1Sdrh  }
426ef6764a1Sdrh} {0 {1 2 3 4 8}}
427ef6764a1Sdrhdo_test notnull-3.20 {
428ef6764a1Sdrh  catchsql {
429ef6764a1Sdrh    DELETE FROM t1;
430ef6764a1Sdrh    INSERT INTO t1(a,b,c,d,e) VALUES(1,2,3,4,null);
431ef6764a1Sdrh    SELECT * FROM t1 order by a;
432ef6764a1Sdrh  }
433f9c8ce3cSdrh} {1 {NOT NULL constraint failed: t1.e}}
434433dccfbSdrhverify_ex_errcode notnull-3.20b SQLITE_CONSTRAINT_NOTNULL
435ef6764a1Sdrhdo_test notnull-3.21 {
436ef6764a1Sdrh  catchsql {
437ef6764a1Sdrh    DELETE FROM t1;
4381c92853dSdrh    INSERT OR REPLACE INTO t1(e,d,c,b,a) VALUES(1,2,3,null,5);
439ef6764a1Sdrh    SELECT * FROM t1 order by a;
440ef6764a1Sdrh  }
441ef6764a1Sdrh} {0 {5 5 3 2 1}}
442ef6764a1Sdrh
443ef6764a1Sdrhdo_test notnull-4.1 {
444ef6764a1Sdrh  catchsql {
445ef6764a1Sdrh    DELETE FROM t1;
446ef6764a1Sdrh    INSERT INTO t1 VALUES(1,2,3,4,5);
447ef6764a1Sdrh    UPDATE t1 SET a=null;
448ef6764a1Sdrh    SELECT * FROM t1 ORDER BY a;
449ef6764a1Sdrh  }
450f9c8ce3cSdrh} {1 {NOT NULL constraint failed: t1.a}}
451433dccfbSdrhverify_ex_errcode notnull-4.1b SQLITE_CONSTRAINT_NOTNULL
452ef6764a1Sdrhdo_test notnull-4.2 {
453ef6764a1Sdrh  catchsql {
454ef6764a1Sdrh    DELETE FROM t1;
455ef6764a1Sdrh    INSERT INTO t1 VALUES(1,2,3,4,5);
4561c92853dSdrh    UPDATE OR REPLACE t1 SET a=null;
457ef6764a1Sdrh    SELECT * FROM t1 ORDER BY a;
458ef6764a1Sdrh  }
459f9c8ce3cSdrh} {1 {NOT NULL constraint failed: t1.a}}
460433dccfbSdrhverify_ex_errcode notnull-4.2b SQLITE_CONSTRAINT_NOTNULL
461ef6764a1Sdrhdo_test notnull-4.3 {
462ef6764a1Sdrh  catchsql {
463ef6764a1Sdrh    DELETE FROM t1;
464ef6764a1Sdrh    INSERT INTO t1 VALUES(1,2,3,4,5);
4651c92853dSdrh    UPDATE OR IGNORE t1 SET a=null;
466ef6764a1Sdrh    SELECT * FROM t1 ORDER BY a;
467ef6764a1Sdrh  }
468ef6764a1Sdrh} {0 {1 2 3 4 5}}
469ef6764a1Sdrhdo_test notnull-4.4 {
470ef6764a1Sdrh  catchsql {
471ef6764a1Sdrh    DELETE FROM t1;
472ef6764a1Sdrh    INSERT INTO t1 VALUES(1,2,3,4,5);
4731c92853dSdrh    UPDATE OR ABORT t1 SET a=null;
474ef6764a1Sdrh    SELECT * FROM t1 ORDER BY a;
475ef6764a1Sdrh  }
476f9c8ce3cSdrh} {1 {NOT NULL constraint failed: t1.a}}
477433dccfbSdrhverify_ex_errcode notnull-4.4b SQLITE_CONSTRAINT_NOTNULL
478ef6764a1Sdrhdo_test notnull-4.5 {
479ef6764a1Sdrh  catchsql {
480ef6764a1Sdrh    DELETE FROM t1;
481ef6764a1Sdrh    INSERT INTO t1 VALUES(1,2,3,4,5);
482ef6764a1Sdrh    UPDATE t1 SET b=null;
483ef6764a1Sdrh    SELECT * FROM t1 ORDER BY a;
484ef6764a1Sdrh  }
485f9c8ce3cSdrh} {1 {NOT NULL constraint failed: t1.b}}
486433dccfbSdrhverify_ex_errcode notnull-4.5b SQLITE_CONSTRAINT_NOTNULL
487ef6764a1Sdrhdo_test notnull-4.6 {
488ef6764a1Sdrh  catchsql {
489ef6764a1Sdrh    DELETE FROM t1;
490ef6764a1Sdrh    INSERT INTO t1 VALUES(1,2,3,4,5);
4911c92853dSdrh    UPDATE OR REPLACE t1 SET b=null, d=e, e=d;
492ef6764a1Sdrh    SELECT * FROM t1 ORDER BY a;
493ef6764a1Sdrh  }
494ef6764a1Sdrh} {0 {1 5 3 5 4}}
495ef6764a1Sdrhdo_test notnull-4.7 {
496ef6764a1Sdrh  catchsql {
497ef6764a1Sdrh    DELETE FROM t1;
498ef6764a1Sdrh    INSERT INTO t1 VALUES(1,2,3,4,5);
4991c92853dSdrh    UPDATE OR IGNORE t1 SET b=null, d=e, e=d;
500ef6764a1Sdrh    SELECT * FROM t1 ORDER BY a;
501ef6764a1Sdrh  }
502ef6764a1Sdrh} {0 {1 2 3 4 5}}
503ef6764a1Sdrhdo_test notnull-4.8 {
504ef6764a1Sdrh  catchsql {
505ef6764a1Sdrh    DELETE FROM t1;
506ef6764a1Sdrh    INSERT INTO t1 VALUES(1,2,3,4,5);
507ef6764a1Sdrh    UPDATE t1 SET c=null, d=e, e=d;
508ef6764a1Sdrh    SELECT * FROM t1 ORDER BY a;
509ef6764a1Sdrh  }
510ef6764a1Sdrh} {0 {1 2 6 5 4}}
511ef6764a1Sdrhdo_test notnull-4.9 {
512ef6764a1Sdrh  catchsql {
513ef6764a1Sdrh    DELETE FROM t1;
514ef6764a1Sdrh    INSERT INTO t1 VALUES(1,2,3,4,5);
515ef6764a1Sdrh    UPDATE t1 SET d=null, a=b, b=a;
516ef6764a1Sdrh    SELECT * FROM t1 ORDER BY a;
517ef6764a1Sdrh  }
518ef6764a1Sdrh} {0 {1 2 3 4 5}}
519ef6764a1Sdrhdo_test notnull-4.10 {
520ef6764a1Sdrh  catchsql {
521ef6764a1Sdrh    DELETE FROM t1;
522ef6764a1Sdrh    INSERT INTO t1 VALUES(1,2,3,4,5);
523ef6764a1Sdrh    UPDATE t1 SET e=null, a=b, b=a;
524ef6764a1Sdrh    SELECT * FROM t1 ORDER BY a;
525ef6764a1Sdrh  }
526f9c8ce3cSdrh} {1 {NOT NULL constraint failed: t1.e}}
527433dccfbSdrhverify_ex_errcode notnull-4.10b SQLITE_CONSTRAINT_NOTNULL
528ef6764a1Sdrh
5290fe60783Sdan# Test that bug 29ab7be99f is fixed.
5300fe60783Sdan#
5310fe60783Sdando_test notnull-5.1 {
5320fe60783Sdan  execsql {
5330fe60783Sdan    DROP TABLE IF EXISTS t1;
5340fe60783Sdan    CREATE TABLE t1(a, b NOT NULL);
5350fe60783Sdan    CREATE TABLE t2(c, d);
5360fe60783Sdan    INSERT INTO t2 VALUES(3, 4);
5370fe60783Sdan    INSERT INTO t2 VALUES(5, NULL);
5380fe60783Sdan  }
5390fe60783Sdan}  {}
5400fe60783Sdando_test notnull-5.2 {
5410fe60783Sdan  catchsql {
5420fe60783Sdan    INSERT INTO t1 VALUES(1, 2);
5430fe60783Sdan    INSERT INTO t1 SELECT * FROM t2;
5440fe60783Sdan  }
545f9c8ce3cSdrh} {1 {NOT NULL constraint failed: t1.b}}
546433dccfbSdrhverify_ex_errcode notnull-5.2b SQLITE_CONSTRAINT_NOTNULL
5470fe60783Sdando_test notnull-5.3 {
5480fe60783Sdan  execsql { SELECT * FROM t1 }
5490fe60783Sdan} {1 2}
5500fe60783Sdando_test notnull-5.4 {
5510fe60783Sdan  catchsql {
5520fe60783Sdan    DELETE FROM t1;
5530fe60783Sdan    BEGIN;
5540fe60783Sdan      INSERT INTO t1 VALUES(1, 2);
5550fe60783Sdan      INSERT INTO t1 SELECT * FROM t2;
5560fe60783Sdan    COMMIT;
5570fe60783Sdan  }
558f9c8ce3cSdrh} {1 {NOT NULL constraint failed: t1.b}}
559433dccfbSdrhverify_ex_errcode notnull-5.4b SQLITE_CONSTRAINT_NOTNULL
5600fe60783Sdando_test notnull-5.5 {
5610fe60783Sdan  execsql { SELECT * FROM t1 }
5620fe60783Sdan} {1 2}
5630fe60783Sdan
564*26e731ccSdan#-------------------------------------------------------------------------
565*26e731ccSdan# Check that UNIQUE NOT NULL indexes are always recognized as such.
566*26e731ccSdan#
567*26e731ccSdanproc uses_op_next {sql} {
568*26e731ccSdan  db eval "EXPLAIN $sql" a {
569*26e731ccSdan    if {$a(opcode)=="Next"} { return 1 }
570*26e731ccSdan  }
571*26e731ccSdan  return 0
572*26e731ccSdan}
573*26e731ccSdan
574*26e731ccSdanproc do_uses_op_next_test {tn sql res} {
575*26e731ccSdan  uplevel [list do_test $tn [list uses_op_next $sql] $res]
576*26e731ccSdan}
577*26e731ccSdan
578*26e731ccSdanreset_db
579*26e731ccSdando_execsql_test notnull-6.0 {
580*26e731ccSdan  CREATE TABLE t1(a UNIQUE);
581*26e731ccSdan  CREATE TABLE t2(a NOT NULL UNIQUE);
582*26e731ccSdan  CREATE TABLE t3(a UNIQUE NOT NULL);
583*26e731ccSdan  CREATE TABLE t4(a NOT NULL);
584*26e731ccSdan  CREATE UNIQUE INDEX t4a ON t4(a);
585*26e731ccSdan
586*26e731ccSdan  CREATE TABLE t5(a PRIMARY KEY);
587*26e731ccSdan  CREATE TABLE t6(a PRIMARY KEY NOT NULL);
588*26e731ccSdan  CREATE TABLE t7(a NOT NULL PRIMARY KEY);
589*26e731ccSdan  CREATE TABLE t8(a PRIMARY KEY) WITHOUT ROWID;
590*26e731ccSdan
591*26e731ccSdan  CREATE TABLE t9(a PRIMARY KEY UNIQUE NOT NULL);
592*26e731ccSdan  CREATE TABLE t10(a UNIQUE PRIMARY KEY NOT NULL);
593*26e731ccSdan}
594*26e731ccSdan
595*26e731ccSdando_uses_op_next_test notnull-6.1 "SELECT * FROM t1 WHERE a IS ?" 1
596*26e731ccSdando_uses_op_next_test notnull-6.2 "SELECT * FROM t2 WHERE a IS ?" 0
597*26e731ccSdando_uses_op_next_test notnull-6.3 "SELECT * FROM t3 WHERE a IS ?" 0
598*26e731ccSdando_uses_op_next_test notnull-6.4 "SELECT * FROM t4 WHERE a IS ?" 0
599*26e731ccSdan
600*26e731ccSdando_uses_op_next_test notnull-6.5 "SELECT * FROM t5 WHERE a IS ?" 1
601*26e731ccSdando_uses_op_next_test notnull-6.6 "SELECT * FROM t6 WHERE a IS ?" 0
602*26e731ccSdando_uses_op_next_test notnull-6.7 "SELECT * FROM t7 WHERE a IS ?" 0
603*26e731ccSdando_uses_op_next_test notnull-6.8 "SELECT * FROM t8 WHERE a IS ?" 0
604*26e731ccSdan
605*26e731ccSdando_uses_op_next_test notnull-6.9 "SELECT * FROM t8 WHERE a IS ?" 0
606*26e731ccSdando_uses_op_next_test notnull-6.10 "SELECT * FROM t8 WHERE a IS ?" 0
607*26e731ccSdan
608ef6764a1Sdrhfinish_test
609