xref: /sqlite-3.40.0/test/notnullfault.test (revision 8210233c)
1*e8dd6a4eSdan# 2021 February 15
2*e8dd6a4eSdan#
3*e8dd6a4eSdan# The author disclaims copyright to this source code.  In place of
4*e8dd6a4eSdan# a legal notice, here is a blessing:
5*e8dd6a4eSdan#
6*e8dd6a4eSdan#    May you do good and not evil.
7*e8dd6a4eSdan#    May you find forgiveness for yourself and forgive others.
8*e8dd6a4eSdan#    May you share freely, never taking more than you give.
9*e8dd6a4eSdan#
10*e8dd6a4eSdan#***********************************************************************
11*e8dd6a4eSdan# This file implements regression tests for SQLite library.  The
12*e8dd6a4eSdan# focus of this file is testing optimizations associated with "IS NULL"
13*e8dd6a4eSdan# and "IS NOT NULL" operators on columns with NOT NULL constraints.
14*e8dd6a4eSdan#
15*e8dd6a4eSdan
16*e8dd6a4eSdanset testdir [file dirname $argv0]
17*e8dd6a4eSdansource $testdir/tester.tcl
18*e8dd6a4eSdanset testprefix notnullfault
19*e8dd6a4eSdan
20*e8dd6a4eSdando_execsql_test 1.0 {
21*e8dd6a4eSdan  CREATE TABLE t1(a, b);
22*e8dd6a4eSdan  CREATE TABLE t2(c, d NOT NULL);
23*e8dd6a4eSdan}
24*e8dd6a4eSdanfaultsim_save_and_close
25*e8dd6a4eSdan
26*e8dd6a4eSdando_faultsim_test 1 -prep {
27*e8dd6a4eSdan  faultsim_restore_and_reopen
28*e8dd6a4eSdan} -body {
29*e8dd6a4eSdan  execsql {
30*e8dd6a4eSdan    SELECT * FROM t2 WHERE d NOT NULL
31*e8dd6a4eSdan  }
32*e8dd6a4eSdan} -test {
33*e8dd6a4eSdan  faultsim_test_result {0 {}}
34*e8dd6a4eSdan}
35*e8dd6a4eSdan
36*e8dd6a4eSdan#-------------------------------------------------------------------------
37*e8dd6a4eSdanreset_db
38*e8dd6a4eSdando_execsql_test 2.0 {
39*e8dd6a4eSdan  CREATE TABLE t1(a, b, c);
40*e8dd6a4eSdan  CREATE TABLE t2(a, b, c, PRIMARY KEY(a, b, c)) WITHOUT ROWID;
41*e8dd6a4eSdan}
42*e8dd6a4eSdanfaultsim_save_and_close
43*e8dd6a4eSdan
44*e8dd6a4eSdando_faultsim_test 2.1 -faults oom-t* -prep {
45*e8dd6a4eSdan  faultsim_restore_and_reopen
46*e8dd6a4eSdan} -body {
47*e8dd6a4eSdan  execsql {
48*e8dd6a4eSdan    SELECT dense_rank() OVER win FROM t2
49*e8dd6a4eSdan    WINDOW win AS (ORDER BY c IS NULL)
50*e8dd6a4eSdan  }
51*e8dd6a4eSdan} -test {
52*e8dd6a4eSdan  faultsim_test_result {0 {}}
53*e8dd6a4eSdan}
54*e8dd6a4eSdan
55*e8dd6a4eSdanfinish_test
56