From: dan Date: Tue, 11 Nov 2025 16:50:31 +0000 (+0000) Subject: Add further test cases for temp triggers to this branch. X-Git-Url: http://git.ipfire.org/cgi-bin/gitweb.cgi?a=commitdiff_plain;h=055cc9c9b95bb4e89a0e723139570ddc36fe8650;p=thirdparty%2Fsqlite.git Add further test cases for temp triggers to this branch. FossilOrigin-Name: c33899c09b7c998b95230678b0c71342b2a270557b8631788eb56c389ece2849 --- diff --git a/manifest b/manifest index cab93edd17..5f144ced4b 100644 --- a/manifest +++ b/manifest @@ -1,5 +1,5 @@ -C Merge\slatest\strunk\swith\sthis\sbranch. -D 2025-11-11T14:57:12.131 +C Add\sfurther\stest\scases\sfor\stemp\striggers\sto\sthis\sbranch. +D 2025-11-11T16:50:31.785 F .fossil-settings/binary-glob 61195414528fb3ea9693577e1980230d78a1f8b0a54c78cf1b9b24d0a409ed6a x F .fossil-settings/empty-dirs dbb81e8fc0401ac46a1491ab34a7f2c7c0452f2f06b54ebb845d024ca8283ef1 F .fossil-settings/ignore-glob 35175cdfcf539b2318cb04a9901442804be81cd677d8b889fcc9149c21f239ea @@ -1686,7 +1686,8 @@ F test/tempfault.test 0c0d349c9a99bf5f374655742577f8712c647900 F test/temptable.test d2c9b87a54147161bcd1822e30c1d1cd891e5b30 F test/temptable2.test 76821347810ecc88203e6ef0dd6897b6036ac788e9dd3e6b04fd4d1631311a16 F test/temptable3.test d11a0974e52b347e45ee54ef1923c91ed91e4637 -F test/temptrigger.test 62c0d29ff3fb7fa40c136dcfac3d992c5a6d3b1699459e65a4c1d0feb1258120 +F test/temptrigfault.tes fc5918e64f3867156fefe7cfca9d8e1f495134a5229b2b511b0dc11c07f2eab4 +F test/temptrigger.test a00f258ed8d21a0e8fd4f322f15e8cfb5cef2e43655670e07a753e3fb4769d61 F test/tester.tcl 463ae33b8bf75ac77451df19bd65e7c415c2e9891227c7c9e657d0a2d8e1074a F test/testloadext.c 862b848783eaed9985fbce46c65cd214664376b549fae252b364d5d1ef350a27 F test/testrunner.tcl 86179a8e78997e9257cb8f738c5624cb23897da5297855578ba74715e64f1602 x @@ -2167,8 +2168,8 @@ F tool/version-info.c 33d0390ef484b3b1cb685d59362be891ea162123cea181cb8e6d2cf6dd F tool/warnings-clang.sh bbf6a1e685e534c92ec2bfba5b1745f34fb6f0bc2a362850723a9ee87c1b31a7 F tool/warnings.sh d924598cf2f55a4ecbc2aeb055c10bd5f48114793e7ba25f9585435da29e7e98 F tool/win/sqlite.vsix deb315d026cc8400325c5863eef847784a219a2f -P 0b849623f855ae6a8150a85249b25aa43109ae063f7b4a42a9c77b2838bf5708 2c31176607f02a73cf2626cda2dd0711ae74bdf0b4520d4c84ff299c860e419e -R a56a99e779d31aeb932a4de2782e2a61 +P 68c8d04c39ce4a9f3534807fa75c6245628b8c69f57a22c5e17906134d5509e9 +R d67008a2285b4d7f4d4aaaac8c56cde1 U dan -Z a367ae9c9f59cf57d85093da50a77a81 +Z 8e8813a92e96126540886525585fa739 # Remove this line to create a well-formed Fossil manifest. diff --git a/manifest.uuid b/manifest.uuid index fc4172cf53..583d28b5fe 100644 --- a/manifest.uuid +++ b/manifest.uuid @@ -1 +1 @@ -68c8d04c39ce4a9f3534807fa75c6245628b8c69f57a22c5e17906134d5509e9 +c33899c09b7c998b95230678b0c71342b2a270557b8631788eb56c389ece2849 diff --git a/test/temptrigfault.tes b/test/temptrigfault.tes new file mode 100644 index 0000000000..4b124e1f7e --- /dev/null +++ b/test/temptrigfault.tes @@ -0,0 +1,120 @@ +# 2025 November 11 +# +# 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. +# +#*********************************************************************** +# + +set testdir [file dirname $argv0] +source $testdir/tester.tcl +set testprefix temptrigfault + +forcedelete test.db2 +do_execsql_test 1.0 { + CREATE TABLE t1(x, y); + ATTACH 'test.db2' AS aux; + CREATE TABLE aux.t1(x, y); +} + +do_faultsim_test 1.1 -faults oom* -prep { +} -body { + execsql { + CREATE TEMP TRIGGER tmptrig AFTER INSERT ON t1 BEGIN + INSERT INTO aux.t1 VALUES(new.x, new.y); + END; + } +} -test { + faultsim_test_result {0 {}} + catchsql { DROP TRIGGER tmptrig } +} + +do_execsql_test 2.0 { + CREATE TEMP TRIGGER tmptrig AFTER INSERT ON t1 BEGIN + INSERT INTO aux.t1 VALUES(new.x, new.y); + END; +} + +do_faultsim_test 2 -faults oom* -prep { +} -body { + execsql { + INSERT INTO t1 VALUES('x', 'y'); + } +} -test { + faultsim_test_result {0 {}} +} + +do_execsql_test 3.0.1 { + SELECT * FROM t1; + DELETE FROM t1; + DELETE FROM aux.t1; +} [db eval {SELECT * FROM aux.t1}] + +do_execsql_test 3.0.2 { + CREATE TEMP TRIGGER tmptrig2 AFTER INSERT ON aux.t1 BEGIN + INSERT INTO t1 VALUES(new.x||'2', new.y||'2'); + END; +} + +do_faultsim_test 3 -faults oom* -prep { +} -body { + execsql { + INSERT INTO aux.t1 VALUES('aaa', 'bbb'); + } +} -test { + faultsim_test_result {0 {}} +} + +proc repeatlist {list n} { + set ret [list] + for {set i 0} {$i < $n} {incr i} { + set ret [concat $ret $list] + } + set ret +} + +do_execsql_test 3.x.1 { + SELECT * FROM main.t1; +} [repeatlist {aaa2 bbb2} 5] + +do_execsql_test 3.x.2 { + SELECT * FROM aux.t1; +} [repeatlist {aaa bbb aaa2 bbb2} 5] + +faultsim_save_and_close +do_faultsim_test 4 -faults oom* -prep { + faultsim_restore_and_reopen + execsql { ATTACH 'test.db2' AS aux; } +} -body { + execsql { + CREATE TEMP TRIGGER xyz AFTER DELETE ON main.t1 BEGIN + DELETE FROM aux.t1 WHERE rowid=old.rowid; + END; + + DELETE FROM t1 WHERE rowid=2; + } +} -test { + faultsim_test_result {0 {}} {1 {unable to open a temporary database file for storing temporary tables}} +} + +faultsim_save_and_close +do_faultsim_test 5 -faults oom* -prep { + faultsim_restore_and_reopen + execsql { ATTACH 'test.db2' AS aux; } +} -body { + execsql { + CREATE TEMP TRIGGER xyz AFTER UPDATE ON aux.t1 BEGIN + UPDATE main.t1 SET x=new.x, y=new.y WHERE rowid=new.rowid; + END; + UPDATE aux.t1 SET x=x||x WHERE rowid=1+abs(random() % 5); + } +} -test { + faultsim_test_result {0 {}} {1 {unable to open a temporary database file for storing temporary tables}} +} + + +finish_test diff --git a/test/temptrigger.test b/test/temptrigger.test index 3ae4408ab4..74390f3b88 100644 --- a/test/temptrigger.test +++ b/test/temptrigger.test @@ -330,6 +330,7 @@ do_catchsql_test 7.6 { # Check that temp triggers may INSERT/UPDATE/DELETE to fully qualified # table names. reset_db +forcedelete {*}[glob -nocomplain *mj*] forcedelete test.db2 do_execsql_test 8.0 { ATTACH 'test.db2' AS aux; @@ -391,4 +392,75 @@ do_execsql_test 8.3.2 { do_execsql_test 8.3.3 { SELECT * FROM t1 } {a b} +#------------------------------------------------------------------------- +reset_db +set nDb 8 +do_test 9.0 { + for {set ii 0} {$ii < $nDb} {incr ii} { + db eval "ATTACH ':memory:' AS db$ii" + db eval "CREATE TABLE db$ii.tbl(a, b, c)" + } + + for {set ii 0} {$ii < ($nDb-1)} {incr ii} { + set jj [expr $ii+1] + db eval " + CREATE TEMP TRIGGER tr$ii AFTER INSERT ON db$ii.tbl BEGIN + INSERT INTO db$jj.tbl VALUES(new.b, new.c, new.a); + END; + " + } +} {} + +do_execsql_test 9.1 { INSERT INTO db0.tbl VALUES('a', 'b', 'c'); } +do_execsql_test 9.1.1 { SELECT * FROM db0.tbl } {a b c} +do_execsql_test 9.1.2 { SELECT * FROM db1.tbl } {b c a} +do_execsql_test 9.1.3 { SELECT * FROM db2.tbl } {c a b} +do_execsql_test 9.1.1 { SELECT * FROM db3.tbl } {a b c} +do_execsql_test 9.1.2 { SELECT * FROM db4.tbl } {b c a} +do_execsql_test 9.1.3 { SELECT * FROM db5.tbl } {c a b} +do_execsql_test 9.1.1 { SELECT * FROM db6.tbl } {a b c} +do_execsql_test 9.1.2 { SELECT * FROM db7.tbl } {b c a} + +do_test 9.2 { + for {set ii 0} {$ii < ($nDb-1)} {incr ii} { + set jj [expr $ii+1] + db eval " + CREATE TEMP TRIGGER tru$ii AFTER UPDATE ON db$ii.tbl BEGIN + UPDATE db$jj.tbl SET a=new.b, b=new.c, c=new.a; + END; + " + } +} {} + +do_execsql_test 9.3 { UPDATE db0.tbl SET a=1, b=2, c=3 } +do_execsql_test 9.3.1 { SELECT * FROM db0.tbl } {1 2 3} +do_execsql_test 9.3.2 { SELECT * FROM db1.tbl } {2 3 1} +do_execsql_test 9.3.3 { SELECT * FROM db2.tbl } {3 1 2} +do_execsql_test 9.3.1 { SELECT * FROM db3.tbl } {1 2 3} +do_execsql_test 9.3.2 { SELECT * FROM db4.tbl } {2 3 1} +do_execsql_test 9.3.3 { SELECT * FROM db5.tbl } {3 1 2} +do_execsql_test 9.3.1 { SELECT * FROM db6.tbl } {1 2 3} +do_execsql_test 9.3.2 { SELECT * FROM db7.tbl } {2 3 1} + +do_test 9.4 { + for {set ii 0} {$ii < ($nDb-1)} {incr ii} { + set jj [expr $ii+1] + db eval " + CREATE TEMP TRIGGER trd$ii BEFORE DELETE ON db$ii.tbl BEGIN + DELETE FROM db$jj.tbl; + END; + " + } +} {} + +do_execsql_test 9.5 { DELETE FROM db0.tbl } +do_execsql_test 9.5.1 { SELECT * FROM db0.tbl } {} +do_execsql_test 9.5.2 { SELECT * FROM db1.tbl } {} +do_execsql_test 9.5.3 { SELECT * FROM db2.tbl } {} +do_execsql_test 9.5.1 { SELECT * FROM db3.tbl } {} +do_execsql_test 9.5.2 { SELECT * FROM db4.tbl } {} +do_execsql_test 9.5.3 { SELECT * FROM db5.tbl } {} +do_execsql_test 9.5.1 { SELECT * FROM db6.tbl } {} +do_execsql_test 9.5.2 { SELECT * FROM db7.tbl } {} + finish_test