drh | ef6764a | 2002-01-30 04:32:00 +0000 | [diff] [blame] | 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 | # |
danielk1977 | 3bdca9c | 2006-01-17 09:35:01 +0000 | [diff] [blame] | 15 | # $Id: notnull.test,v 1.4 2006/01/17 09:35:02 danielk1977 Exp $ |
drh | ef6764a | 2002-01-30 04:32:00 +0000 | [diff] [blame] | 16 | |
| 17 | set testdir [file dirname $argv0] |
| 18 | source $testdir/tester.tcl |
| 19 | |
danielk1977 | 3bdca9c | 2006-01-17 09:35:01 +0000 | [diff] [blame] | 20 | ifcapable !conflict { |
| 21 | finish_test |
| 22 | return |
| 23 | } |
| 24 | |
drh | ef6764a | 2002-01-30 04:32:00 +0000 | [diff] [blame] | 25 | do_test notnull-1.0 { |
| 26 | execsql { |
| 27 | CREATE TABLE t1 ( |
| 28 | a NOT NULL, |
| 29 | b NOT NULL DEFAULT 5, |
drh | 1c92853 | 2002-01-31 15:54:21 +0000 | [diff] [blame] | 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 |
drh | ef6764a | 2002-01-30 04:32:00 +0000 | [diff] [blame] | 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 | } |
drh | 483750b | 2003-01-29 18:46:51 +0000 | [diff] [blame] | 50 | } {1 {t1.a may not be NULL}} |
drh | 433dccf | 2013-02-09 15:37:11 +0000 | [diff] [blame] | 51 | verify_ex_errcode notnull-1.2b SQLITE_CONSTRAINT_NOTNULL |
drh | ef6764a | 2002-01-30 04:32:00 +0000 | [diff] [blame] | 52 | do_test notnull-1.3 { |
| 53 | catchsql { |
| 54 | DELETE FROM t1; |
drh | 1c92853 | 2002-01-31 15:54:21 +0000 | [diff] [blame] | 55 | INSERT OR IGNORE INTO t1(b,c,d,e) VALUES(2,3,4,5); |
drh | ef6764a | 2002-01-30 04:32:00 +0000 | [diff] [blame] | 56 | SELECT * FROM t1 order by a; |
| 57 | } |
| 58 | } {0 {}} |
| 59 | do_test notnull-1.4 { |
| 60 | catchsql { |
| 61 | DELETE FROM t1; |
drh | 1c92853 | 2002-01-31 15:54:21 +0000 | [diff] [blame] | 62 | INSERT OR REPLACE INTO t1(b,c,d,e) VALUES(2,3,4,5); |
drh | ef6764a | 2002-01-30 04:32:00 +0000 | [diff] [blame] | 63 | SELECT * FROM t1 order by a; |
| 64 | } |
drh | 483750b | 2003-01-29 18:46:51 +0000 | [diff] [blame] | 65 | } {1 {t1.a may not be NULL}} |
drh | 433dccf | 2013-02-09 15:37:11 +0000 | [diff] [blame] | 66 | verify_ex_errcode notnull-1.4b SQLITE_CONSTRAINT_NOTNULL |
drh | ef6764a | 2002-01-30 04:32:00 +0000 | [diff] [blame] | 67 | do_test notnull-1.5 { |
| 68 | catchsql { |
| 69 | DELETE FROM t1; |
drh | 1c92853 | 2002-01-31 15:54:21 +0000 | [diff] [blame] | 70 | INSERT OR ABORT INTO t1(b,c,d,e) VALUES(2,3,4,5); |
drh | ef6764a | 2002-01-30 04:32:00 +0000 | [diff] [blame] | 71 | SELECT * FROM t1 order by a; |
| 72 | } |
drh | 483750b | 2003-01-29 18:46:51 +0000 | [diff] [blame] | 73 | } {1 {t1.a may not be NULL}} |
drh | 433dccf | 2013-02-09 15:37:11 +0000 | [diff] [blame] | 74 | verify_ex_errcode notnull-1.5b SQLITE_CONSTRAINT_NOTNULL |
drh | ef6764a | 2002-01-30 04:32:00 +0000 | [diff] [blame] | 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; |
drh | 1c92853 | 2002-01-31 15:54:21 +0000 | [diff] [blame] | 85 | INSERT OR IGNORE INTO t1(a,c,d,e) VALUES(1,3,4,5); |
drh | ef6764a | 2002-01-30 04:32:00 +0000 | [diff] [blame] | 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; |
drh | 1c92853 | 2002-01-31 15:54:21 +0000 | [diff] [blame] | 92 | INSERT OR REPLACE INTO t1(a,c,d,e) VALUES(1,3,4,5); |
drh | ef6764a | 2002-01-30 04:32:00 +0000 | [diff] [blame] | 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; |
drh | 1c92853 | 2002-01-31 15:54:21 +0000 | [diff] [blame] | 99 | INSERT OR ABORT INTO t1(a,c,d,e) VALUES(1,3,4,5); |
drh | ef6764a | 2002-01-30 04:32:00 +0000 | [diff] [blame] | 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 | } |
drh | 483750b | 2003-01-29 18:46:51 +0000 | [diff] [blame] | 109 | } {1 {t1.b may not be NULL}} |
drh | 433dccf | 2013-02-09 15:37:11 +0000 | [diff] [blame] | 110 | verify_ex_errcode notnull-1.10b SQLITE_CONSTRAINT_NOTNULL |
drh | ef6764a | 2002-01-30 04:32:00 +0000 | [diff] [blame] | 111 | do_test notnull-1.11 { |
| 112 | catchsql { |
| 113 | DELETE FROM t1; |
drh | 1c92853 | 2002-01-31 15:54:21 +0000 | [diff] [blame] | 114 | INSERT OR IGNORE INTO t1(a,b,c,d,e) VALUES(1,null,3,4,5); |
drh | ef6764a | 2002-01-30 04:32:00 +0000 | [diff] [blame] | 115 | SELECT * FROM t1 order by a; |
| 116 | } |
| 117 | } {0 {}} |
| 118 | do_test notnull-1.12 { |
| 119 | catchsql { |
| 120 | DELETE FROM t1; |
drh | 1c92853 | 2002-01-31 15:54:21 +0000 | [diff] [blame] | 121 | INSERT OR REPLACE INTO t1(a,b,c,d,e) VALUES(1,null,3,4,5); |
drh | ef6764a | 2002-01-30 04:32:00 +0000 | [diff] [blame] | 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; |
drh | 1c92853 | 2002-01-31 15:54:21 +0000 | [diff] [blame] | 135 | INSERT OR IGNORE INTO t1(a,b,c,d,e) VALUES(1,2,null,4,5); |
drh | ef6764a | 2002-01-30 04:32:00 +0000 | [diff] [blame] | 136 | SELECT * FROM t1 order by a; |
| 137 | } |
| 138 | } {0 {}} |
| 139 | do_test notnull-1.15 { |
| 140 | catchsql { |
| 141 | DELETE FROM t1; |
drh | 1c92853 | 2002-01-31 15:54:21 +0000 | [diff] [blame] | 142 | INSERT OR REPLACE INTO t1(a,b,c,d,e) VALUES(1,2,null,4,5); |
drh | ef6764a | 2002-01-30 04:32:00 +0000 | [diff] [blame] | 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; |
drh | 1c92853 | 2002-01-31 15:54:21 +0000 | [diff] [blame] | 149 | INSERT OR ABORT INTO t1(a,b,c,d,e) VALUES(1,2,null,4,5); |
drh | ef6764a | 2002-01-30 04:32:00 +0000 | [diff] [blame] | 150 | SELECT * FROM t1 order by a; |
| 151 | } |
drh | 483750b | 2003-01-29 18:46:51 +0000 | [diff] [blame] | 152 | } {1 {t1.c may not be NULL}} |
drh | 433dccf | 2013-02-09 15:37:11 +0000 | [diff] [blame] | 153 | verify_ex_errcode notnull-1.16b SQLITE_CONSTRAINT_NOTNULL |
drh | ef6764a | 2002-01-30 04:32:00 +0000 | [diff] [blame] | 154 | do_test notnull-1.17 { |
| 155 | catchsql { |
| 156 | DELETE FROM t1; |
drh | 1c92853 | 2002-01-31 15:54:21 +0000 | [diff] [blame] | 157 | INSERT OR ABORT INTO t1(a,b,c,d,e) VALUES(1,2,3,null,5); |
drh | ef6764a | 2002-01-30 04:32:00 +0000 | [diff] [blame] | 158 | SELECT * FROM t1 order by a; |
| 159 | } |
drh | 483750b | 2003-01-29 18:46:51 +0000 | [diff] [blame] | 160 | } {1 {t1.d may not be NULL}} |
drh | 433dccf | 2013-02-09 15:37:11 +0000 | [diff] [blame] | 161 | verify_ex_errcode notnull-1.17b SQLITE_CONSTRAINT_NOTNULL |
drh | ef6764a | 2002-01-30 04:32:00 +0000 | [diff] [blame] | 162 | do_test notnull-1.18 { |
| 163 | catchsql { |
| 164 | DELETE FROM t1; |
drh | 1c92853 | 2002-01-31 15:54:21 +0000 | [diff] [blame] | 165 | INSERT OR ABORT INTO t1(a,b,c,e) VALUES(1,2,3,5); |
drh | ef6764a | 2002-01-30 04:32:00 +0000 | [diff] [blame] | 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 | } |
drh | 483750b | 2003-01-29 18:46:51 +0000 | [diff] [blame] | 182 | } {1 {t1.e may not be NULL}} |
drh | 433dccf | 2013-02-09 15:37:11 +0000 | [diff] [blame] | 183 | verify_ex_errcode notnull-1.20b SQLITE_CONSTRAINT_NOTNULL |
drh | ef6764a | 2002-01-30 04:32:00 +0000 | [diff] [blame] | 184 | do_test notnull-1.21 { |
| 185 | catchsql { |
| 186 | DELETE FROM t1; |
drh | 1c92853 | 2002-01-31 15:54:21 +0000 | [diff] [blame] | 187 | INSERT OR REPLACE INTO t1(e,d,c,b,a) VALUES(1,2,3,null,5); |
drh | ef6764a | 2002-01-30 04:32:00 +0000 | [diff] [blame] | 188 | SELECT * FROM t1 order by a; |
| 189 | } |
| 190 | } {0 {5 5 3 2 1}} |
| 191 | |
| 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 | } |
drh | 483750b | 2003-01-29 18:46:51 +0000 | [diff] [blame] | 199 | } {1 {t1.a may not be NULL}} |
drh | 433dccf | 2013-02-09 15:37:11 +0000 | [diff] [blame] | 200 | verify_ex_errcode notnull-2.1b SQLITE_CONSTRAINT_NOTNULL |
drh | ef6764a | 2002-01-30 04:32:00 +0000 | [diff] [blame] | 201 | do_test notnull-2.2 { |
| 202 | catchsql { |
| 203 | DELETE FROM t1; |
| 204 | INSERT INTO t1 VALUES(1,2,3,4,5); |
drh | 1c92853 | 2002-01-31 15:54:21 +0000 | [diff] [blame] | 205 | UPDATE OR REPLACE t1 SET a=null; |
drh | ef6764a | 2002-01-30 04:32:00 +0000 | [diff] [blame] | 206 | SELECT * FROM t1 ORDER BY a; |
| 207 | } |
drh | 483750b | 2003-01-29 18:46:51 +0000 | [diff] [blame] | 208 | } {1 {t1.a may not be NULL}} |
drh | 433dccf | 2013-02-09 15:37:11 +0000 | [diff] [blame] | 209 | verify_ex_errcode notnull-2.2b SQLITE_CONSTRAINT_NOTNULL |
drh | ef6764a | 2002-01-30 04:32:00 +0000 | [diff] [blame] | 210 | do_test notnull-2.3 { |
| 211 | catchsql { |
| 212 | DELETE FROM t1; |
| 213 | INSERT INTO t1 VALUES(1,2,3,4,5); |
drh | 1c92853 | 2002-01-31 15:54:21 +0000 | [diff] [blame] | 214 | UPDATE OR IGNORE t1 SET a=null; |
drh | ef6764a | 2002-01-30 04:32:00 +0000 | [diff] [blame] | 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); |
drh | 1c92853 | 2002-01-31 15:54:21 +0000 | [diff] [blame] | 222 | UPDATE OR ABORT t1 SET a=null; |
drh | ef6764a | 2002-01-30 04:32:00 +0000 | [diff] [blame] | 223 | SELECT * FROM t1 ORDER BY a; |
| 224 | } |
drh | 483750b | 2003-01-29 18:46:51 +0000 | [diff] [blame] | 225 | } {1 {t1.a may not be NULL}} |
drh | 433dccf | 2013-02-09 15:37:11 +0000 | [diff] [blame] | 226 | verify_ex_errcode notnull-2.4b SQLITE_CONSTRAINT_NOTNULL |
drh | ef6764a | 2002-01-30 04:32:00 +0000 | [diff] [blame] | 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 | } |
drh | 483750b | 2003-01-29 18:46:51 +0000 | [diff] [blame] | 234 | } {1 {t1.b may not be NULL}} |
drh | 433dccf | 2013-02-09 15:37:11 +0000 | [diff] [blame] | 235 | verify_ex_errcode notnull-2.6b SQLITE_CONSTRAINT_NOTNULL |
drh | ef6764a | 2002-01-30 04:32:00 +0000 | [diff] [blame] | 236 | do_test notnull-2.6 { |
| 237 | catchsql { |
| 238 | DELETE FROM t1; |
| 239 | INSERT INTO t1 VALUES(1,2,3,4,5); |
drh | 1c92853 | 2002-01-31 15:54:21 +0000 | [diff] [blame] | 240 | UPDATE OR REPLACE t1 SET b=null, d=e, e=d; |
drh | ef6764a | 2002-01-30 04:32:00 +0000 | [diff] [blame] | 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); |
drh | 1c92853 | 2002-01-31 15:54:21 +0000 | [diff] [blame] | 248 | UPDATE OR IGNORE t1 SET b=null, d=e, e=d; |
drh | ef6764a | 2002-01-30 04:32:00 +0000 | [diff] [blame] | 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 | } |
drh | 483750b | 2003-01-29 18:46:51 +0000 | [diff] [blame] | 275 | } {1 {t1.e may not be NULL}} |
drh | 433dccf | 2013-02-09 15:37:11 +0000 | [diff] [blame] | 276 | verify_ex_errcode notnull-2.10b SQLITE_CONSTRAINT_NOTNULL |
drh | ef6764a | 2002-01-30 04:32:00 +0000 | [diff] [blame] | 277 | |
| 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 | } |
drh | 483750b | 2003-01-29 18:46:51 +0000 | [diff] [blame] | 301 | } {1 {t1.a may not be NULL}} |
drh | 433dccf | 2013-02-09 15:37:11 +0000 | [diff] [blame] | 302 | verify_ex_errcode notnull-3.2b SQLITE_CONSTRAINT_NOTNULL |
drh | ef6764a | 2002-01-30 04:32:00 +0000 | [diff] [blame] | 303 | do_test notnull-3.3 { |
| 304 | catchsql { |
| 305 | DELETE FROM t1; |
drh | 1c92853 | 2002-01-31 15:54:21 +0000 | [diff] [blame] | 306 | INSERT OR IGNORE INTO t1(b,c,d,e) VALUES(2,3,4,5); |
drh | ef6764a | 2002-01-30 04:32:00 +0000 | [diff] [blame] | 307 | SELECT * FROM t1 order by a; |
| 308 | } |
| 309 | } {0 {}} |
| 310 | do_test notnull-3.4 { |
| 311 | catchsql { |
| 312 | DELETE FROM t1; |
drh | 1c92853 | 2002-01-31 15:54:21 +0000 | [diff] [blame] | 313 | INSERT OR REPLACE INTO t1(b,c,d,e) VALUES(2,3,4,5); |
drh | ef6764a | 2002-01-30 04:32:00 +0000 | [diff] [blame] | 314 | SELECT * FROM t1 order by a; |
| 315 | } |
drh | 483750b | 2003-01-29 18:46:51 +0000 | [diff] [blame] | 316 | } {1 {t1.a may not be NULL}} |
drh | 433dccf | 2013-02-09 15:37:11 +0000 | [diff] [blame] | 317 | verify_ex_errcode notnull-3.4b SQLITE_CONSTRAINT_NOTNULL |
drh | ef6764a | 2002-01-30 04:32:00 +0000 | [diff] [blame] | 318 | do_test notnull-3.5 { |
| 319 | catchsql { |
| 320 | DELETE FROM t1; |
drh | 1c92853 | 2002-01-31 15:54:21 +0000 | [diff] [blame] | 321 | INSERT OR ABORT INTO t1(b,c,d,e) VALUES(2,3,4,5); |
drh | ef6764a | 2002-01-30 04:32:00 +0000 | [diff] [blame] | 322 | SELECT * FROM t1 order by a; |
| 323 | } |
drh | 483750b | 2003-01-29 18:46:51 +0000 | [diff] [blame] | 324 | } {1 {t1.a may not be NULL}} |
drh | 433dccf | 2013-02-09 15:37:11 +0000 | [diff] [blame] | 325 | verify_ex_errcode notnull-3.5b SQLITE_CONSTRAINT_NOTNULL |
drh | ef6764a | 2002-01-30 04:32:00 +0000 | [diff] [blame] | 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; |
drh | 1c92853 | 2002-01-31 15:54:21 +0000 | [diff] [blame] | 336 | INSERT OR IGNORE INTO t1(a,c,d,e) VALUES(1,3,4,5); |
drh | ef6764a | 2002-01-30 04:32:00 +0000 | [diff] [blame] | 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; |
drh | 1c92853 | 2002-01-31 15:54:21 +0000 | [diff] [blame] | 343 | INSERT OR REPLACE INTO t1(a,c,d,e) VALUES(1,3,4,5); |
drh | ef6764a | 2002-01-30 04:32:00 +0000 | [diff] [blame] | 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; |
drh | 1c92853 | 2002-01-31 15:54:21 +0000 | [diff] [blame] | 350 | INSERT OR ABORT INTO t1(a,c,d,e) VALUES(1,3,4,5); |
drh | ef6764a | 2002-01-30 04:32:00 +0000 | [diff] [blame] | 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 | } |
drh | 483750b | 2003-01-29 18:46:51 +0000 | [diff] [blame] | 360 | } {1 {t1.b may not be NULL}} |
drh | 433dccf | 2013-02-09 15:37:11 +0000 | [diff] [blame] | 361 | verify_ex_errcode notnull-3.10b SQLITE_CONSTRAINT_NOTNULL |
drh | ef6764a | 2002-01-30 04:32:00 +0000 | [diff] [blame] | 362 | do_test notnull-3.11 { |
| 363 | catchsql { |
| 364 | DELETE FROM t1; |
drh | 1c92853 | 2002-01-31 15:54:21 +0000 | [diff] [blame] | 365 | INSERT OR IGNORE INTO t1(a,b,c,d,e) VALUES(1,null,3,4,5); |
drh | ef6764a | 2002-01-30 04:32:00 +0000 | [diff] [blame] | 366 | SELECT * FROM t1 order by a; |
| 367 | } |
| 368 | } {0 {}} |
| 369 | do_test notnull-3.12 { |
| 370 | catchsql { |
| 371 | DELETE FROM t1; |
drh | 1c92853 | 2002-01-31 15:54:21 +0000 | [diff] [blame] | 372 | INSERT OR REPLACE INTO t1(a,b,c,d,e) VALUES(1,null,3,4,5); |
drh | ef6764a | 2002-01-30 04:32:00 +0000 | [diff] [blame] | 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; |
drh | 1c92853 | 2002-01-31 15:54:21 +0000 | [diff] [blame] | 386 | INSERT OR IGNORE INTO t1(a,b,c,d,e) VALUES(1,2,null,4,5); |
drh | ef6764a | 2002-01-30 04:32:00 +0000 | [diff] [blame] | 387 | SELECT * FROM t1 order by a; |
| 388 | } |
| 389 | } {0 {}} |
| 390 | do_test notnull-3.15 { |
| 391 | catchsql { |
| 392 | DELETE FROM t1; |
drh | 1c92853 | 2002-01-31 15:54:21 +0000 | [diff] [blame] | 393 | INSERT OR REPLACE INTO t1(a,b,c,d,e) VALUES(1,2,null,4,5); |
drh | ef6764a | 2002-01-30 04:32:00 +0000 | [diff] [blame] | 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; |
drh | 1c92853 | 2002-01-31 15:54:21 +0000 | [diff] [blame] | 400 | INSERT OR ABORT INTO t1(a,b,c,d,e) VALUES(1,2,null,4,5); |
drh | ef6764a | 2002-01-30 04:32:00 +0000 | [diff] [blame] | 401 | SELECT * FROM t1 order by a; |
| 402 | } |
drh | 483750b | 2003-01-29 18:46:51 +0000 | [diff] [blame] | 403 | } {1 {t1.c may not be NULL}} |
drh | 433dccf | 2013-02-09 15:37:11 +0000 | [diff] [blame] | 404 | verify_ex_errcode notnull-3.16b SQLITE_CONSTRAINT_NOTNULL |
drh | ef6764a | 2002-01-30 04:32:00 +0000 | [diff] [blame] | 405 | do_test notnull-3.17 { |
| 406 | catchsql { |
| 407 | DELETE FROM t1; |
drh | 1c92853 | 2002-01-31 15:54:21 +0000 | [diff] [blame] | 408 | INSERT OR ABORT INTO t1(a,b,c,d,e) VALUES(1,2,3,null,5); |
drh | ef6764a | 2002-01-30 04:32:00 +0000 | [diff] [blame] | 409 | SELECT * FROM t1 order by a; |
| 410 | } |
drh | 483750b | 2003-01-29 18:46:51 +0000 | [diff] [blame] | 411 | } {1 {t1.d may not be NULL}} |
drh | 433dccf | 2013-02-09 15:37:11 +0000 | [diff] [blame] | 412 | verify_ex_errcode notnull-3.17b SQLITE_CONSTRAINT_NOTNULL |
drh | ef6764a | 2002-01-30 04:32:00 +0000 | [diff] [blame] | 413 | do_test notnull-3.18 { |
| 414 | catchsql { |
| 415 | DELETE FROM t1; |
drh | 1c92853 | 2002-01-31 15:54:21 +0000 | [diff] [blame] | 416 | INSERT OR ABORT INTO t1(a,b,c,e) VALUES(1,2,3,5); |
drh | ef6764a | 2002-01-30 04:32:00 +0000 | [diff] [blame] | 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 | } |
drh | 483750b | 2003-01-29 18:46:51 +0000 | [diff] [blame] | 433 | } {1 {t1.e may not be NULL}} |
drh | 433dccf | 2013-02-09 15:37:11 +0000 | [diff] [blame] | 434 | verify_ex_errcode notnull-3.20b SQLITE_CONSTRAINT_NOTNULL |
drh | ef6764a | 2002-01-30 04:32:00 +0000 | [diff] [blame] | 435 | do_test notnull-3.21 { |
| 436 | catchsql { |
| 437 | DELETE FROM t1; |
drh | 1c92853 | 2002-01-31 15:54:21 +0000 | [diff] [blame] | 438 | INSERT OR REPLACE INTO t1(e,d,c,b,a) VALUES(1,2,3,null,5); |
drh | ef6764a | 2002-01-30 04:32:00 +0000 | [diff] [blame] | 439 | SELECT * FROM t1 order by a; |
| 440 | } |
| 441 | } {0 {5 5 3 2 1}} |
| 442 | |
| 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 | } |
drh | 483750b | 2003-01-29 18:46:51 +0000 | [diff] [blame] | 450 | } {1 {t1.a may not be NULL}} |
drh | 433dccf | 2013-02-09 15:37:11 +0000 | [diff] [blame] | 451 | verify_ex_errcode notnull-4.1b SQLITE_CONSTRAINT_NOTNULL |
drh | ef6764a | 2002-01-30 04:32:00 +0000 | [diff] [blame] | 452 | do_test notnull-4.2 { |
| 453 | catchsql { |
| 454 | DELETE FROM t1; |
| 455 | INSERT INTO t1 VALUES(1,2,3,4,5); |
drh | 1c92853 | 2002-01-31 15:54:21 +0000 | [diff] [blame] | 456 | UPDATE OR REPLACE t1 SET a=null; |
drh | ef6764a | 2002-01-30 04:32:00 +0000 | [diff] [blame] | 457 | SELECT * FROM t1 ORDER BY a; |
| 458 | } |
drh | 483750b | 2003-01-29 18:46:51 +0000 | [diff] [blame] | 459 | } {1 {t1.a may not be NULL}} |
drh | 433dccf | 2013-02-09 15:37:11 +0000 | [diff] [blame] | 460 | verify_ex_errcode notnull-4.2b SQLITE_CONSTRAINT_NOTNULL |
drh | ef6764a | 2002-01-30 04:32:00 +0000 | [diff] [blame] | 461 | do_test notnull-4.3 { |
| 462 | catchsql { |
| 463 | DELETE FROM t1; |
| 464 | INSERT INTO t1 VALUES(1,2,3,4,5); |
drh | 1c92853 | 2002-01-31 15:54:21 +0000 | [diff] [blame] | 465 | UPDATE OR IGNORE t1 SET a=null; |
drh | ef6764a | 2002-01-30 04:32:00 +0000 | [diff] [blame] | 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); |
drh | 1c92853 | 2002-01-31 15:54:21 +0000 | [diff] [blame] | 473 | UPDATE OR ABORT t1 SET a=null; |
drh | ef6764a | 2002-01-30 04:32:00 +0000 | [diff] [blame] | 474 | SELECT * FROM t1 ORDER BY a; |
| 475 | } |
drh | 483750b | 2003-01-29 18:46:51 +0000 | [diff] [blame] | 476 | } {1 {t1.a may not be NULL}} |
drh | 433dccf | 2013-02-09 15:37:11 +0000 | [diff] [blame] | 477 | verify_ex_errcode notnull-4.4b SQLITE_CONSTRAINT_NOTNULL |
drh | ef6764a | 2002-01-30 04:32:00 +0000 | [diff] [blame] | 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 | } |
drh | 483750b | 2003-01-29 18:46:51 +0000 | [diff] [blame] | 485 | } {1 {t1.b may not be NULL}} |
drh | 433dccf | 2013-02-09 15:37:11 +0000 | [diff] [blame] | 486 | verify_ex_errcode notnull-4.5b SQLITE_CONSTRAINT_NOTNULL |
drh | ef6764a | 2002-01-30 04:32:00 +0000 | [diff] [blame] | 487 | do_test notnull-4.6 { |
| 488 | catchsql { |
| 489 | DELETE FROM t1; |
| 490 | INSERT INTO t1 VALUES(1,2,3,4,5); |
drh | 1c92853 | 2002-01-31 15:54:21 +0000 | [diff] [blame] | 491 | UPDATE OR REPLACE t1 SET b=null, d=e, e=d; |
drh | ef6764a | 2002-01-30 04:32:00 +0000 | [diff] [blame] | 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); |
drh | 1c92853 | 2002-01-31 15:54:21 +0000 | [diff] [blame] | 499 | UPDATE OR IGNORE t1 SET b=null, d=e, e=d; |
drh | ef6764a | 2002-01-30 04:32:00 +0000 | [diff] [blame] | 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 | } |
drh | 483750b | 2003-01-29 18:46:51 +0000 | [diff] [blame] | 526 | } {1 {t1.e may not be NULL}} |
drh | 433dccf | 2013-02-09 15:37:11 +0000 | [diff] [blame] | 527 | verify_ex_errcode notnull-4.10b SQLITE_CONSTRAINT_NOTNULL |
drh | ef6764a | 2002-01-30 04:32:00 +0000 | [diff] [blame] | 528 | |
dan | 0fe6078 | 2009-09-09 11:43:43 +0000 | [diff] [blame] | 529 | # Test that bug 29ab7be99f is fixed. |
| 530 | # |
| 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 {t1.b may not be NULL}} |
drh | 433dccf | 2013-02-09 15:37:11 +0000 | [diff] [blame] | 546 | verify_ex_errcode notnull-5.2b SQLITE_CONSTRAINT_NOTNULL |
dan | 0fe6078 | 2009-09-09 11:43:43 +0000 | [diff] [blame] | 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 {t1.b may not be NULL}} |
drh | 433dccf | 2013-02-09 15:37:11 +0000 | [diff] [blame] | 559 | verify_ex_errcode notnull-5.4b SQLITE_CONSTRAINT_NOTNULL |
dan | 0fe6078 | 2009-09-09 11:43:43 +0000 | [diff] [blame] | 560 | do_test notnull-5.5 { |
| 561 | execsql { SELECT * FROM t1 } |
| 562 | } {1 2} |
| 563 | |
drh | ef6764a | 2002-01-30 04:32:00 +0000 | [diff] [blame] | 564 | finish_test |