embox
50 строк · 1.5 Кб
1CREATE TABLE jobcards__history
2(
3rowid INTEGER NOT NULL PRIMARY KEY AUTOINCREMENT,
4jobcard_id INTEGER NOT NULL,
5ctime REAL NOT NULL DEFAULT CURRENT_TIMESTAMP,
6data1 TEXT,
7data2 TEXT
8);
9
10CREATE TABLE jobcards__index
11(
12jobcard_id INTEGER NOT NULL PRIMARY KEY AUTOINCREMENT,
13deleted INTEGER(1) NOT NULL DEFAULT 0,
14first_rowid INTEGER NOT NULL DEFAULT 0,
15last_rowid INTEGER NOT NULL DEFAULT 0
16);
17
18CREATE VIEW jobcards AS
19SELECT jci.jobcard_id, jch.ctime, jch.data1, jch.data2
20FROM jobcards__index jci, jobcards__history jch
21WHERE jch.rowid = jci.last_rowid
22AND jci.deleted = 0;
23
24
25CREATE TRIGGER jobcards__ii_update_index INSTEAD OF INSERT ON jobcards
26BEGIN
27SELECT
28CASE
29WHEN NEW.jobcard_id IS NOT NULL AND MIN(rowid) IS NOT NULL
30THEN RAISE(ABORT, 'duplicate key')
31END
32FROM jobcards__index
33WHERE jobcard_id = NEW.jobcard_id;
34INSERT INTO jobcards__index (jobcard_id) VALUES (NEW.jobcard_id);
35INSERT INTO jobcards__history
36(jobcard_id, data1, data2)
37VALUES (
38IFNULL(NEW.jobcard_id, last_insert_rowid()),
39NEW.data1,
40NEW.data2
41);
42UPDATE jobcards__index
43SET first_rowid = last_insert_rowid(),
44last_rowid = last_insert_rowid()
45WHERE jobcard_id = (
46SELECT jobcard_id
47FROM jobcards__history
48WHERE rowid = last_insert_rowid()
49);
50END;
51
52