github.com/jdgcs/sqlite3@v1.12.1-0.20210908114423-bc5f96e4dd51/testdata/tcl/notnull.test (about)

     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 {NOT NULL constraint failed: t1.a}}
    51  verify_ex_errcode notnull-1.2b SQLITE_CONSTRAINT_NOTNULL
    52  do_test notnull-1.3 {
    53    catchsql {
    54      DELETE FROM t1;
    55      INSERT OR IGNORE INTO t1(b,c,d,e) VALUES(2,3,4,5);
    56      SELECT * FROM t1 order by a;
    57    }
    58  } {0 {}}
    59  do_test notnull-1.4 {
    60    catchsql {
    61      DELETE FROM t1;
    62      INSERT OR REPLACE INTO t1(b,c,d,e) VALUES(2,3,4,5);
    63      SELECT * FROM t1 order by a;
    64    }
    65  } {1 {NOT NULL constraint failed: t1.a}}
    66  verify_ex_errcode notnull-1.4b SQLITE_CONSTRAINT_NOTNULL
    67  do_test notnull-1.5 {
    68    catchsql {
    69      DELETE FROM t1;
    70      INSERT OR ABORT INTO t1(b,c,d,e) VALUES(2,3,4,5);
    71      SELECT * FROM t1 order by a;
    72    }
    73  } {1 {NOT NULL constraint failed: t1.a}}
    74  verify_ex_errcode notnull-1.5b SQLITE_CONSTRAINT_NOTNULL
    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;
    85      INSERT OR IGNORE INTO t1(a,c,d,e) VALUES(1,3,4,5);
    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;
    92      INSERT OR REPLACE INTO t1(a,c,d,e) VALUES(1,3,4,5);
    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;
    99      INSERT OR ABORT INTO t1(a,c,d,e) VALUES(1,3,4,5);
   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    }
   109  } {1 {NOT NULL constraint failed: t1.b}}
   110  verify_ex_errcode notnull-1.10b SQLITE_CONSTRAINT_NOTNULL
   111  do_test notnull-1.11 {
   112    catchsql {
   113      DELETE FROM t1;
   114      INSERT OR IGNORE INTO t1(a,b,c,d,e) VALUES(1,null,3,4,5);
   115      SELECT * FROM t1 order by a;
   116    }
   117  } {0 {}}
   118  do_test notnull-1.12 {
   119    catchsql {
   120      DELETE FROM t1;
   121      INSERT OR REPLACE INTO t1(a,b,c,d,e) VALUES(1,null,3,4,5);
   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;
   135      INSERT OR IGNORE INTO t1(a,b,c,d,e) VALUES(1,2,null,4,5);
   136      SELECT * FROM t1 order by a;
   137    }
   138  } {0 {}}
   139  do_test notnull-1.15 {
   140    catchsql {
   141      DELETE FROM t1;
   142      INSERT OR REPLACE INTO t1(a,b,c,d,e) VALUES(1,2,null,4,5);
   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;
   149      INSERT OR ABORT INTO t1(a,b,c,d,e) VALUES(1,2,null,4,5);
   150      SELECT * FROM t1 order by a;
   151    }
   152  } {1 {NOT NULL constraint failed: t1.c}}
   153  verify_ex_errcode notnull-1.16b SQLITE_CONSTRAINT_NOTNULL
   154  do_test notnull-1.17 {
   155    catchsql {
   156      DELETE FROM t1;
   157      INSERT OR ABORT INTO t1(a,b,c,d,e) VALUES(1,2,3,null,5);
   158      SELECT * FROM t1 order by a;
   159    }
   160  } {1 {NOT NULL constraint failed: t1.d}}
   161  verify_ex_errcode notnull-1.17b SQLITE_CONSTRAINT_NOTNULL
   162  do_test notnull-1.18 {
   163    catchsql {
   164      DELETE FROM t1;
   165      INSERT OR ABORT INTO t1(a,b,c,e) VALUES(1,2,3,5);
   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    }
   182  } {1 {NOT NULL constraint failed: t1.e}}
   183  verify_ex_errcode notnull-1.20b SQLITE_CONSTRAINT_NOTNULL
   184  do_test notnull-1.21 {
   185    catchsql {
   186      DELETE FROM t1;
   187      INSERT OR REPLACE INTO t1(e,d,c,b,a) VALUES(1,2,3,null,5);
   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    }
   199  } {1 {NOT NULL constraint failed: t1.a}}
   200  verify_ex_errcode notnull-2.1b SQLITE_CONSTRAINT_NOTNULL
   201  do_test notnull-2.2 {
   202    catchsql {
   203      DELETE FROM t1;
   204      INSERT INTO t1 VALUES(1,2,3,4,5);
   205      UPDATE OR REPLACE t1 SET a=null;
   206      SELECT * FROM t1 ORDER BY a;
   207    }
   208  } {1 {NOT NULL constraint failed: t1.a}}
   209  verify_ex_errcode notnull-2.2b SQLITE_CONSTRAINT_NOTNULL
   210  do_test notnull-2.3 {
   211    catchsql {
   212      DELETE FROM t1;
   213      INSERT INTO t1 VALUES(1,2,3,4,5);
   214      UPDATE OR IGNORE t1 SET a=null;
   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);
   222      UPDATE OR ABORT t1 SET a=null;
   223      SELECT * FROM t1 ORDER BY a;
   224    }
   225  } {1 {NOT NULL constraint failed: t1.a}}
   226  verify_ex_errcode notnull-2.4b SQLITE_CONSTRAINT_NOTNULL
   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    }
   234  } {1 {NOT NULL constraint failed: t1.b}}
   235  verify_ex_errcode notnull-2.6b SQLITE_CONSTRAINT_NOTNULL
   236  do_test notnull-2.6 {
   237    catchsql {
   238      DELETE FROM t1;
   239      INSERT INTO t1 VALUES(1,2,3,4,5);
   240      UPDATE OR REPLACE t1 SET b=null, d=e, e=d;
   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);
   248      UPDATE OR IGNORE t1 SET b=null, d=e, e=d;
   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    }
   275  } {1 {NOT NULL constraint failed: t1.e}}
   276  verify_ex_errcode notnull-2.10b SQLITE_CONSTRAINT_NOTNULL
   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    }
   301  } {1 {NOT NULL constraint failed: t1.a}}
   302  verify_ex_errcode notnull-3.2b SQLITE_CONSTRAINT_NOTNULL
   303  do_test notnull-3.3 {
   304    catchsql {
   305      DELETE FROM t1;
   306      INSERT OR IGNORE INTO t1(b,c,d,e) VALUES(2,3,4,5);
   307      SELECT * FROM t1 order by a;
   308    }
   309  } {0 {}}
   310  do_test notnull-3.4 {
   311    catchsql {
   312      DELETE FROM t1;
   313      INSERT OR REPLACE INTO t1(b,c,d,e) VALUES(2,3,4,5);
   314      SELECT * FROM t1 order by a;
   315    }
   316  } {1 {NOT NULL constraint failed: t1.a}}
   317  verify_ex_errcode notnull-3.4b SQLITE_CONSTRAINT_NOTNULL
   318  do_test notnull-3.5 {
   319    catchsql {
   320      DELETE FROM t1;
   321      INSERT OR ABORT INTO t1(b,c,d,e) VALUES(2,3,4,5);
   322      SELECT * FROM t1 order by a;
   323    }
   324  } {1 {NOT NULL constraint failed: t1.a}}
   325  verify_ex_errcode notnull-3.5b SQLITE_CONSTRAINT_NOTNULL
   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;
   336      INSERT OR IGNORE INTO t1(a,c,d,e) VALUES(1,3,4,5);
   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;
   343      INSERT OR REPLACE INTO t1(a,c,d,e) VALUES(1,3,4,5);
   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;
   350      INSERT OR ABORT INTO t1(a,c,d,e) VALUES(1,3,4,5);
   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    }
   360  } {1 {NOT NULL constraint failed: t1.b}}
   361  verify_ex_errcode notnull-3.10b SQLITE_CONSTRAINT_NOTNULL
   362  do_test notnull-3.11 {
   363    catchsql {
   364      DELETE FROM t1;
   365      INSERT OR IGNORE INTO t1(a,b,c,d,e) VALUES(1,null,3,4,5);
   366      SELECT * FROM t1 order by a;
   367    }
   368  } {0 {}}
   369  do_test notnull-3.12 {
   370    catchsql {
   371      DELETE FROM t1;
   372      INSERT OR REPLACE INTO t1(a,b,c,d,e) VALUES(1,null,3,4,5);
   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;
   386      INSERT OR IGNORE INTO t1(a,b,c,d,e) VALUES(1,2,null,4,5);
   387      SELECT * FROM t1 order by a;
   388    }
   389  } {0 {}}
   390  do_test notnull-3.15 {
   391    catchsql {
   392      DELETE FROM t1;
   393      INSERT OR REPLACE INTO t1(a,b,c,d,e) VALUES(1,2,null,4,5);
   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;
   400      INSERT OR ABORT INTO t1(a,b,c,d,e) VALUES(1,2,null,4,5);
   401      SELECT * FROM t1 order by a;
   402    }
   403  } {1 {NOT NULL constraint failed: t1.c}}
   404  verify_ex_errcode notnull-3.16b SQLITE_CONSTRAINT_NOTNULL
   405  do_test notnull-3.17 {
   406    catchsql {
   407      DELETE FROM t1;
   408      INSERT OR ABORT INTO t1(a,b,c,d,e) VALUES(1,2,3,null,5);
   409      SELECT * FROM t1 order by a;
   410    }
   411  } {1 {NOT NULL constraint failed: t1.d}}
   412  verify_ex_errcode notnull-3.17b SQLITE_CONSTRAINT_NOTNULL
   413  do_test notnull-3.18 {
   414    catchsql {
   415      DELETE FROM t1;
   416      INSERT OR ABORT INTO t1(a,b,c,e) VALUES(1,2,3,5);
   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    }
   433  } {1 {NOT NULL constraint failed: t1.e}}
   434  verify_ex_errcode notnull-3.20b SQLITE_CONSTRAINT_NOTNULL
   435  do_test notnull-3.21 {
   436    catchsql {
   437      DELETE FROM t1;
   438      INSERT OR REPLACE INTO t1(e,d,c,b,a) VALUES(1,2,3,null,5);
   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    }
   450  } {1 {NOT NULL constraint failed: t1.a}}
   451  verify_ex_errcode notnull-4.1b SQLITE_CONSTRAINT_NOTNULL
   452  do_test notnull-4.2 {
   453    catchsql {
   454      DELETE FROM t1;
   455      INSERT INTO t1 VALUES(1,2,3,4,5);
   456      UPDATE OR REPLACE t1 SET a=null;
   457      SELECT * FROM t1 ORDER BY a;
   458    }
   459  } {1 {NOT NULL constraint failed: t1.a}}
   460  verify_ex_errcode notnull-4.2b SQLITE_CONSTRAINT_NOTNULL
   461  do_test notnull-4.3 {
   462    catchsql {
   463      DELETE FROM t1;
   464      INSERT INTO t1 VALUES(1,2,3,4,5);
   465      UPDATE OR IGNORE t1 SET a=null;
   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);
   473      UPDATE OR ABORT t1 SET a=null;
   474      SELECT * FROM t1 ORDER BY a;
   475    }
   476  } {1 {NOT NULL constraint failed: t1.a}}
   477  verify_ex_errcode notnull-4.4b SQLITE_CONSTRAINT_NOTNULL
   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    }
   485  } {1 {NOT NULL constraint failed: t1.b}}
   486  verify_ex_errcode notnull-4.5b SQLITE_CONSTRAINT_NOTNULL
   487  do_test notnull-4.6 {
   488    catchsql {
   489      DELETE FROM t1;
   490      INSERT INTO t1 VALUES(1,2,3,4,5);
   491      UPDATE OR REPLACE t1 SET b=null, d=e, e=d;
   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);
   499      UPDATE OR IGNORE t1 SET b=null, d=e, e=d;
   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    }
   526  } {1 {NOT NULL constraint failed: t1.e}}
   527  verify_ex_errcode notnull-4.10b SQLITE_CONSTRAINT_NOTNULL
   528  
   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 {NOT NULL constraint failed: t1.b}}
   546  verify_ex_errcode notnull-5.2b SQLITE_CONSTRAINT_NOTNULL
   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 {NOT NULL constraint failed: t1.b}}
   559  verify_ex_errcode notnull-5.4b SQLITE_CONSTRAINT_NOTNULL
   560  do_test notnull-5.5 {
   561    execsql { SELECT * FROM t1 }
   562  } {1 2}
   563  
   564  #-------------------------------------------------------------------------
   565  # Check that UNIQUE NOT NULL indexes are always recognized as such.
   566  #
   567  proc uses_op_next {sql} {
   568    db eval "EXPLAIN $sql" a {
   569      if {$a(opcode)=="Next"} { return 1 }
   570    }
   571    return 0
   572  }
   573  
   574  proc do_uses_op_next_test {tn sql res} {
   575    uplevel [list do_test $tn [list uses_op_next $sql] $res]
   576  }
   577  
   578  reset_db
   579  do_execsql_test notnull-6.0 {
   580    CREATE TABLE t1(a UNIQUE);
   581    CREATE TABLE t2(a NOT NULL UNIQUE);
   582    CREATE TABLE t3(a UNIQUE NOT NULL);
   583    CREATE TABLE t4(a NOT NULL);
   584    CREATE UNIQUE INDEX t4a ON t4(a);
   585  
   586    CREATE TABLE t5(a PRIMARY KEY);
   587    CREATE TABLE t6(a PRIMARY KEY NOT NULL);
   588    CREATE TABLE t7(a NOT NULL PRIMARY KEY);
   589    CREATE TABLE t8(a PRIMARY KEY) WITHOUT ROWID;
   590  
   591    CREATE TABLE t9(a PRIMARY KEY UNIQUE NOT NULL);
   592    CREATE TABLE t10(a UNIQUE PRIMARY KEY NOT NULL);
   593  }
   594  
   595  do_uses_op_next_test notnull-6.1 "SELECT * FROM t1 WHERE a IS ?" 1
   596  do_uses_op_next_test notnull-6.2 "SELECT * FROM t2 WHERE a IS ?" 0
   597  do_uses_op_next_test notnull-6.3 "SELECT * FROM t3 WHERE a IS ?" 0
   598  do_uses_op_next_test notnull-6.4 "SELECT * FROM t4 WHERE a IS ?" 0
   599  
   600  do_uses_op_next_test notnull-6.5 "SELECT * FROM t5 WHERE a IS ?" 1
   601  do_uses_op_next_test notnull-6.6 "SELECT * FROM t6 WHERE a IS ?" 0
   602  do_uses_op_next_test notnull-6.7 "SELECT * FROM t7 WHERE a IS ?" 0
   603  do_uses_op_next_test notnull-6.8 "SELECT * FROM t8 WHERE a IS ?" 0
   604  
   605  do_uses_op_next_test notnull-6.9 "SELECT * FROM t8 WHERE a IS ?" 0
   606  do_uses_op_next_test notnull-6.10 "SELECT * FROM t8 WHERE a IS ?" 0
   607  
   608  finish_test