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