@@ -825,43 +825,52 @@ do_execsql_test_on_specific_db {:memory:} trigger-rename-table-on-clause {
825825 ALTER TABLE t1 RENAME TO t1_new;
826826 SELECT sql FROM sqlite_schema WHERE type='trigger' AND name='trg1';
827827} {{CREATE TRIGGER trg1 AFTER INSERT ON " t1_new" BEGIN
828- INSERT INTO " t1_new" VALUES (100, 'triggered');
829- END}}
828+ INSERT INTO " t1_new" VALUES (100, 'triggered');
829+ END}}
830830
831- # table-qualified refs in WHERE clause get rewritten
832- do_execsql_test_on_specific_db {:memory:} trigger-rename-table-qualified-refs {
831+ # table-qualified refs in WHEN clause cause error on rename (SQLite behavior)
832+ do_execsql_test_in_memory_any_error trigger-rename-table-qualified-refs-when-error {
833833 CREATE TABLE t1 (id INT, val TEXT);
834834 CREATE TRIGGER trg2 AFTER UPDATE ON t1 WHEN t1.id > 5 BEGIN
835835 UPDATE t1 SET val = 'updated' WHERE t1.id = NEW.id;
836836 END;
837837 ALTER TABLE t1 RENAME TO t1_new;
838+ }
839+
840+ # table-qualified refs in trigger body (not WHEN) get rewritten
841+ do_execsql_test_on_specific_db {:memory:} trigger-rename-table-qualified-refs-body {
842+ CREATE TABLE t1 (id INT, val TEXT);
843+ CREATE TRIGGER trg2 AFTER UPDATE ON t1 BEGIN
844+ UPDATE t1 SET val = 'updated' WHERE t1.id = NEW.id;
845+ END;
846+ ALTER TABLE t1 RENAME TO t1_new;
838847 SELECT sql FROM sqlite_schema WHERE type='trigger' AND name='trg2';
839- } {{CREATE TRIGGER trg2 AFTER UPDATE ON " t1_new" WHEN " t1_new " .id > 5 BEGIN
840- UPDATE " t1_new" SET val = 'updated' WHERE " t1_new" .id = NEW.id;
841- END}}
848+ } {{CREATE TRIGGER trg2 AFTER UPDATE ON " t1_new" BEGIN
849+ UPDATE " t1_new" SET val = 'updated' WHERE " t1_new" .id = NEW.id;
850+ END}}
842851
843852do_execsql_test_on_specific_db {:memory:} trigger-rename-upsert-clause {
844853 CREATE TABLE t1 (id INT PRIMARY KEY, val TEXT);
845854 CREATE TRIGGER trg3 AFTER INSERT ON t1 BEGIN
846- INSERT INTO t1 VALUES (100, 'x') ON CONFLICT(id) DO UPDATE SET val = t1.val || 'conflict';
855+ INSERT INTO t1 VALUES (100, 'x') ON CONFLICT (id) DO UPDATE SET val = t1.val || 'conflict';
847856 END;
848857 ALTER TABLE t1 RENAME TO t1_new;
849858 SELECT sql FROM sqlite_schema WHERE type='trigger' AND name='trg3';
850859} {{CREATE TRIGGER trg3 AFTER INSERT ON " t1_new" BEGIN
851- INSERT INTO " t1_new" VALUES (100, 'x') ON CONFLICT (id) DO UPDATE SET val = " t1_new" .val || 'conflict';
852- END}}
860+ INSERT INTO " t1_new" VALUES (100, 'x') ON CONFLICT (id) DO UPDATE SET val = " t1_new" .val || 'conflict';
861+ END}}
853862
854863do_execsql_test_on_specific_db {:memory:} trigger-rename-insert-select-body {
855864 CREATE TABLE t1 (id INT, val TEXT);
856865 CREATE TABLE log (src TEXT, cnt INT);
857866 CREATE TRIGGER trg4 AFTER INSERT ON t1 BEGIN
858- INSERT INTO log SELECT 'inserted', count(*) FROM t1;
867+ INSERT INTO log SELECT 'inserted', count (*) FROM t1;
859868 END;
860869 ALTER TABLE t1 RENAME TO t1_new;
861870 SELECT sql FROM sqlite_schema WHERE type='trigger' AND name='trg4';
862871} {{CREATE TRIGGER trg4 AFTER INSERT ON " t1_new" BEGIN
863- INSERT INTO log SELECT 'inserted', count (*) FROM " t1_new" ;
864- END}}
872+ INSERT INTO log SELECT 'inserted', count (*) FROM " t1_new" ;
873+ END}}
865874
866875do_execsql_test_on_specific_db {:memory:} trigger-rename-select-cmd {
867876 CREATE TABLE t1 (id INT);
@@ -871,8 +880,8 @@ do_execsql_test_on_specific_db {:memory:} trigger-rename-select-cmd {
871880 ALTER TABLE t1 RENAME TO t1_new;
872881 SELECT sql FROM sqlite_schema WHERE type='trigger' AND name='trg5';
873882} {{CREATE TRIGGER trg5 AFTER INSERT ON " t1_new" BEGIN
874- SELECT count (*) FROM " t1_new" WHERE " t1_new" .id > 0;
875- END}}
883+ SELECT count (*) FROM " t1_new" WHERE " t1_new" .id > 0;
884+ END}}
876885
877886# SQLite disallows RETURNING clause inside triggers
878887do_execsql_test_in_memory_any_error trigger-returning-not-allowed {
@@ -916,3 +925,16 @@ do_execsql_test_on_specific_db {:memory:} trigger-fires-after-table-rename {
916925 SELECT count(*) FROM t2;
917926} {2
9189274}
928+
929+ # table-qualified refs in WHEN clause subquery get rewritten (SQLite behavior)
930+ do_execsql_test_on_specific_db {:memory:} trigger-rename-table-qualified-refs-when-subquery {
931+ CREATE TABLE t1 (id INT, val TEXT);
932+ CREATE TRIGGER trg2 AFTER UPDATE ON t1 WHEN (SELECT id FROM t1 WHERE t1.id = NEW.id) > 5 BEGIN
933+ SELECT 1;
934+ END;
935+ ALTER TABLE t1 RENAME TO t1_new;
936+ SELECT sql FROM sqlite_schema WHERE type='trigger' AND name='trg2';
937+ } {{CREATE TRIGGER trg2 AFTER UPDATE ON " t1_new" WHEN (SELECT id FROM " t1_new" WHERE " t1_new" .id = NEW.id) > 5 BEGIN
938+ SELECT 1;
939+ END}}
940+
0 commit comments