1c2a878edSdan# 2021 February 18 2c2a878edSdan# 3c2a878edSdan# The author disclaims copyright to this source code. In place of 4c2a878edSdan# a legal notice, here is a blessing: 5c2a878edSdan# 6c2a878edSdan# May you do good and not evil. 7c2a878edSdan# May you find forgiveness for yourself and forgive others. 8c2a878edSdan# May you share freely, never taking more than you give. 9c2a878edSdan# 10c2a878edSdan#************************************************************************* 11c2a878edSdan# 12c2a878edSdan 13c2a878edSdanset testdir [file dirname $argv0] 14c2a878edSdansource $testdir/tester.tcl 15c2a878edSdansource $testdir/malloc_common.tcl 16c2a878edSdanset testprefix altermalloc3 17c2a878edSdan 18c2a878edSdan# If SQLITE_OMIT_ALTERTABLE is defined, omit this file. 19c2a878edSdanifcapable !altertable { 20c2a878edSdan finish_test 21c2a878edSdan return 22c2a878edSdan} 23c2a878edSdan 24*ca29bbceSdan 257b57aa3dSdanset ::TMPDBERROR [list 1 \ 267b57aa3dSdan {unable to open a temporary database file for storing temporary tables} 277b57aa3dSdan] 287b57aa3dSdan 29c2a878edSdando_execsql_test 1.0 { 301fffa73eSdan CREATE TABLE x1( 311fffa73eSdan one, two, three, PRIMARY KEY(one), 321fffa73eSdan CHECK (three!="xyz"), CHECK (two!="one") 331fffa73eSdan ) WITHOUT ROWID; 341fffa73eSdan CREATE INDEX x1i ON x1(one+"two"+"four") WHERE "five"; 351fffa73eSdan CREATE TEMP TRIGGER AFTER INSERT ON x1 BEGIN 361fffa73eSdan UPDATE x1 SET two=new.three || "new" WHERE one=new.one||""; 371fffa73eSdan END; 38c2a878edSdan CREATE TABLE t1(a, b, c, d, PRIMARY KEY(d, b)) WITHOUT ROWID; 39c2a878edSdan INSERT INTO t1 VALUES(1, 2, 3, 4); 40c2a878edSdan} 41c2a878edSdanfaultsim_save_and_close 42c2a878edSdan 43c2a878edSdando_faultsim_test 1 -prep { 44c2a878edSdan faultsim_restore_and_reopen 45c2a878edSdan} -body { 46c2a878edSdan execsql { ALTER TABLE t1 DROP COLUMN c } 47c2a878edSdan} -test { 487b57aa3dSdan faultsim_test_result {0 {}} $::TMPDBERROR 49c2a878edSdan} 50c2a878edSdan 51*ca29bbceSdan 525a69d19eSdan#------------------------------------------------------------------------- 535a69d19eSdan# dbsqlfuzz e3dd84cda3848016a6a6024c7249d09bc2ef2615 545a69d19eSdan# 555a69d19eSdanreset_db 565a69d19eSdando_execsql_test 2.0 { 575a69d19eSdan CREATE TABLE t2(k,v); 585a69d19eSdan CREATE TRIGGER r2 AFTER INSERT ON t2 BEGIN 595a69d19eSdan UPDATE t2 SET (k,v)= ( 605a69d19eSdan (WITH cte1(a) AS ( SELECT 1 FROM ( SELECT * FROM t2 ) ) 615a69d19eSdan SELECT a FROM cte1 625a69d19eSdan ), 1); 635a69d19eSdan END; 64*ca29bbceSdan 65*ca29bbceSdan CREATE TRIGGER r1 AFTER INSERT ON t2 BEGIN 66*ca29bbceSdan UPDATE t2 SET k=1 FROM t2 AS one, t2 AS two NATURAL JOIN t2 AS three 67*ca29bbceSdan WHERE one.k=two.v; 68*ca29bbceSdan END; 695a69d19eSdan} 705a69d19eSdan 715a69d19eSdanfaultsim_save_and_close 725a69d19eSdanfaultsim_restore_and_reopen 735a69d19eSdan 745a69d19eSdando_execsql_test 2.1 { 755a69d19eSdan ALTER TABLE t2 RENAME TO t2x; 765a69d19eSdan} 775a69d19eSdan 785a69d19eSdando_faultsim_test 2.2 -prep { 795a69d19eSdan faultsim_restore_and_reopen 805a69d19eSdan db eval { SELECT * FROM sqlite_master } 815a69d19eSdan} -body { 825a69d19eSdan execsql { 835a69d19eSdan ALTER TABLE t2 RENAME TO t2x; 845a69d19eSdan } 855a69d19eSdan} -test { 867b57aa3dSdan faultsim_test_result {0 {}} $::TMPDBERROR 875a69d19eSdan} 88c2a878edSdan 89c2a878edSdanfinish_test 90