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