turso icon indicating copy to clipboard operation
turso copied to clipboard

Alter rename should rewrite stuff inside trigger

Open Pavan-Nambi opened this issue 5 months ago • 2 comments

seed - 11128012010874390124 - just for my reference so i can later pull main and run

turso> CREATE TABLE t1 (id INT);
CREATE TABLE t (id INT);
turso> CREATE TRIGGER my_trigger AFTER INSERT ON t
BEGIN
    INSERT INTO t1 VALUES (NEW.id);
END;
turso> ALTER TABLE t1 RENAME TO t1_new;
turso> select * from sqlite_schema;
┌─────────┬────────────┬──────────┬──────────┬───────────────────────────────────────────────────────────────────────────────────────┐
│ type    │ name       │ tbl_name │ rootpage │ sql                                                                                   │
├─────────┼────────────┼──────────┼──────────┼───────────────────────────────────────────────────────────────────────────────────────┤
│ table   │ t1_new     │ t1_new   │        2 │ CREATE TABLE t1_new (id INT)                                                          │
├─────────┼────────────┼──────────┼──────────┼───────────────────────────────────────────────────────────────────────────────────────┤
│ table   │ t          │ t        │        3 │ CREATE TABLE t (id INT)                                                               │
├─────────┼────────────┼──────────┼──────────┼───────────────────────────────────────────────────────────────────────────────────────┤
│ trigger │ my_trigger │ t        │        0 │ CREATE TRIGGER my_trigger AFTER INSERT ON t BEGIN INSERT INTO t1 VALUES (NEW.id); END │
└─────────┴────────────┴──────────┴──────────┴───────────────────────────────────────────────────────────────────────────────────────┘
turso> INSERT INTO t VALUES (1);
  x Parse error: no such table: t1

turso>

turso on  sim [$] is 📦 v0.4.0-pre.3 via 🐍 v3.12.3 via 🦀 v1.88.0 took 53s
❯ sqlite3
SQLite version 3.50.4 2025-07-30 19:33:53
Enter ".help" for usage hints.
Connected to a transient in-memory database.
Use ".open FILENAME" to reopen on a persistent database.
sqlite> CREATE TABLE t1 (id INT);
CREATE TABLE t (id INT);
sqlite> CREATE TRIGGER my_trigger AFTER INSERT ON t
BEGIN
    INSERT INTO t1 VALUES (NEW.id);
END;
sqlite> ALTER TABLE t1 RENAME TO t1_new;
sqlite> select * from sqlite_schema;
table|t1_new|t1_new|2|CREATE TABLE "t1_new" (id INT)
table|t|t|3|CREATE TABLE t (id INT)
trigger|my_trigger|t|0|CREATE TRIGGER my_trigger AFTER INSERT ON t
BEGIN
    INSERT INTO "t1_new" VALUES (NEW.id);
END
sqlite>

Pavan-Nambi avatar Nov 23 '25 09:11 Pavan-Nambi

Ok i have a fix for this and https://github.com/tursodatabase/turso/issues/4009

mostly cuz i am too retarded to notice difference in errors produced by this vs other stuff.

i will make pr after couple more sim runs to see if anything else in alter is weird

Pavan-Nambi avatar Nov 23 '25 14:11 Pavan-Nambi

it should update column names in trigger for eg in where clause ..etc

i lost seed for this but

eg:


CREATE TABLE t (x TEXT);

CREATE TABLE u (a BLOB, b TEXT);

CREATE TRIGGER trg
BEFORE UPDATE ON t
BEGIN
    UPDATE u SET b='v' WHERE u.a > X'01';
END;
ALTER TABLE u RENAME COLUMN a TO z;

Pavan-Nambi avatar Nov 24 '25 12:11 Pavan-Nambi