From 667776e3d7667756addfc563dae8bc1eb86a9e3d Mon Sep 17 00:00:00 2001 From: Albert S Date: Sun, 4 Nov 2018 19:31:58 +0100 Subject: [PATCH] Page: add id field --- database/pagedao.h | 4 ++-- database/pagedaosqlite.cpp | 7 ++++--- database/pagedaosqlite.h | 4 ++-- page.h | 2 +- 4 files changed, 9 insertions(+), 8 deletions(-) diff --git a/database/pagedao.h b/database/pagedao.h index 3e0608b..7594668 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 0e8d64b..3de7e0d 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 = ?"; @@ -91,7 +92,7 @@ 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 2d27aee..459a9b0 100644 --- a/database/pagedaosqlite.h +++ b/database/pagedaosqlite.h @@ -11,11 +11,11 @@ class PageDaoSqlite : public PageDao, protected SqliteDao public: PageDaoSqlite() { } 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 e9b6b97..bc6e425 100644 --- a/page.h +++ b/page.h @@ -9,7 +9,7 @@ public: std::string name; bool listed; unsigned int current_revision; - + unsigned int pageid; }; #endif // PAGE_H