diff --git a/atom b/atom index 34acc56..7977ce2 100755 --- a/atom +++ b/atom @@ -412,6 +412,9 @@ done echo ' CREATE TEMPORARY TABLE tasks( id INTEGER PRIMARY KEY, + requires INTEGER, + required INTEGER, + status INTEGER NOT NULL, key TEXT UNIQUE, rename_pattern TEXT, fat32compat INTEGER, @@ -479,15 +482,23 @@ echo ' cmd_arg57 TEXT, cmd_arg58 TEXT, cmd_arg59 TEXT, - requires INTEGER, - required INTEGER, - status INTEGER NOT NULL, cleanup TEXT, FOREIGN KEY(requires) REFERENCES tasks(id) ON DELETE SET NULL ); CREATE INDEX tasks_by_key ON tasks ( key ); CREATE INDEX tasks_by_sourcefile ON tasks ( source_file ); + + CREATE TEMPORARY TRIGGER fail_depends + AFTER UPDATE OF + status + ON + tasks + WHEN + NEW.status=2 + BEGIN + UPDATE tasks SET status=2 WHERE requires=NEW.id; + END; ' >&3 echo ' diff --git a/lib/database/open b/lib/database/open index c20caca..ce86d95 100644 --- a/lib/database/open +++ b/lib/database/open @@ -15,5 +15,6 @@ openDatabase() { cat $schema >&3 echo '.separator ::AtOM:SQL:Sep::' >&3 echo 'PRAGMA foreign_keys = ON;' >&3 + echo 'PRAGMA recursive_triggers = ON;' >&3 checkDatabaseVersion } diff --git a/lib/workers/cleaner b/lib/workers/cleaner index 177def4..b72a53e 100644 --- a/lib/workers/cleaner +++ b/lib/workers/cleaner @@ -12,7 +12,6 @@ cleaner() { (( failed+=faildepends )) (( ran+=faildepends )) Update tasks status 2 <<<"id = $taskid" - Update tasks status 2 <<<"requires = $taskid" echo "SELECT COUNT(*) FROM tasks WHERE ( status = 0 OR status = 1 )