bool BooksDB::deleteFromBookList(const Book &book) { if (book.bookId() == 0) { return false; } ((DBIntValue&)*myDeleteBookList->parameter("@book_id").value()) = book.bookId(); return myDeleteBookList->execute(); }
bool BooksDB::saveBookStateStack(const Book &book, const std::deque<ReadingState> &stack) { if (!isInitialized() || book.bookId() == 0) { return false; } mySaveBookStateStack->setState(book.bookId(), stack); return executeAsTransaction(*mySaveBookStateStack); }
bool BooksDB::insertIntoBookList(const Book &book) { if (book.bookId() == 0) { return false; } ((DBIntValue&)*myInsertBookList->parameter("@book_id").value()) = book.bookId(); return myInsertBookList->execute(); }
bool BooksDB::setStackPos(const Book &book, int stackPos) { if (book.bookId() == 0) { return false; } ((DBIntValue&)*mySetStackPos->parameter("@book_id").value()) = book.bookId(); ((DBIntValue&)*mySetStackPos->parameter("@stack_pos").value()) = stackPos; return mySetStackPos->execute(); }
bool BooksDB::setBookState(const Book &book, const ReadingState &state) { if (book.bookId() == 0) { return false; } ((DBIntValue&)*mySetBookState->parameter("@book_id").value()) = book.bookId(); ((DBIntValue&)*mySetBookState->parameter("@paragraph").value()) = state.Paragraph; ((DBIntValue&)*mySetBookState->parameter("@word").value()) = state.Word; ((DBIntValue&)*mySetBookState->parameter("@char").value()) = state.Character; return mySetBookState->execute(); }
bool BooksDB::checkBookList(const Book &book) { if (book.bookId() == 0) { return false; } ((DBIntValue&)*myCheckBookList->parameter("@book_id").value()) = book.bookId(); shared_ptr<DBValue> res = myCheckBookList->executeScalar(); if (res.isNull() || res->type() != DBValue::DBINT) { return false; } const int checkRes = ((DBIntValue&)*res).value(); return checkRes > 0; }
int BooksDB::loadStackPos(const Book &book) { if (book.bookId() == 0) { return 0; } ((DBIntValue&)*myLoadStackPos->parameter("@book_id").value()) = book.bookId(); shared_ptr<DBValue> stackPosValue = myLoadStackPos->executeScalar(); if (stackPosValue.isNull() || stackPosValue->type() != DBValue::DBINT) { return 0; } return ((DBIntValue&)*stackPosValue).value(); }
bool BooksDB::removeBook(const Book &book) { if (!isInitialized() || book.bookId() == 0) { return false; } myDeleteBook->setFileName(book.file().path()); return executeAsTransaction(*myDeleteBook); }
bool BooksDB::setEncoding(const Book &book, const std::string &encoding) { if (!isInitialized()) { return false; } shared_ptr<DBCommand> command = SQLiteFactory::createCommand(BooksDBQuery::SET_ENCODING, connection()); command->parameters().push_back(DBCommandParameter("@book_id", new DBIntValue(book.bookId()))); command->parameters().push_back(DBCommandParameter("@encoding", new DBTextValue(encoding))); return command->execute(); }
bool BooksDB::loadBookState(const Book &book, ReadingState &state) { state.Paragraph = state.Word = state.Character = 0; if (book.bookId() == 0) { return false; } ((DBIntValue&)*myLoadBookState->parameter("@book_id").value()) = book.bookId(); shared_ptr<DBDataReader> reader = myLoadBookState->executeReader(); if (reader.isNull()) { return false; } if (!reader->next() || reader->type(0) != DBValue::DBINT /* paragraph */ || reader->type(1) != DBValue::DBINT /* word */ || reader->type(2) != DBValue::DBINT /* char */) { return false; } state.Paragraph = reader->intValue(0); state.Word = reader->intValue(1); state.Character = reader->intValue(2); return true; }
bool BooksDB::loadBookStateStack(const Book &book, std::deque<ReadingState> &stack) { if (book.bookId() == 0) { return false; } ((DBIntValue&)*myLoadBookStateStack->parameter("@book_id").value()) = book.bookId(); shared_ptr<DBDataReader> reader = myLoadBookStateStack->executeReader(); if (reader.isNull()) { return false; } while (reader->next()) { if (reader->type(0) != DBValue::DBINT /* paragraph */ || reader->type(1) != DBValue::DBINT /* word */ || reader->type(2) != DBValue::DBINT /* char */) { return false; } const int paragraph = reader->intValue(0); const int word = reader->intValue(1); const int character = reader->intValue(2); stack.push_back(ReadingState(paragraph, word, character)); } return true; }