summaryrefslogtreecommitdiffstats
path: root/fbreader/src/database/booksdb/BooksDBQuery.cpp
diff options
context:
space:
mode:
Diffstat (limited to 'fbreader/src/database/booksdb/BooksDBQuery.cpp')
-rw-r--r--fbreader/src/database/booksdb/BooksDBQuery.cpp327
1 files changed, 0 insertions, 327 deletions
diff --git a/fbreader/src/database/booksdb/BooksDBQuery.cpp b/fbreader/src/database/booksdb/BooksDBQuery.cpp
deleted file mode 100644
index 134e43b..0000000
--- a/fbreader/src/database/booksdb/BooksDBQuery.cpp
+++ /dev/null
@@ -1,327 +0,0 @@
-/*
- * Copyright (C) 2009-2012 Geometer Plus <contact@geometerplus.com>
- *
- * This program is free software; you can redistribute it and/or modify
- * it under the terms of the GNU General Public License as published by
- * the Free Software Foundation; either version 2 of the License, or
- * (at your option) any later version.
- *
- * This program is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
- * GNU General Public License for more details.
- *
- * You should have received a copy of the GNU General Public License
- * along with this program; if not, write to the Free Software
- * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA
- * 02110-1301, USA.
- */
-
-#include <ZLibrary.h>
-
-#include "BooksDBQuery.h"
-
-const std::string BooksDBQuery::ArchiveEntryDelimiter = ":";
-
-const std::string BooksDBQuery::PREINIT_DATABASE = \
- "ATTACH @stateFile AS State; ";
-
-const std::string BooksDBQuery::INIT_DATABASE = \
- "CREATE TABLE IF NOT EXISTS Files ( " \
- " file_id INTEGER PRIMARY KEY, " \
- " name TEXT NOT NULL, " \
- " parent_id INTEGER REFERENCES Files (file_id), " \
- " size INTEGER, " \
- " CONSTRAINT Files_Unique UNIQUE (name, parent_id) " \
- "); " \
- " " \
- "CREATE TABLE IF NOT EXISTS Books ( " \
- " book_id INTEGER PRIMARY KEY, " \
- " encoding TEXT, " \
- " language TEXT, " \
- " title TEXT NOT NULL, " \
- " file_id INTEGER UNIQUE NOT NULL REFERENCES Files (file_id) " \
- "); " \
- " " \
- "CREATE TABLE IF NOT EXISTS Authors ( " \
- " author_id INTEGER PRIMARY KEY, " \
- " name TEXT NOT NULL, " \
- " sort_key TEXT NOT NULL, " \
- " CONSTRAINT Authors_Unique UNIQUE (name, sort_key) " \
- "); " \
- " " \
- "CREATE TABLE IF NOT EXISTS Series ( " \
- " series_id INTEGER PRIMARY KEY, " \
- " name TEXT UNIQUE NOT NULL " \
- "); " \
- " " \
- "CREATE TABLE IF NOT EXISTS Tags ( " \
- " tag_id INTEGER PRIMARY KEY, " \
- " name TEXT NOT NULL, " \
- " parent_id INTEGER REFERENCES Tags (tag_id), " \
- " CONSTRAINT Tags_Unique UNIQUE (parent_id, name) " \
- "); " \
- " " \
- "CREATE TABLE IF NOT EXISTS BookAuthor ( " \
- " author_id INTEGER NOT NULL REFERENCES Authors (author_id), " \
- " book_id INTEGER NOT NULL REFERENCES Books (book_id), " \
- " author_index INTEGER NOT NULL, " \
- " CONSTRAINT BookAuthor_Unique0 UNIQUE (author_id, book_id), " \
- " CONSTRAINT BookAuthor_Unique1 UNIQUE (book_id, author_index) " \
- "); " \
- " " \
- "CREATE TABLE IF NOT EXISTS BookSeries ( " \
- " book_id INTEGER UNIQUE NOT NULL REFERENCES Books (book_id), " \
- " series_id INTEGER NOT NULL REFERENCES Series (series_id), " \
- " book_index INTEGER " \
- "); " \
- " " \
- "CREATE TABLE IF NOT EXISTS BookTag ( " \
- " book_id INTEGER NOT NULL REFERENCES Books (book_id), " \
- " tag_id INTEGER NOT NULL REFERENCES Tags (tag_id), " \
- " CONSTRAINT BookTag_Unique UNIQUE (book_id, tag_id) " \
- "); " \
- " " \
- "CREATE TABLE IF NOT EXISTS State.RecentBooks ( " \
- " book_index INTEGER PRIMARY KEY, " \
- " book_id INTEGER UNIQUE REFERENCES Books (book_id) " \
- "); " \
- " " \
- "CREATE TABLE IF NOT EXISTS State.BookStateStack ( " \
- " book_id INTEGER NOT NULL REFERENCES Books (book_id), " \
- " position INTEGER NOT NULL, " \
- " paragraph INTEGER NOT NULL, " \
- " word INTEGER NOT NULL, " \
- " char INTEGER NOT NULL, " \
- " CONSTRAINT BookStateStack_Unique UNIQUE (book_id, position) " \
- "); " \
- " " \
- "CREATE TABLE IF NOT EXISTS PalmType ( " \
- " file_id INTEGER UNIQUE REFERENCES Files (file_id), " \
- " type TEXT NOT NULL " \
- "); " \
- " " \
- "CREATE TABLE IF NOT EXISTS State.StackPosition ( " \
- " book_id INTEGER UNIQUE NOT NULL REFERENCES Books (book_id), " \
- " stack_pos INTEGER NOT NULL " \
- "); " \
- " " \
- "CREATE TABLE IF NOT EXISTS State.BookList ( " \
- " book_id INTEGER UNIQUE NOT NULL REFERENCES Books (book_id) " \
- "); ";
-
-const std::string BooksDBQuery::SECOND_INIT_DATABASE = \
- "CREATE TRIGGER IF NOT EXISTS Books_Delete BEFORE DELETE " \
- "ON Books FOR EACH ROW " \
- "BEGIN " \
- " DELETE FROM BookAuthor WHERE book_id = OLD.book_id; " \
- " DELETE FROM BookSeries WHERE book_id = OLD.book_id; " \
- " DELETE FROM BookTag WHERE book_id = OLD.book_id; " \
- " DELETE FROM StackPosition WHERE book_id = OLD.book_id; " \
- " DELETE FROM BookStateStack WHERE book_id = OLD.book_id; " \
- " DELETE FROM RecentBooks WHERE book_id = OLD.book_id; " \
- " DELETE FROM BookList WHERE book_id = OLD.book_id; " \
- "END; " \
- " " \
- "CREATE TRIGGER IF NOT EXISTS Files_Delete BEFORE DELETE " \
- "ON Files FOR EACH ROW " \
- "BEGIN " \
- " DELETE FROM Books WHERE file_id = OLD.file_id; " \
- " DELETE FROM PalmType WHERE file_id = OLD.file_id; " \
- "END; " \
- " " \
- " " \
- "CREATE TRIGGER IF NOT EXISTS Files_Unique_Insert BEFORE INSERT " \
- "ON Files FOR EACH ROW " \
- "WHEN NEW.parent_id IS NULL " \
- " AND 0 != (SELECT count(*) FROM Files AS f WHERE f.parent_id IS NULL AND f.name = NEW.name) " \
- "BEGIN " \
- " SELECT RAISE(ABORT, \"columns name, parent_id are not unique\"); " \
- "END; " \
- " " \
- "CREATE TRIGGER IF NOT EXISTS Files_Directory_Insert BEFORE INSERT " \
- "ON Files FOR EACH ROW " \
- "WHEN NEW.parent_id IS NULL AND NEW.size IS NOT NULL " \
- "BEGIN " \
- " SELECT RAISE(ABORT, \"size is not null for Directory entry\"); " \
- "END; " \
- " " \
- "CREATE TRIGGER IF NOT EXISTS Files_ArchEntry_Insert BEFORE INSERT " \
- "ON Files FOR EACH ROW " \
- "WHEN NEW.parent_id IS NOT NULL " \
- " AND 0 != (SELECT count(*) FROM Files AS f WHERE f.file_id = NEW.parent_id AND f.parent_id IS NOT NULL) " \
- " AND NEW.size IS NOT NULL " \
- "BEGIN " \
- " SELECT RAISE(ABORT, \"size is not null for Archive Entry entry\"); " \
- "END; " \
- " " \
- "CREATE TRIGGER IF NOT EXISTS Files_Unique_Update BEFORE UPDATE " \
- "ON Files FOR EACH ROW " \
- "WHEN NEW.parent_id IS NULL " \
- " AND 0 != (SELECT count(*) FROM Files AS f WHERE f.parent_id IS NULL AND f.name = NEW.name AND f.file_id != NEW.file_id) " \
- "BEGIN " \
- " SELECT RAISE(ABORT, \"columns name, parent_id are not unique\"); " \
- "END; " \
- " " \
- "CREATE TRIGGER IF NOT EXISTS Files_Directory_Update BEFORE UPDATE " \
- "ON Files FOR EACH ROW " \
- "WHEN NEW.parent_id IS NULL AND NEW.size IS NOT NULL " \
- "BEGIN " \
- " SELECT RAISE(ABORT, \"size is not null for Directory entry\"); " \
- "END; " \
- " " \
- "CREATE TRIGGER IF NOT EXISTS Files_ArchEntry_Update BEFORE UPDATE " \
- "ON Files FOR EACH ROW " \
- "WHEN NEW.parent_id IS NOT NULL " \
- " AND 0 != (SELECT count(*) FROM Files AS f WHERE f.file_id = NEW.parent_id AND f.parent_id IS NOT NULL) " \
- " AND NEW.size IS NOT NULL " \
- "BEGIN " \
- " SELECT RAISE(ABORT, \"size is not null for Archive Entry entry\"); " \
- "END; ";
-
-const std::string BooksDBQuery::CLEAR_DATABASE = \
- "DROP TRIGGER Books_Delete " \
- "DROP TRIGGER Files_Delete " \
- "DROP TRIGGER Files_Unique_Insert " \
- "DROP TRIGGER Files_Directory_Insert " \
- "DROP TRIGGER Files_ArchEntry_Insert " \
- "DROP TRIGGER Files_Unique_Update " \
- "DROP TRIGGER Files_Directory_Update " \
- "DROP TRIGGER Files_ArchEntry_Update " \
- " " \
- "DROP TABLE State.BookList; " \
- "DROP TABLE State.StackPosition; " \
- "DROP TABLE PalmType; " \
- "DROP TABLE State.BookStateStack; " \
- "DROP TABLE State.RecentBooks; " \
- "DROP TABLE BookTag; " \
- "DROP TABLE BookSeries; " \
- "DROP TABLE BookAuthor; " \
- "DROP TABLE Tags; " \
- "DROP TABLE Series; " \
- "DROP TABLE Authors; " \
- "DROP TABLE Books; " \
- "DROP TABLE Files; ";
-
-
-const std::string BooksDBQuery::LOAD_BOOK = \
- "SELECT " \
- " b.book_id AS book_id, " \
- " b.encoding AS encoding, " \
- " b.language AS language, " \
- " b.title AS title, " \
- " b.file_id AS file_id " \
- "FROM Books AS b " \
- "WHERE b.file_id = @file_id; ";
-
-const std::string BooksDBQuery::ADD_BOOK = \
- "INSERT INTO Books (encoding, language, title, file_id) " \
- " VALUES ( " \
- " nullif(@encoding,\"auto\"), " \
- " nullif(@language,\"other\"), " \
- " @title, " \
- " @file_id " \
- " ); " \
- " " \
- "SELECT last_insert_rowid() AS book_id; ";
-
-const std::string BooksDBQuery::UPDATE_BOOK = \
- "UPDATE Books SET " \
- " encoding = nullif(@encoding,\"auto\"), " \
- " language = nullif(@language,\"other\"), " \
- " title = @title " \
- "WHERE " \
- " book_id = @book_id; ";
-
-
-
-const std::string BooksDBQuery::SET_BOOK_AUTHOR = \
- "INSERT OR REPLACE INTO BookAuthor (author_id, book_id, author_index) VALUES (@author_id, @book_id, @author_index); ";
-
-const std::string BooksDBQuery::TRIM_BOOK_AUTHORS = \
- "DELETE FROM BookAuthor WHERE book_id = @book_id AND author_index > @authors_number; ";
-
-const std::string BooksDBQuery::FIND_AUTHOR_ID = "SELECT author_id FROM Authors WHERE name = @name AND sort_key = @sort_key; ";
-
-const std::string BooksDBQuery::ADD_AUTHOR = \
- "INSERT INTO Authors (name, sort_key) VALUES (@name, @sort_key); " \
- "SELECT last_insert_rowid() AS author_id; ";
-
-
-const std::string BooksDBQuery::SET_BOOKSERIES = \
- "INSERT OR REPLACE INTO BookSeries (book_id, series_id, book_index) VALUES (" \
- " @book_id, " \
- " @series_id, " \
- " nullif(@book_index, \"\") " \
- "); ";
-
-const std::string BooksDBQuery::DELETE_BOOKSERIES = \
- "DELETE FROM BookSeries " \
- "WHERE " \
- " book_id = @book_id; ";
-
-const std::string BooksDBQuery::FIND_SERIES_ID = "SELECT series_id FROM Series WHERE name = @name; ";
-
-const std::string BooksDBQuery::ADD_SERIES = \
- "INSERT INTO Series (name) VALUES (@name); " \
- "SELECT last_insert_rowid() AS series_id; ";
-
-
-const std::string BooksDBQuery::GET_FILE_SIZE = "SELECT size FROM Files WHERE file_id = @file_id";
-const std::string BooksDBQuery::SET_FILE_SIZE = "UPDATE Files SET size = @size WHERE file_id = @file_id";
-
-const std::string BooksDBQuery::SET_ENCODING = "UPDATE Books SET encoding = @encoding WHERE book_id = @book_id; ";
-
-const std::string BooksDBQuery::LOAD_FILE_ENTRIES = "SELECT name FROM Files WHERE coalesce(parent_id, 0) = @file_id; ";
-
-const std::string BooksDBQuery::INVALIDATE_BOOKS = "UPDATE Books SET title = \"\" WHERE file_id = @file_id; ";
-
-
-const std::string BooksDBQuery::DELETE_FILE = "DELETE FROM Files WHERE file_id = @file_id; ";
-
-const std::string BooksDBQuery::DELETE_FILE_ENTRIES = "DELETE FROM Files WHERE parent_id = @file_id; ";
-
-const std::string BooksDBQuery::LOAD_FILE_ENTRY_IDS = "SELECT file_id FROM Files WHERE coalesce(parent_id, 0) = @file_id; ";
-
-const std::string BooksDBQuery::FIND_BOOK_ID = "SELECT book_id FROM Books WHERE file_id = @file_id; ";
-
-
-const std::string BooksDBQuery::LOAD_RECENT_BOOKS = \
- "SELECT b.file_id " \
- "FROM Books AS b " \
- " INNER JOIN RecentBooks AS rb ON b.book_id = rb.book_id " \
- "ORDER BY rb.book_index; ";
-
-const std::string BooksDBQuery::CLEAR_RECENT_BOOKS = "DELETE FROM RecentBooks; ";
-
-const std::string BooksDBQuery::INSERT_RECENT_BOOKS = "INSERT INTO RecentBooks (book_id) VALUES (@book_id); ";
-
-const std::string BooksDBQuery::FIND_FILE_NAME = "SELECT name, parent_id FROM Files WHERE file_id = @file_id; ";
-
-const std::string BooksDBQuery::LOAD_BOOKS = "SELECT book_id, encoding, language, title, file_id FROM Books; ";
-
-const std::string BooksDBQuery::UPDATE_AUTHOR = \
- "UPDATE Authors SET " \
- " name = @newName, " \
- " sort_key = @newSortKey " \
- "WHERE name = @oldName " \
- " AND sort_key = @oldSortKey; ";
-
-const std::string BooksDBQuery::UPDATE_BOOKS_AUTHOR = "UPDATE OR REPLACE BookAuthor SET author_id = @newAuthorId WHERE author_id = @oldAuthorId; ";
-
-const std::string BooksDBQuery::LOAD_BOOK_STATE_STACK = "SELECT paragraph, word, char FROM BookStateStack WHERE book_id = @book_id AND position > 0 ORDER BY position; ";
-const std::string BooksDBQuery::TRIM_BOOK_STATE_STACK = "DELETE FROM BookStateStack WHERE book_id = @book_id AND position > @stackSize; ";
-const std::string BooksDBQuery::SET_BOOK_STATE_STACK = "INSERT OR REPLACE INTO BookStateStack(book_id, position, paragraph, word, char) VALUES (@book_id, @position, @paragraph, @word, @char); ";
-
-const std::string BooksDBQuery::SET_PALM_TYPE = "INSERT OR REPLACE INTO PalmType (file_id, type) VALUES (@file_id, @type); ";
-const std::string BooksDBQuery::GET_PALM_TYPE = "SELECT type FROM PalmType WHERE file_id = @file_id; ";
-
-const std::string BooksDBQuery::LOAD_STACK_POS = "SELECT stack_pos FROM StackPosition WHERE book_id = @book_id; ";
-const std::string BooksDBQuery::SET_STACK_POS = "INSERT OR REPLACE INTO StackPosition(book_id, stack_pos) VALUES (@book_id, @stack_pos); ";
-
-const std::string BooksDBQuery::LOAD_BOOK_STATE = "SELECT paragraph, word, char FROM BookStateStack WHERE book_id = @book_id AND position = 0; ";
-const std::string BooksDBQuery::SET_BOOK_STATE = "INSERT OR REPLACE INTO BookStateStack(book_id, position, paragraph, word, char) VALUES (@book_id, 0, @paragraph, @word, @char); ";
-
-const std::string BooksDBQuery::INSERT_BOOK_LIST = "INSERT OR IGNORE INTO BookList(book_id) VALUES (@book_id); ";
-const std::string BooksDBQuery::DELETE_BOOK_LIST = "DELETE FROM BookList WHERE book_id = @book_id; ";
-const std::string BooksDBQuery::CHECK_BOOK_LIST = "SELECT COUNT(*) FROM BookList WHERE book_id = @book_id; ";