# 2021 November 16 # # The author disclaims copyright to this source code. In place of # a legal notice, here is a blessing: # # May you do good and not evil. # May you find forgiveness for yourself and forgive others. # May you share freely, never taking more than you give. # #*********************************************************************** # This file implements regression tests for SQLite library. # set testdir [file dirname $argv0] source $testdir/tester.tcl set testprefix alterfault # If SQLITE_OMIT_ALTERTABLE is defined, omit this file. ifcapable !altertable { finish_test return } do_execsql_test 1.0 { CREATE TABLE t1(a); } faultsim_save_and_close do_faultsim_test 1.1 -faults oom* -prep { faultsim_restore_and_reopen } -body { execsql { ALTER TABLE t1 ADD COLUMN b CHECK (a!=1) } } -test { faultsim_test_result {0 {}} } reset_db do_execsql_test 2.0 { CREATE TABLE x1(d, e CONSTRAINT abc NOT NULL, f); } faultsim_save_and_close foreach {tn sql} { 1 { ALTER TABLE x1 ADD CHECK (d!=1) } 2 { ALTER TABLE x1 ADD CONSTRAINT xyz CHECK (f>d+e); } 3 { ALTER TABLE x1 DROP CONSTRAINT abc } 4 { ALTER TABLE x1 ALTER f SET NOT NULL } 5 { ALTER TABLE x1 ALTER e DROP NOT NULL } } { do_faultsim_test 2.$tn -faults oom* -prep { faultsim_restore_and_reopen } -body { execsql $::sql } -test { faultsim_test_result {0 {}} } } # Test an OOM when returning an error. # do_faultsim_test 2.e -faults oom* -prep { faultsim_restore_and_reopen } -body { execsql { ALTER TABLE x1 DROP CONSTRAINT nosuchconstraint } } -test { faultsim_test_result \ {1 {no such constraint: nosuchconstraint}} \ {1 {SQL logic error}} } finish_test