diff --git a/database/pagedao.h b/database/pagedao.h index 6c71331..7922335 100644 --- a/database/pagedao.h +++ b/database/pagedao.h @@ -11,9 +11,9 @@ class PageDao public: PageDao(); virtual bool exists(std::string page) const = 0; - virtual bool exists(int id) const = 0; + virtual bool exists(unsigned int id) const = 0; virtual std::optional find(std::string name) = 0; - virtual std::optional find(int id) = 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; virtual void deletePage(std::string page) = 0; diff --git a/database/pagedaosqlite.cpp b/database/pagedaosqlite.cpp index 3467059..db19a04 100644 --- a/database/pagedaosqlite.cpp +++ b/database/pagedaosqlite.cpp @@ -26,7 +26,7 @@ SOFTWARE. /* TODO: copied from C version mostly, review whether access to table other than page is ok */ -bool PageDaoSqlite::exists(int id) const +bool PageDaoSqlite::exists(unsigned int id) const { auto binder = *db << "SELECT 1 from page WHERE id = ?" << id; return execBool(binder); @@ -44,9 +44,10 @@ std::optional PageDaoSqlite::find(std::string name) return find(pageid); } -std::optional PageDaoSqlite::find(int id) +std::optional PageDaoSqlite::find(unsigned int id) { Page result; + result.pageid = id; try { auto ps = *db << "SELECT name, lastrevision, visible FROM page WHERE id = ?"; @@ -88,8 +89,9 @@ void PageDaoSqlite::save(const Page &page) { try { - *db << "INSERT INTO page (name, lastrevision, visible) VALUES(?, ?, ?)" << page.name << page.current_revision - << page.listed; + *db << "INSERT OR REPLACE INTO page (id, name, lastrevision, visible) VALUES((SELECT id FROM page WHERE name = " + "? OR id = ?), ?, ?, ?)" + << page.name << page.pageid << page.name << page.current_revision << page.listed; } catch(sqlite::sqlite_exception &e) { diff --git a/database/pagedaosqlite.h b/database/pagedaosqlite.h index d4d7290..17b89ce 100644 --- a/database/pagedaosqlite.h +++ b/database/pagedaosqlite.h @@ -13,11 +13,11 @@ class PageDaoSqlite : public PageDao, protected SqliteDao { } void deletePage(std::string page) override; - bool exists(int id) const override; + bool exists(unsigned int id) const override; bool exists(std::string name) const override; void save(const Page &page) override; std::optional find(std::string name) override; - std::optional find(int id) override; + std::optional find(unsigned int id) override; std::vector getPageList(QueryOption option) override; std::vector fetchCategories(std::string pagename, QueryOption option) override; using SqliteDao::SqliteDao; diff --git a/page.h b/page.h index 1cf9e6c..75aca8e 100644 --- a/page.h +++ b/page.h @@ -9,6 +9,7 @@ class Page std::string name; bool listed; unsigned int current_revision; + unsigned int pageid; }; #endif // PAGE_H