home *** CD-ROM | disk | FTP | other *** search
/ Chip 2011 November / CHIP_2011_11.iso / Programy / Narzedzia / Calibre / calibre-0.8.18.msi / file_547 < prev    next >
Text File  |  2011-07-03  |  27KB  |  550 lines

  1. CREATE TABLE authors ( id   INTEGER PRIMARY KEY,
  2.                               name TEXT NOT NULL COLLATE NOCASE,
  3.                               sort TEXT COLLATE NOCASE,
  4.                               link TEXT NOT NULL DEFAULT "",
  5.                               UNIQUE(name)
  6.                              );
  7. CREATE TABLE books ( id      INTEGER PRIMARY KEY AUTOINCREMENT,
  8.                              title     TEXT NOT NULL DEFAULT 'Unknown' COLLATE NOCASE,
  9.                              sort      TEXT COLLATE NOCASE,
  10.                              timestamp TIMESTAMP DEFAULT CURRENT_TIMESTAMP,
  11.                              pubdate   TIMESTAMP DEFAULT CURRENT_TIMESTAMP,
  12.                              series_index REAL NOT NULL DEFAULT 1.0,
  13.                              author_sort TEXT COLLATE NOCASE,
  14.                              isbn TEXT DEFAULT "" COLLATE NOCASE,
  15.                              lccn TEXT DEFAULT "" COLLATE NOCASE,
  16.                              path TEXT NOT NULL DEFAULT "",
  17.                              flags INTEGER NOT NULL DEFAULT 1,
  18.                              uuid TEXT,
  19.                              has_cover BOOL DEFAULT 0,
  20.                              last_modified TIMESTAMP NOT NULL DEFAULT "2000-01-01 00:00:00+00:00");
  21. CREATE TABLE books_authors_link ( id INTEGER PRIMARY KEY,
  22.                                           book INTEGER NOT NULL,
  23.                                           author INTEGER NOT NULL,
  24.                                           UNIQUE(book, author)
  25.                                         );
  26. CREATE TABLE books_languages_link ( id INTEGER PRIMARY KEY,
  27.                                             book INTEGER NOT NULL,
  28.                                             lang_code INTEGER NOT NULL,
  29.                                             item_order INTEGER NOT NULL DEFAULT 0,
  30.                                             UNIQUE(book, lang_code)
  31.         );
  32. CREATE TABLE books_plugin_data(id INTEGER PRIMARY KEY,
  33.                                      book INTEGER NON NULL,
  34.                                      name TEXT NON NULL,
  35.                                      val TEXT NON NULL,
  36.                                      UNIQUE(book,name));
  37. CREATE TABLE books_publishers_link ( id INTEGER PRIMARY KEY,
  38.                                           book INTEGER NOT NULL,
  39.                                           publisher INTEGER NOT NULL,
  40.                                           UNIQUE(book)
  41.                                         );
  42. CREATE TABLE books_ratings_link ( id INTEGER PRIMARY KEY,
  43.                                           book INTEGER NOT NULL,
  44.                                           rating INTEGER NOT NULL,
  45.                                           UNIQUE(book, rating)
  46.                                         );
  47. CREATE TABLE books_series_link ( id INTEGER PRIMARY KEY,
  48.                                           book INTEGER NOT NULL,
  49.                                           series INTEGER NOT NULL,
  50.                                           UNIQUE(book)
  51.                                         );
  52. CREATE TABLE books_tags_link ( id INTEGER PRIMARY KEY,
  53.                                           book INTEGER NOT NULL,
  54.                                           tag INTEGER NOT NULL,
  55.                                           UNIQUE(book, tag)
  56.                                         );
  57. CREATE TABLE comments ( id INTEGER PRIMARY KEY,
  58.                               book INTEGER NON NULL,
  59.                               text TEXT NON NULL COLLATE NOCASE,
  60.                               UNIQUE(book)
  61.                             );
  62. CREATE TABLE conversion_options ( id INTEGER PRIMARY KEY,
  63.                                           format TEXT NOT NULL COLLATE NOCASE,
  64.                                           book INTEGER,
  65.                                           data BLOB NOT NULL,
  66.                                           UNIQUE(format,book)
  67.                                         );
  68. CREATE TABLE custom_columns (
  69.                     id       INTEGER PRIMARY KEY AUTOINCREMENT,
  70.                     label    TEXT NOT NULL,
  71.                     name     TEXT NOT NULL,
  72.                     datatype TEXT NOT NULL,
  73.                     mark_for_delete   BOOL DEFAULT 0 NOT NULL,
  74.                     editable BOOL DEFAULT 1 NOT NULL,
  75.                     display  TEXT DEFAULT "{}" NOT NULL,
  76.                     is_multiple BOOL DEFAULT 0 NOT NULL,
  77.                     normalized BOOL NOT NULL,
  78.                     UNIQUE(label)
  79.                 );
  80. CREATE TABLE data ( id     INTEGER PRIMARY KEY,
  81.                             book   INTEGER NON NULL,
  82.                             format TEXT NON NULL COLLATE NOCASE,
  83.                             uncompressed_size INTEGER NON NULL,
  84.                             name TEXT NON NULL,
  85.                             UNIQUE(book, format)
  86. );
  87. CREATE TABLE feeds ( id   INTEGER PRIMARY KEY,
  88.                               title TEXT NOT NULL,
  89.                               script TEXT NOT NULL,
  90.                               UNIQUE(title)
  91.                              );
  92. CREATE TABLE identifiers  ( id     INTEGER PRIMARY KEY,
  93.                                     book   INTEGER NON NULL,
  94.                                     type   TEXT NON NULL DEFAULT "isbn" COLLATE NOCASE,
  95.                                     val    TEXT NON NULL COLLATE NOCASE,
  96.                                     UNIQUE(book, type)
  97.         );
  98. CREATE TABLE languages    ( id        INTEGER PRIMARY KEY,
  99.                                     lang_code TEXT NON NULL COLLATE NOCASE,
  100.                                     UNIQUE(lang_code)
  101.         );
  102. CREATE TABLE library_id ( id   INTEGER PRIMARY KEY,
  103.                                   uuid TEXT NOT NULL,
  104.                                   UNIQUE(uuid)
  105.         );
  106. CREATE TABLE metadata_dirtied(id INTEGER PRIMARY KEY,
  107.                              book INTEGER NOT NULL,
  108.                              UNIQUE(book));
  109. CREATE TABLE preferences(id INTEGER PRIMARY KEY,
  110.                                  key TEXT NON NULL,
  111.                                  val TEXT NON NULL,
  112.                                  UNIQUE(key));
  113. CREATE TABLE publishers ( id   INTEGER PRIMARY KEY,
  114.                                   name TEXT NOT NULL COLLATE NOCASE,
  115.                                   sort TEXT COLLATE NOCASE,
  116.                                   UNIQUE(name)
  117.                              );
  118. CREATE TABLE ratings ( id   INTEGER PRIMARY KEY,
  119.                                rating INTEGER CHECK(rating > -1 AND rating < 11),
  120.                                UNIQUE (rating)
  121.                              );
  122. CREATE TABLE series ( id   INTEGER PRIMARY KEY,
  123.                               name TEXT NOT NULL COLLATE NOCASE,
  124.                               sort TEXT COLLATE NOCASE,
  125.                               UNIQUE (name)
  126.                              );
  127. CREATE TABLE tags ( id   INTEGER PRIMARY KEY,
  128.                             name TEXT NOT NULL COLLATE NOCASE,
  129.                             UNIQUE (name)
  130.                              );
  131. CREATE VIEW meta AS
  132.         SELECT id, title,
  133.                (SELECT sortconcat(bal.id, name) FROM books_authors_link AS bal JOIN authors ON(author = authors.id) WHERE book = books.id) authors,
  134.                (SELECT name FROM publishers WHERE publishers.id IN (SELECT publisher from books_publishers_link WHERE book=books.id)) publisher,
  135.                (SELECT rating FROM ratings WHERE ratings.id IN (SELECT rating from books_ratings_link WHERE book=books.id)) rating,
  136.                timestamp,
  137.                (SELECT MAX(uncompressed_size) FROM data WHERE book=books.id) size,
  138.                (SELECT concat(name) FROM tags WHERE tags.id IN (SELECT tag from books_tags_link WHERE book=books.id)) tags,
  139.                (SELECT text FROM comments WHERE book=books.id) comments,
  140.                (SELECT name FROM series WHERE series.id IN (SELECT series FROM books_series_link WHERE book=books.id)) series,
  141.                series_index,
  142.                sort,
  143.                author_sort,
  144.                (SELECT concat(format) FROM data WHERE data.book=books.id) formats,
  145.                isbn,
  146.                path,
  147.                lccn,
  148.                pubdate,
  149.                flags,
  150.                uuid
  151.         FROM books;
  152. CREATE VIEW tag_browser_authors AS SELECT
  153.                     id,
  154.                     name,
  155.                     (SELECT COUNT(id) FROM books_authors_link WHERE author=authors.id) count,
  156.                     (SELECT AVG(ratings.rating)
  157.                      FROM books_authors_link AS tl, books_ratings_link AS bl, ratings
  158.                      WHERE tl.author=authors.id AND bl.book=tl.book AND
  159.                      ratings.id = bl.rating AND ratings.rating <> 0) avg_rating,
  160.                      sort AS sort
  161.                 FROM authors;
  162. CREATE VIEW tag_browser_filtered_authors AS SELECT
  163.                     id,
  164.                     name,
  165.                     (SELECT COUNT(books_authors_link.id) FROM books_authors_link WHERE
  166.                         author=authors.id AND books_list_filter(book)) count,
  167.                     (SELECT AVG(ratings.rating)
  168.                      FROM books_authors_link AS tl, books_ratings_link AS bl, ratings
  169.                      WHERE tl.author=authors.id AND bl.book=tl.book AND
  170.                      ratings.id = bl.rating AND ratings.rating <> 0 AND
  171.                      books_list_filter(bl.book)) avg_rating,
  172.                      sort AS sort
  173.                 FROM authors;
  174. CREATE VIEW tag_browser_filtered_publishers AS SELECT
  175.                     id,
  176.                     name,
  177.                     (SELECT COUNT(books_publishers_link.id) FROM books_publishers_link WHERE
  178.                         publisher=publishers.id AND books_list_filter(book)) count,
  179.                     (SELECT AVG(ratings.rating)
  180.                      FROM books_publishers_link AS tl, books_ratings_link AS bl, ratings
  181.                      WHERE tl.publisher=publishers.id AND bl.book=tl.book AND
  182.                      ratings.id = bl.rating AND ratings.rating <> 0 AND
  183.                      books_list_filter(bl.book)) avg_rating,
  184.                      name AS sort
  185.                 FROM publishers;
  186. CREATE VIEW tag_browser_filtered_ratings AS SELECT
  187.                     id,
  188.                     rating,
  189.                     (SELECT COUNT(books_ratings_link.id) FROM books_ratings_link WHERE
  190.                         rating=ratings.id AND books_list_filter(book)) count,
  191.                     (SELECT AVG(ratings.rating)
  192.                      FROM books_ratings_link AS tl, books_ratings_link AS bl, ratings
  193.                      WHERE tl.rating=ratings.id AND bl.book=tl.book AND
  194.                      ratings.id = bl.rating AND ratings.rating <> 0 AND
  195.                      books_list_filter(bl.book)) avg_rating,
  196.                      rating AS sort
  197.                 FROM ratings;
  198. CREATE VIEW tag_browser_filtered_series AS SELECT
  199.                     id,
  200.                     name,
  201.                     (SELECT COUNT(books_series_link.id) FROM books_series_link WHERE
  202.                         series=series.id AND books_list_filter(book)) count,
  203.                     (SELECT AVG(ratings.rating)
  204.                      FROM books_series_link AS tl, books_ratings_link AS bl, ratings
  205.                      WHERE tl.series=series.id AND bl.book=tl.book AND
  206.                      ratings.id = bl.rating AND ratings.rating <> 0 AND
  207.                      books_list_filter(bl.book)) avg_rating,
  208.                      (title_sort(name)) AS sort
  209.                 FROM series;
  210. CREATE VIEW tag_browser_filtered_tags AS SELECT
  211.                     id,
  212.                     name,
  213.                     (SELECT COUNT(books_tags_link.id) FROM books_tags_link WHERE
  214.                         tag=tags.id AND books_list_filter(book)) count,
  215.                     (SELECT AVG(ratings.rating)
  216.                      FROM books_tags_link AS tl, books_ratings_link AS bl, ratings
  217.                      WHERE tl.tag=tags.id AND bl.book=tl.book AND
  218.                      ratings.id = bl.rating AND ratings.rating <> 0 AND
  219.                      books_list_filter(bl.book)) avg_rating,
  220.                      name AS sort
  221.                 FROM tags;
  222. CREATE VIEW tag_browser_publishers AS SELECT
  223.                     id,
  224.                     name,
  225.                     (SELECT COUNT(id) FROM books_publishers_link WHERE publisher=publishers.id) count,
  226.                     (SELECT AVG(ratings.rating)
  227.                      FROM books_publishers_link AS tl, books_ratings_link AS bl, ratings
  228.                      WHERE tl.publisher=publishers.id AND bl.book=tl.book AND
  229.                      ratings.id = bl.rating AND ratings.rating <> 0) avg_rating,
  230.                      name AS sort
  231.                 FROM publishers;
  232. CREATE VIEW tag_browser_ratings AS SELECT
  233.                     id,
  234.                     rating,
  235.                     (SELECT COUNT(id) FROM books_ratings_link WHERE rating=ratings.id) count,
  236.                     (SELECT AVG(ratings.rating)
  237.                      FROM books_ratings_link AS tl, books_ratings_link AS bl, ratings
  238.                      WHERE tl.rating=ratings.id AND bl.book=tl.book AND
  239.                      ratings.id = bl.rating AND ratings.rating <> 0) avg_rating,
  240.                      rating AS sort
  241.                 FROM ratings;
  242. CREATE VIEW tag_browser_series AS SELECT
  243.                     id,
  244.                     name,
  245.                     (SELECT COUNT(id) FROM books_series_link WHERE series=series.id) count,
  246.                     (SELECT AVG(ratings.rating)
  247.                      FROM books_series_link AS tl, books_ratings_link AS bl, ratings
  248.                      WHERE tl.series=series.id AND bl.book=tl.book AND
  249.                      ratings.id = bl.rating AND ratings.rating <> 0) avg_rating,
  250.                      (title_sort(name)) AS sort
  251.                 FROM series;
  252. CREATE VIEW tag_browser_tags AS SELECT
  253.                     id,
  254.                     name,
  255.                     (SELECT COUNT(id) FROM books_tags_link WHERE tag=tags.id) count,
  256.                     (SELECT AVG(ratings.rating)
  257.                      FROM books_tags_link AS tl, books_ratings_link AS bl, ratings
  258.                      WHERE tl.tag=tags.id AND bl.book=tl.book AND
  259.                      ratings.id = bl.rating AND ratings.rating <> 0) avg_rating,
  260.                      name AS sort
  261.                 FROM tags;
  262. CREATE INDEX authors_idx ON books (author_sort COLLATE NOCASE);
  263. CREATE INDEX books_authors_link_aidx ON books_authors_link (author);
  264. CREATE INDEX books_authors_link_bidx ON books_authors_link (book);
  265. CREATE INDEX books_idx ON books (sort COLLATE NOCASE);
  266. CREATE INDEX books_languages_link_aidx ON books_languages_link (lang_code);
  267. CREATE INDEX books_languages_link_bidx ON books_languages_link (book);
  268. CREATE INDEX books_publishers_link_aidx ON books_publishers_link (publisher);
  269. CREATE INDEX books_publishers_link_bidx ON books_publishers_link (book);
  270. CREATE INDEX books_ratings_link_aidx ON books_ratings_link (rating);
  271. CREATE INDEX books_ratings_link_bidx ON books_ratings_link (book);
  272. CREATE INDEX books_series_link_aidx ON books_series_link (series);
  273. CREATE INDEX books_series_link_bidx ON books_series_link (book);
  274. CREATE INDEX books_tags_link_aidx ON books_tags_link (tag);
  275. CREATE INDEX books_tags_link_bidx ON books_tags_link (book);
  276. CREATE INDEX comments_idx ON comments (book);
  277. CREATE INDEX conversion_options_idx_a ON conversion_options (format COLLATE NOCASE);
  278. CREATE INDEX conversion_options_idx_b ON conversion_options (book);
  279. CREATE INDEX custom_columns_idx ON custom_columns (label);
  280. CREATE INDEX data_idx ON data (book);
  281. CREATE INDEX formats_idx ON data (format);
  282. CREATE INDEX languages_idx ON languages (lang_code COLLATE NOCASE);
  283. CREATE INDEX publishers_idx ON publishers (name COLLATE NOCASE);
  284. CREATE INDEX series_idx ON series (name COLLATE NOCASE);
  285. CREATE INDEX tags_idx ON tags (name COLLATE NOCASE);
  286. CREATE TRIGGER books_delete_trg
  287.             AFTER DELETE ON books
  288.             BEGIN
  289.                 DELETE FROM books_authors_link WHERE book=OLD.id;
  290.                 DELETE FROM books_publishers_link WHERE book=OLD.id;
  291.                 DELETE FROM books_ratings_link WHERE book=OLD.id;
  292.                 DELETE FROM books_series_link WHERE book=OLD.id;
  293.                 DELETE FROM books_tags_link WHERE book=OLD.id;
  294.                 DELETE FROM books_languages_link WHERE book=OLD.id;
  295.                 DELETE FROM data WHERE book=OLD.id;
  296.                 DELETE FROM comments WHERE book=OLD.id;
  297.                 DELETE FROM conversion_options WHERE book=OLD.id;
  298.                 DELETE FROM books_plugin_data WHERE book=OLD.id;
  299.                 DELETE FROM identifiers WHERE book=OLD.id;
  300.         END;
  301. CREATE TRIGGER books_insert_trg AFTER INSERT ON books
  302.         BEGIN
  303.             UPDATE books SET sort=title_sort(NEW.title),uuid=uuid4() WHERE id=NEW.id;
  304.         END;
  305. CREATE TRIGGER books_update_trg
  306.             AFTER UPDATE ON books
  307.             BEGIN
  308.             UPDATE books SET sort=title_sort(NEW.title)
  309.                          WHERE id=NEW.id AND OLD.title <> NEW.title;
  310.             END;
  311. CREATE TRIGGER fkc_comments_insert
  312.         BEFORE INSERT ON comments
  313.         BEGIN
  314.             SELECT CASE
  315.                 WHEN (SELECT id from books WHERE id=NEW.book) IS NULL
  316.                 THEN RAISE(ABORT, 'Foreign key violation: book not in books')
  317.             END;
  318.         END;
  319. CREATE TRIGGER fkc_comments_update
  320.         BEFORE UPDATE OF book ON comments
  321.         BEGIN
  322.             SELECT CASE
  323.                 WHEN (SELECT id from books WHERE id=NEW.book) IS NULL
  324.                 THEN RAISE(ABORT, 'Foreign key violation: book not in books')
  325.             END;
  326.         END;
  327. CREATE TRIGGER fkc_data_insert
  328.         BEFORE INSERT ON data
  329.         BEGIN
  330.             SELECT CASE
  331.                 WHEN (SELECT id from books WHERE id=NEW.book) IS NULL
  332.                 THEN RAISE(ABORT, 'Foreign key violation: book not in books')
  333.             END;
  334.         END;
  335. CREATE TRIGGER fkc_data_update
  336.         BEFORE UPDATE OF book ON data
  337.         BEGIN
  338.             SELECT CASE
  339.                 WHEN (SELECT id from books WHERE id=NEW.book) IS NULL
  340.                 THEN RAISE(ABORT, 'Foreign key violation: book not in books')
  341.             END;
  342.         END;
  343. CREATE TRIGGER fkc_delete_on_authors
  344.         BEFORE DELETE ON authors
  345.         BEGIN
  346.             SELECT CASE
  347.                 WHEN (SELECT COUNT(id) FROM books_authors_link WHERE author=OLD.id) > 0
  348.                 THEN RAISE(ABORT, 'Foreign key violation: authors is still referenced')
  349.             END;
  350.         END;
  351. CREATE TRIGGER fkc_delete_on_languages
  352.         BEFORE DELETE ON languages
  353.         BEGIN
  354.             SELECT CASE
  355.                 WHEN (SELECT COUNT(id) FROM books_languages_link WHERE lang_code=OLD.id) > 0
  356.                 THEN RAISE(ABORT, 'Foreign key violation: language is still referenced')
  357.             END;
  358.         END;
  359. CREATE TRIGGER fkc_delete_on_languages_link
  360.         BEFORE INSERT ON books_languages_link
  361.         BEGIN
  362.           SELECT CASE
  363.               WHEN (SELECT id from books WHERE id=NEW.book) IS NULL
  364.               THEN RAISE(ABORT, 'Foreign key violation: book not in books')
  365.               WHEN (SELECT id from languages WHERE id=NEW.lang_code) IS NULL
  366.               THEN RAISE(ABORT, 'Foreign key violation: lang_code not in languages')
  367.           END;
  368.         END;
  369. CREATE TRIGGER fkc_delete_on_publishers
  370.         BEFORE DELETE ON publishers
  371.         BEGIN
  372.             SELECT CASE
  373.                 WHEN (SELECT COUNT(id) FROM books_publishers_link WHERE publisher=OLD.id) > 0
  374.                 THEN RAISE(ABORT, 'Foreign key violation: publishers is still referenced')
  375.             END;
  376.         END;
  377. CREATE TRIGGER fkc_delete_on_series
  378.         BEFORE DELETE ON series
  379.         BEGIN
  380.             SELECT CASE
  381.                 WHEN (SELECT COUNT(id) FROM books_series_link WHERE series=OLD.id) > 0
  382.                 THEN RAISE(ABORT, 'Foreign key violation: series is still referenced')
  383.             END;
  384.         END;
  385. CREATE TRIGGER fkc_delete_on_tags
  386.         BEFORE DELETE ON tags
  387.         BEGIN
  388.             SELECT CASE
  389.                 WHEN (SELECT COUNT(id) FROM books_tags_link WHERE tag=OLD.id) > 0
  390.                 THEN RAISE(ABORT, 'Foreign key violation: tags is still referenced')
  391.             END;
  392.         END;
  393. CREATE TRIGGER fkc_insert_books_authors_link
  394.         BEFORE INSERT ON books_authors_link
  395.         BEGIN
  396.           SELECT CASE
  397.               WHEN (SELECT id from books WHERE id=NEW.book) IS NULL
  398.               THEN RAISE(ABORT, 'Foreign key violation: book not in books')
  399.               WHEN (SELECT id from authors WHERE id=NEW.author) IS NULL
  400.               THEN RAISE(ABORT, 'Foreign key violation: author not in authors')
  401.           END;
  402.         END;
  403. CREATE TRIGGER fkc_insert_books_publishers_link
  404.         BEFORE INSERT ON books_publishers_link
  405.         BEGIN
  406.           SELECT CASE
  407.               WHEN (SELECT id from books WHERE id=NEW.book) IS NULL
  408.               THEN RAISE(ABORT, 'Foreign key violation: book not in books')
  409.               WHEN (SELECT id from publishers WHERE id=NEW.publisher) IS NULL
  410.               THEN RAISE(ABORT, 'Foreign key violation: publisher not in publishers')
  411.           END;
  412.         END;
  413. CREATE TRIGGER fkc_insert_books_ratings_link
  414.         BEFORE INSERT ON books_ratings_link
  415.         BEGIN
  416.           SELECT CASE
  417.               WHEN (SELECT id from books WHERE id=NEW.book) IS NULL
  418.               THEN RAISE(ABORT, 'Foreign key violation: book not in books')
  419.               WHEN (SELECT id from ratings WHERE id=NEW.rating) IS NULL
  420.               THEN RAISE(ABORT, 'Foreign key violation: rating not in ratings')
  421.           END;
  422.         END;
  423. CREATE TRIGGER fkc_insert_books_series_link
  424.         BEFORE INSERT ON books_series_link
  425.         BEGIN
  426.           SELECT CASE
  427.               WHEN (SELECT id from books WHERE id=NEW.book) IS NULL
  428.               THEN RAISE(ABORT, 'Foreign key violation: book not in books')
  429.               WHEN (SELECT id from series WHERE id=NEW.series) IS NULL
  430.               THEN RAISE(ABORT, 'Foreign key violation: series not in series')
  431.           END;
  432.         END;
  433. CREATE TRIGGER fkc_insert_books_tags_link
  434.         BEFORE INSERT ON books_tags_link
  435.         BEGIN
  436.           SELECT CASE
  437.               WHEN (SELECT id from books WHERE id=NEW.book) IS NULL
  438.               THEN RAISE(ABORT, 'Foreign key violation: book not in books')
  439.               WHEN (SELECT id from tags WHERE id=NEW.tag) IS NULL
  440.               THEN RAISE(ABORT, 'Foreign key violation: tag not in tags')
  441.           END;
  442.         END;
  443. CREATE TRIGGER fkc_update_books_authors_link_a
  444.         BEFORE UPDATE OF book ON books_authors_link
  445.         BEGIN
  446.             SELECT CASE
  447.                 WHEN (SELECT id from books WHERE id=NEW.book) IS NULL
  448.                 THEN RAISE(ABORT, 'Foreign key violation: book not in books')
  449.             END;
  450.         END;
  451. CREATE TRIGGER fkc_update_books_authors_link_b
  452.         BEFORE UPDATE OF author ON books_authors_link
  453.         BEGIN
  454.             SELECT CASE
  455.                 WHEN (SELECT id from authors WHERE id=NEW.author) IS NULL
  456.                 THEN RAISE(ABORT, 'Foreign key violation: author not in authors')
  457.             END;
  458.         END;
  459. CREATE TRIGGER fkc_update_books_languages_link_a
  460.         BEFORE UPDATE OF book ON books_languages_link
  461.         BEGIN
  462.             SELECT CASE
  463.                 WHEN (SELECT id from books WHERE id=NEW.book) IS NULL
  464.                 THEN RAISE(ABORT, 'Foreign key violation: book not in books')
  465.             END;
  466.         END;
  467. CREATE TRIGGER fkc_update_books_languages_link_b
  468.         BEFORE UPDATE OF lang_code ON books_languages_link
  469.         BEGIN
  470.             SELECT CASE
  471.                 WHEN (SELECT id from languages WHERE id=NEW.lang_code) IS NULL
  472.                 THEN RAISE(ABORT, 'Foreign key violation: lang_code not in languages')
  473.             END;
  474.         END;
  475. CREATE TRIGGER fkc_update_books_publishers_link_a
  476.         BEFORE UPDATE OF book ON books_publishers_link
  477.         BEGIN
  478.             SELECT CASE
  479.                 WHEN (SELECT id from books WHERE id=NEW.book) IS NULL
  480.                 THEN RAISE(ABORT, 'Foreign key violation: book not in books')
  481.             END;
  482.         END;
  483. CREATE TRIGGER fkc_update_books_publishers_link_b
  484.         BEFORE UPDATE OF publisher ON books_publishers_link
  485.         BEGIN
  486.             SELECT CASE
  487.                 WHEN (SELECT id from publishers WHERE id=NEW.publisher) IS NULL
  488.                 THEN RAISE(ABORT, 'Foreign key violation: publisher not in publishers')
  489.             END;
  490.         END;
  491. CREATE TRIGGER fkc_update_books_ratings_link_a
  492.         BEFORE UPDATE OF book ON books_ratings_link
  493.         BEGIN
  494.             SELECT CASE
  495.                 WHEN (SELECT id from books WHERE id=NEW.book) IS NULL
  496.                 THEN RAISE(ABORT, 'Foreign key violation: book not in books')
  497.             END;
  498.         END;
  499. CREATE TRIGGER fkc_update_books_ratings_link_b
  500.         BEFORE UPDATE OF rating ON books_ratings_link
  501.         BEGIN
  502.             SELECT CASE
  503.                 WHEN (SELECT id from ratings WHERE id=NEW.rating) IS NULL
  504.                 THEN RAISE(ABORT, 'Foreign key violation: rating not in ratings')
  505.             END;
  506.         END;
  507. CREATE TRIGGER fkc_update_books_series_link_a
  508.         BEFORE UPDATE OF book ON books_series_link
  509.         BEGIN
  510.             SELECT CASE
  511.                 WHEN (SELECT id from books WHERE id=NEW.book) IS NULL
  512.                 THEN RAISE(ABORT, 'Foreign key violation: book not in books')
  513.             END;
  514.         END;
  515. CREATE TRIGGER fkc_update_books_series_link_b
  516.         BEFORE UPDATE OF series ON books_series_link
  517.         BEGIN
  518.             SELECT CASE
  519.                 WHEN (SELECT id from series WHERE id=NEW.series) IS NULL
  520.                 THEN RAISE(ABORT, 'Foreign key violation: series not in series')
  521.             END;
  522.         END;
  523. CREATE TRIGGER fkc_update_books_tags_link_a
  524.         BEFORE UPDATE OF book ON books_tags_link
  525.         BEGIN
  526.             SELECT CASE
  527.                 WHEN (SELECT id from books WHERE id=NEW.book) IS NULL
  528.                 THEN RAISE(ABORT, 'Foreign key violation: book not in books')
  529.             END;
  530.         END;
  531. CREATE TRIGGER fkc_update_books_tags_link_b
  532.         BEFORE UPDATE OF tag ON books_tags_link
  533.         BEGIN
  534.             SELECT CASE
  535.                 WHEN (SELECT id from tags WHERE id=NEW.tag) IS NULL
  536.                 THEN RAISE(ABORT, 'Foreign key violation: tag not in tags')
  537.             END;
  538.         END;
  539. CREATE TRIGGER series_insert_trg
  540.         AFTER INSERT ON series
  541.         BEGIN
  542.           UPDATE series SET sort=NEW.name WHERE id=NEW.id;
  543.         END;
  544. CREATE TRIGGER series_update_trg
  545.         AFTER UPDATE ON series
  546.         BEGIN
  547.           UPDATE series SET sort=NEW.name WHERE id=NEW.id;
  548.         END;
  549. pragma user_version=21;
  550.