]> git.ipfire.org Git - thirdparty/sqlite.git/commitdiff
Add further test cases for temp triggers to this branch.
authordan <Dan Kennedy>
Tue, 11 Nov 2025 16:50:31 +0000 (16:50 +0000)
committerdan <Dan Kennedy>
Tue, 11 Nov 2025 16:50:31 +0000 (16:50 +0000)
FossilOrigin-Name: c33899c09b7c998b95230678b0c71342b2a270557b8631788eb56c389ece2849

manifest
manifest.uuid
test/temptrigfault.tes [new file with mode: 0644]
test/temptrigger.test

index cab93edd17be3c1497c5a6fbd69a741562066954..5f144ced4bb4f44e390bd39c9e7bcafdd495557d 100644 (file)
--- 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.
index fc4172cf5356b8049cd87b8af1f7665f678926af..583d28b5fe4ceaf0b32a7009ea3ca3b6c859b4ce 100644 (file)
@@ -1 +1 @@
-68c8d04c39ce4a9f3534807fa75c6245628b8c69f57a22c5e17906134d5509e9
+c33899c09b7c998b95230678b0c71342b2a270557b8631788eb56c389ece2849
diff --git a/test/temptrigfault.tes b/test/temptrigfault.tes
new file mode 100644 (file)
index 0000000..4b124e1
--- /dev/null
@@ -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
index 3ae4408ab4d362b9ad86aa54d3259eb373cd854a..74390f3b88f53f0baf160241d25e9a7a518b3036 100644 (file)
@@ -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