diff options
author | Yorhel <git@yorhel.nl> | 2011-02-15 16:13:11 +0100 |
---|---|---|
committer | Yorhel <git@yorhel.nl> | 2011-02-15 16:13:11 +0100 |
commit | 24680d31a5a3433db5fd0140d9cb80b371659342 (patch) | |
tree | b8beae4bbcfa12c9e695126ebf5845214f1978bf /util/sql | |
parent | a796407a552fb5422a81a4cf8a5029d1f39bf419 (diff) |
chardb: Added char entry tables and updated the basic revision framework
The Perl code and SQL-revisioning code only handles the name, original,
alias and desc fields at the moment. There is a basic /i+ and /i+.+ page
for testing, which should have all the functionality required for the
revisioning framework.
Diffstat (limited to 'util/sql')
-rw-r--r-- | util/sql/func.sql | 44 |
1 files changed, 44 insertions, 0 deletions
diff --git a/util/sql/func.sql b/util/sql/func.sql index 74f08147..4fc95165 100644 --- a/util/sql/func.sql +++ b/util/sql/func.sql @@ -164,6 +164,7 @@ BEGIN INSERT INTO edit_revision (type, iid, ihid, ilock) VALUES (t, ( SELECT vid FROM vn_rev WHERE id = i UNION SELECT rid FROM releases_rev WHERE id = i + UNION SELECT cid FROM chars_rev WHERE id = i UNION SELECT pid FROM producers_rev WHERE id = i), COALESCE((SELECT ihid FROM changes WHERE id = i), FALSE), COALESCE((SELECT ilock FROM changes WHERE id = i), FALSE) @@ -189,6 +190,7 @@ BEGIN JOIN ( SELECT id FROM vn_rev WHERE t = 'v' AND vid = i UNION SELECT id FROM releases_rev WHERE t = 'r' AND rid = i UNION SELECT id FROM producers_rev WHERE t = 'p' AND pid = i + UNION SELECT id FROM chars_rev WHERE t = 'c' AND cid = i ) x(id) ON x.id = c.id ORDER BY c.id DESC LIMIT 1; @@ -204,6 +206,7 @@ BEGIN WHEN 'v' THEN INSERT INTO vn (latest) VALUES (0) RETURNING id INTO r.iid; WHEN 'r' THEN INSERT INTO releases (latest) VALUES (0) RETURNING id INTO r.iid; WHEN 'p' THEN INSERT INTO producers (latest) VALUES (0) RETURNING id INTO r.iid; + WHEN 'c' THEN INSERT INTO chars (latest) VALUES (0) RETURNING id INTO r.iid; END CASE; ELSE r.iid := i; @@ -370,6 +373,46 @@ $$ LANGUAGE plpgsql; +-- PLACEHOLDERS, not complete yet + +CREATE OR REPLACE FUNCTION edit_char_init(cid integer) RETURNS void AS $$ +BEGIN + BEGIN + CREATE TEMPORARY TABLE edit_char (LIKE chars_rev INCLUDING DEFAULTS INCLUDING CONSTRAINTS); + ALTER TABLE edit_char DROP COLUMN id; + ALTER TABLE edit_char DROP COLUMN cid; + EXCEPTION WHEN duplicate_table THEN + TRUNCATE edit_char; + END; + PERFORM edit_revtable('c', cid); + -- new char + IF cid IS NULL THEN + INSERT INTO edit_char DEFAULT VALUES; + -- load revision + ELSE + INSERT INTO edit_char SELECT name, original, alias, image, "desc" FROM chars_rev WHERE id = cid; + END IF; +END; +$$ LANGUAGE plpgsql; + + + +CREATE OR REPLACE FUNCTION edit_char_commit() RETURNS edit_rettype AS $$ +DECLARE + r edit_rettype; +BEGIN + IF (SELECT COUNT(*) FROM edit_char) <> 1 THEN + RAISE 'edit_char must have exactly one row!'; + END IF; + SELECT INTO r * FROM edit_commit(); + INSERT INTO chars_rev SELECT r.cid, r.iid, name, original, alias, image, "desc" FROM edit_char; + UPDATE chars SET latest = r.cid WHERE id = r.iid; + RETURN r; +END; +$$ LANGUAGE plpgsql; + + + ---------------------------------------------------------- @@ -819,3 +862,4 @@ BEGIN END; $$ LANGUAGE plpgsql; + |