HEX
Server: Apache/2.4.63 (Unix)
System: Linux TOMS-220NAS 4.4.302+ #86009 SMP Wed Nov 26 18:19:17 CST 2025 x86_64
User: flavio87 (1026)
PHP: 8.3.27
Disabled: NONE
Upload Files
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;