notnull.test 14 KB

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