-- SQLite does not support DROP COLUMN directly; recreate table without frame_end CREATE TABLE tasks_new ( id INTEGER PRIMARY KEY AUTOINCREMENT, job_id INTEGER NOT NULL, runner_id INTEGER, frame INTEGER NOT NULL, status TEXT NOT NULL DEFAULT 'pending', output_path TEXT, task_type TEXT NOT NULL DEFAULT 'render', current_step TEXT, retry_count INTEGER NOT NULL DEFAULT 0, max_retries INTEGER NOT NULL DEFAULT 3, runner_failure_count INTEGER NOT NULL DEFAULT 0, timeout_seconds INTEGER, condition TEXT, created_at TIMESTAMP NOT NULL DEFAULT CURRENT_TIMESTAMP, started_at TIMESTAMP, completed_at TIMESTAMP, error_message TEXT, FOREIGN KEY (job_id) REFERENCES jobs(id), FOREIGN KEY (runner_id) REFERENCES runners(id) ); INSERT INTO tasks_new (id, job_id, runner_id, frame, status, output_path, task_type, current_step, retry_count, max_retries, runner_failure_count, timeout_seconds, condition, created_at, started_at, completed_at, error_message) SELECT id, job_id, runner_id, frame, status, output_path, task_type, current_step, retry_count, max_retries, runner_failure_count, timeout_seconds, condition, created_at, started_at, completed_at, error_message FROM tasks; DROP TABLE tasks; ALTER TABLE tasks_new RENAME TO tasks; CREATE INDEX idx_tasks_job_id ON tasks(job_id); CREATE INDEX idx_tasks_runner_id ON tasks(runner_id); CREATE INDEX idx_tasks_status ON tasks(status); CREATE INDEX idx_tasks_job_status ON tasks(job_id, status); CREATE INDEX idx_tasks_started_at ON tasks(started_at);