Scenario generator for vore roleplay and story ideas. https://scenario-generator.deliciousreya.net/responses
You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
 
 
vore-scenario-generator/migrations/0002_load_rollable_tables_f...

214 lines
6.4 KiB

-- Migration number: 0002 2024-01-06T01:17:06.949Z
CREATE TABLE IF NOT EXISTS rollableTables
(
id INTEGER PRIMARY KEY,
identifier TEXT NOT NULL UNIQUE,
name TEXT NOT NULL UNIQUE,
title TEXT NOT NULL UNIQUE,
emoji TEXT NOT NULL UNIQUE,
header TEXT NOT NULL GENERATED ALWAYS AS (emoji || ' ' || title),
badge TEXT NOT NULL GENERATED ALWAYS AS (emoji || ' ' || name),
ordinal INTEGER NOT NULL UNIQUE DEFAULT id
) STRICT;
CREATE TRIGGER IF NOT EXISTS responseInserted
AFTER INSERT
ON responses
FOR EACH ROW
WHEN NOT EXISTS (SELECT id
FROM rollableTables
WHERE id = NEW.tableId)
BEGIN
SELECT RAISE(ABORT, 'rollable table does not exist');
END;
CREATE TRIGGER IF NOT EXISTS responseTableIdUpdated
AFTER UPDATE OF tableId
ON responses
FOR EACH ROW
WHEN NOT EXISTS (SELECT id
FROM rollableTables
WHERE id = NEW.tableId)
BEGIN
SELECT RAISE(ABORT, 'rollable table does not exist');
END;
CREATE TABLE IF NOT EXISTS rollableTableHeaders
(
id INTEGER PRIMARY KEY,
header TEXT NOT NULL UNIQUE,
tableId INTEGER NOT NULL
-- FOREIGN KEY REFERENCES rollableTables(id) ON DELETE RESTRICT ON UPDATE CASCADE
) STRICT;
CREATE TRIGGER IF NOT EXISTS rollableTableHeaderInsert
AFTER INSERT
ON rollableTableHeaders
FOR EACH ROW
WHEN NOT EXISTS (SELECT id
FROM rollableTables
WHERE id = NEW.tableId)
BEGIN
SELECT RAISE(ABORT, 'rollable table does not exist');
END;
CREATE TRIGGER IF NOT EXISTS rollableTableHeaderTableIdUpdate
AFTER UPDATE OF tableId
ON rollableTableHeaders
FOR EACH ROW
WHEN NOT EXISTS (SELECT id
FROM rollableTables
WHERE id = NEW.tableId)
BEGIN
SELECT RAISE(ABORT, 'rollable table does not exist');
END;
CREATE TABLE IF NOT EXISTS rollableTableBadges
(
id INTEGER PRIMARY KEY,
badge TEXT NOT NULL UNIQUE,
tableId INTEGER NOT NULL
-- FOREIGN KEY REFERENCES rollableTables(id) ON DELETE RESTRICT ON UPDATE CASCADE
) STRICT;
CREATE TRIGGER IF NOT EXISTS rollableTableBadgeInsert
AFTER INSERT
ON rollableTableBadges
FOR EACH ROW
WHEN NOT EXISTS (SELECT id
FROM rollableTables
WHERE id = NEW.tableId)
BEGIN
SELECT RAISE(ABORT, 'rollable table does not exist');
END;
CREATE TRIGGER IF NOT EXISTS rollableTableBadgeTableIdUpdate
AFTER UPDATE OF tableId
ON rollableTableHeaders
FOR EACH ROW
WHEN NOT EXISTS (SELECT id
FROM rollableTables
WHERE id = NEW.tableId)
BEGIN
SELECT RAISE(ABORT, 'rollable table does not exist');
END;
CREATE TABLE IF NOT EXISTS rollableTableIdentifiers
(
id INTEGER PRIMARY KEY,
identifier TEXT NOT NULL UNIQUE,
tableId INTEGER NOT NULL -- FOREIGN KEY REFERENCES rollableTables(id) ON DELETE RESTRICT ON UPDATE CASCADE
) STRICT;
CREATE TRIGGER IF NOT EXISTS rollableTableIdentifierInsert
AFTER INSERT
ON rollableTableIdentifiers
FOR EACH ROW
WHEN NOT EXISTS (SELECT id
FROM rollableTables
WHERE id = NEW.tableId)
BEGIN
SELECT RAISE(ABORT, 'rollable table does not exist');
END;
CREATE TRIGGER IF NOT EXISTS rollableTableIdentifierTableIdUpdate
AFTER UPDATE OF tableId
ON rollableTableIdentifiers
FOR EACH ROW
WHEN NOT EXISTS (SELECT id
FROM rollableTables
WHERE id = NEW.tableId)
BEGIN
SELECT RAISE(ABORT, 'rollable table does not exist');
END;
-- rollableTables triggers for Identifiers and Headers
CREATE TRIGGER IF NOT EXISTS rollableTableInsert
AFTER INSERT
ON rollableTables
FOR EACH ROW
BEGIN
INSERT INTO rollableTableHeaders (header, tableId) VALUES (NEW.header, NEW.id);
INSERT INTO rollableTableBadges (badge, tableId) VALUES (NEW.badge, NEW.id);
INSERT INTO rollableTableIdentifiers (identifier, tableId) VALUES (NEW.identifier, NEW.id);
END;
CREATE TRIGGER IF NOT EXISTS rollableTableIdUpdate
AFTER UPDATE OF id
ON rollableTables
FOR EACH ROW
BEGIN
UPDATE rollableTableHeaders SET tableId = NEW.id WHERE tableId = OLD.id;
UPDATE rollableTableBadges SET tableId = NEW.id WHERE tableId = OLD.id;
UPDATE rollableTableIdentifiers SET tableId = NEW.id WHERE tableId = OLD.id;
UPDATE responses SET tableId = NEW.id WHERE tableId = OLD.id;
END;
CREATE TRIGGER IF NOT EXISTS rollableTableHeaderUpdate
AFTER UPDATE OF badge
ON rollableTables
FOR EACH ROW
WHEN NOT EXISTS (SELECT id
FROM rollableTableBadges
WHERE badge = NEW.badge
AND tableId = NEW.badge)
BEGIN
INSERT INTO rollableTableHeaders (header, tableId) VALUES (NEW.badge, NEW.id);
END;
CREATE TRIGGER IF NOT EXISTS rollableTableHeaderUpdate
AFTER UPDATE OF header
ON rollableTables
FOR EACH ROW
WHEN NOT EXISTS (SELECT id
FROM rollableTableHeaders
WHERE header = NEW.header
AND tableId = NEW.id)
BEGIN
INSERT INTO rollableTableHeaders (header, tableId) VALUES (NEW.header, NEW.id);
END;
CREATE TRIGGER IF NOT EXISTS rollableTableIdentifierUpdate
AFTER UPDATE OF identifier
ON rollableTables
FOR EACH ROW
WHEN NOT EXISTS (SELECT id
FROM rollableTableIdentifiers
WHERE identifier = NEW.identifier
AND tableId = NEW.id)
BEGIN
INSERT INTO rollableTableIdentifiers (identifier, tableId) VALUES (NEW.identifier, NEW.id);
END;
CREATE TRIGGER IF NOT EXISTS rollableTableDeletedButReferenced
AFTER DELETE
ON rollableTables
FOR EACH ROW
BEGIN
SELECT RAISE(ABORT, 'rollable table is still referenced')
FROM (SELECT *
FROM rollableTableHeaders
WHERE rollableTableHeaders.tableId = OLD.id
UNION ALL
SELECT *
FROM rollableTableIdentifiers
WHERE rollableTableIdentifiers.tableId = OLD.id
UNION ALL
SELECT *
FROM rollableTableBadges
WHERE rollableTableBadges.tableId = OLD.id);
DELETE FROM responses WHERE tableId = OLD.id;
END;
INSERT INTO rollableTables (id, ordinal, identifier, name, title, emoji)
VALUES (0, 0, 'setting', 'Setting', 'The action takes place...', CHAR(0x1f3d9, 0xfe0f)),
(1, 1, 'theme', 'Theme', 'The encounter is themed around...', CHAR(0x1f4d4)),
(2, 2, 'start', 'Inciting Incident', 'The action begins when...', CHAR(0x25b6, 0xfe0f)),
(3, 3, 'challenge', 'Challenge', 'Things are more difficult because...', CHAR(0x1f613)),
(4, 4, 'twist', 'Twist', 'Partway through, unexpectedly...', CHAR(0x1f500)),
(5, 5, 'focus', 'Vore Scene Focus', 'The vore scene is focused on...', CHAR(0x1f444)),
(6, 6, 'word', 'Word of the Day', 'The word of the day is...', CHAR(0x2728));
CREATE INDEX IF NOT EXISTS responses_table_text ON responses (tableId, text);