diff --git a/database/pagedao.h b/database/pagedao.h index 7922335..5c2a7a2 100644 --- a/database/pagedao.h +++ b/database/pagedao.h @@ -13,6 +13,7 @@ class PageDao virtual bool exists(std::string page) const = 0; virtual bool exists(unsigned int id) const = 0; virtual std::optional find(std::string name) = 0; + virtual std::optional findByTitle(std::string title) = 0; virtual std::optional find(unsigned int id) = 0; virtual std::vector getPageList(QueryOption option) = 0; virtual std::vector fetchCategories(std::string pagename, QueryOption option) = 0; diff --git a/database/pagedaosqlite.cpp b/database/pagedaosqlite.cpp index b9e44a2..131b505 100644 --- a/database/pagedaosqlite.cpp +++ b/database/pagedaosqlite.cpp @@ -52,6 +52,26 @@ std::optional PageDaoSqlite::find(std::string name) } } +std::optional PageDaoSqlite::findByTitle(std::string title) +{ + Page result; + try + { + auto ps = *db << "SELECT id, name, title, lastrevision, visible FROM page WHERE title = ?"; + ps << title >> std::tie(result.pageid, result.name, result.title, result.current_revision, result.listed); + } + catch(const sqlite::errors::no_rows &e) + { + return {}; + } + catch(sqlite::sqlite_exception &e) + { + throwFrom(e); + } + + return result; +} + std::optional PageDaoSqlite::find(unsigned int id) { Page result; diff --git a/database/pagedaosqlite.h b/database/pagedaosqlite.h index 5a6754f..103c576 100644 --- a/database/pagedaosqlite.h +++ b/database/pagedaosqlite.h @@ -20,6 +20,7 @@ class PageDaoSqlite : public PageDao, protected SqliteDao bool exists(std::string name) const override; void save(const Page &page) override; std::optional find(std::string name) override; + std::optional findByTitle(std::string title) override; std::optional find(unsigned int id) override; std::vector getPageList(QueryOption option) override; std::vector fetchCategories(std::string pagename, QueryOption option) override;