fork download
  1. CREATE TABLE intvars (
  2. name PRIMARY KEY NOT NULL
  3. , value INTEGER
  4. );
  5.  
  6. CREATE TABLE transactions (
  7. id INTEGER PRIMARY KEY AUTOINCREMENT
  8. , dt REAL DEFAULT (julianday('now'))
  9. , cm TEXT
  10. );
  11.  
  12. CREATE TABLE T1 (
  13. transid INTEGER PRIMARY KEY NOT NULL REFERENCES transactions(id) ON UPDATE CASCADE ON DELETE CASCADE
  14. , tx TEXT
  15. );
  16.  
  17. CREATE TABLE T2 (
  18. transid INTEGER PRIMARY KEY NOT NULL REFERENCES transactions(id) ON UPDATE CASCADE ON DELETE CASCADE
  19. , tx TEXT
  20. );
  21.  
  22. CREATE VIEW vtrans AS
  23. SELECT transactions.id, datetime(transactions.dt),transactions.cm
  24. , T1.tx AS tx1
  25. , T2.tx AS tx2
  26. FROM transactions
  27. LEFT OUTER JOIN T1 ON T1.transid=transactions.id
  28. LEFT OUTER JOIN T2 ON T2.transid=transactions.id;
  29.  
  30. CREATE TRIGGER instrans INSTEAD OF INSERT ON vtrans
  31. FOR EACH ROW
  32. BEGIN
  33. INSERT INTO transactions (cm) VALUES (NEW.cm);
  34. INSERT OR REPLACE INTO intvars (name,value) VALUES ('transid',last_insert_rowid());
  35. INSERT INTO T1 (transid,tx) VALUES ((SELECT value FROM intvars WHERE name='transid'),NEW.tx1);
  36. INSERT INTO T2 (transid,tx) VALUES ((SELECT value FROM intvars WHERE name='transid'),NEW.tx2);
  37. END;
  38. .echo on
  39.  
  40. INSERT INTO vtrans (cm,tx1,tx2) VALUES ('trans1','trans1val1','trans1val2');
  41.  
  42. SELECT * FROM transactions;
  43. SELECT * FROM T1;
  44. SELECT * FROM T2;
  45. SELECT * FROM vtrans;
  46.  
Success #stdin #stdout 0s 3008KB
stdin
Standard input is empty
stdout
INSERT INTO vtrans (cm,tx1,tx2) VALUES ('trans1','trans1val1','trans1val2');
SELECT * FROM transactions;
1|2456048.87907203|trans1
SELECT * FROM T1;
1|trans1val1
SELECT * FROM T2;
1|trans1val2
SELECT * FROM vtrans;
1|2012-05-01 09:05:51|trans1|trans1val1|trans1val2