File: //proc/25636/root/var/packages/CMS/scripts/sql/create_task_table.sql
PRAGMA auto_vacuum = FULL;
PRAGMA page_size = 4096;
PRAGMA journal_mode = WAL;
-- Version: To be set as the CMS release number when released
-- The purpose is to make it easier to update the database schema if needed
-- To query:
-- echo -e "PRAGMA user_version;" | sqlite3 --column cmstask_db.sqlite
PRAGMA user_version = 907;
-- This option being on is better for dev due to keeping database integrity.
-- To Query:
-- echo -e "PRAGMA foreign_keys;" | sqlite3 --column cmstask_db.sqlite
PRAGMA foreign_keys = ON;
BEGIN;
--
-- The script table containing the scripts
--
CREATE TABLE IF NOT EXISTS script (
script_id INTEGER PRIMARY KEY AUTOINCREMENT,
script_uuid TEXT NOT NULL UNIQUE,
create_time INTEGER DEFAULT (strftime('%s', 'now')),
name TEXT NOT NULL,
description TEXT DEFAULT '',
script TEXT NOT NULL
);
CREATE INDEX IF NOT EXISTS script_list_default_sort_index ON script (name); -- for faster listing of scripts
CREATE TRIGGER IF NOT EXISTS script_read_only_columns_trigger BEFORE UPDATE OF
script_id,
script_uuid,
create_time
ON script
BEGIN
SELECT RAISE(ABORT, 'Attempting to change read-only column');
END;
--
-- The task table containing tasks
--
CREATE TABLE IF NOT EXISTS task (
task_id INTEGER PRIMARY KEY AUTOINCREMENT,
task_uuid TEXT NOT NULL UNIQUE,
task_name TEXT DEFAULT '',
create_time BIGINT DEFAULT (strftime('%s', 'now')),
update_time BIGINT DEFAULT (strftime('%s', 'now')),
done_time BIGINT DEFAULT 0,
description TEXT DEFAULT '',
task_status TEXT DEFAULT 'waiting',
number_of_targets_processing INTEGER DEFAULT 0,
number_of_targets_done INTEGER DEFAULT 0,
number_of_targets INTEGER DEFAULT 0,
action_type TEXT NOT NULL,
config TEXT DEFAULT '', -- webapi params
-- keep history copy from script
script_uuid TEXT NOT NULL,
script_name TEXT NOT NULL,
script TEXT NOT NULL
);
-- listing should be much more common than inserting, so indexes for all possible sorts
CREATE INDEX IF NOT EXISTS task_status_index ON task (task_status, task_id); -- for quickly listing by status and checking if there is any running status
CREATE INDEX IF NOT EXISTS task_create_time_index ON task (create_time); -- for quickly listing by create_time
CREATE TRIGGER IF NOT EXISTS task_read_only_columns_trigger BEFORE UPDATE OF
task_id,
task_uuid,
create_time,
config,
script_uuid,
script
ON task
BEGIN
SELECT RAISE(ABORT, 'Attempting to change read-only column');
END;
COMMIT;