@tomkapa/tayto 0.1.2 → 0.3.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
@@ -0,0 +1,63 @@
1
+ -- Remove CHECK constraints on type and status columns to allow future custom types.
2
+ -- SQLite does not support ALTER CONSTRAINT, so we recreate the table.
3
+
4
+ -- Step 1: Recreate tasks table without CHECK constraints on type/status
5
+ CREATE TABLE tasks_new (
6
+ id TEXT PRIMARY KEY,
7
+ project_id TEXT NOT NULL REFERENCES projects(id) ON DELETE CASCADE,
8
+ parent_id TEXT REFERENCES tasks_new(id) ON DELETE SET NULL,
9
+ name TEXT NOT NULL,
10
+ description TEXT NOT NULL DEFAULT '',
11
+ type TEXT NOT NULL,
12
+ status TEXT NOT NULL,
13
+ rank REAL NOT NULL DEFAULT 0,
14
+ technical_notes TEXT NOT NULL DEFAULT '',
15
+ additional_requirements TEXT NOT NULL DEFAULT '',
16
+ created_at TEXT NOT NULL,
17
+ updated_at TEXT NOT NULL,
18
+ deleted_at TEXT DEFAULT NULL
19
+ );
20
+
21
+ -- Step 2: Copy data
22
+ INSERT INTO tasks_new SELECT * FROM tasks;
23
+
24
+ -- Step 3: Drop old FTS triggers (they reference the old table)
25
+ DROP TRIGGER IF EXISTS tasks_fts_ai;
26
+ DROP TRIGGER IF EXISTS tasks_fts_ad;
27
+ DROP TRIGGER IF EXISTS tasks_fts_au;
28
+
29
+ -- Step 4: Drop old table and rename
30
+ DROP TABLE tasks;
31
+ ALTER TABLE tasks_new RENAME TO tasks;
32
+
33
+ -- Step 5: Recreate indexes
34
+ CREATE INDEX idx_tasks_project_id ON tasks(project_id);
35
+ CREATE INDEX idx_tasks_parent_id ON tasks(parent_id);
36
+ CREATE INDEX idx_tasks_status ON tasks(status);
37
+ CREATE INDEX idx_tasks_type ON tasks(type);
38
+ CREATE INDEX idx_tasks_rank ON tasks(rank);
39
+ CREATE INDEX idx_tasks_deleted_at ON tasks(deleted_at);
40
+
41
+ -- Step 6: Rebuild FTS index
42
+ INSERT INTO tasks_fts(tasks_fts) VALUES('rebuild');
43
+
44
+ -- Step 7: Recreate FTS triggers (soft-delete aware, from migration 003)
45
+ CREATE TRIGGER tasks_fts_ai AFTER INSERT ON tasks
46
+ WHEN NEW.deleted_at IS NULL
47
+ BEGIN
48
+ INSERT INTO tasks_fts(rowid, id, name, description, technical_notes, additional_requirements)
49
+ VALUES (NEW.rowid, NEW.id, NEW.name, NEW.description, NEW.technical_notes, NEW.additional_requirements);
50
+ END;
51
+
52
+ CREATE TRIGGER tasks_fts_ad AFTER DELETE ON tasks BEGIN
53
+ INSERT INTO tasks_fts(tasks_fts, rowid, id, name, description, technical_notes, additional_requirements)
54
+ VALUES ('delete', OLD.rowid, OLD.id, OLD.name, OLD.description, OLD.technical_notes, OLD.additional_requirements);
55
+ END;
56
+
57
+ CREATE TRIGGER tasks_fts_au AFTER UPDATE ON tasks BEGIN
58
+ INSERT INTO tasks_fts(tasks_fts, rowid, id, name, description, technical_notes, additional_requirements)
59
+ VALUES ('delete', OLD.rowid, OLD.id, OLD.name, OLD.description, OLD.technical_notes, OLD.additional_requirements);
60
+ INSERT INTO tasks_fts(rowid, id, name, description, technical_notes, additional_requirements)
61
+ SELECT NEW.rowid, NEW.id, NEW.name, NEW.description, NEW.technical_notes, NEW.additional_requirements
62
+ WHERE NEW.deleted_at IS NULL;
63
+ END;