Mercurial > malikania
diff database/sqlite/src/sqlite_character_dao.cpp @ 106:f8c6d2244795
Server: rework model and dao
author | David Demelier <markand@malikania.fr> |
---|---|
date | Mon, 04 Sep 2017 19:41:18 +0200 |
parents | |
children |
line wrap: on
line diff
--- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/database/sqlite/src/sqlite_character_dao.cpp Mon Sep 04 19:41:18 2017 +0200 @@ -0,0 +1,80 @@ +/* + * sqlite_character_dao.cpp -- character_dao for SQLite + * + * Copyright (c) 2013-2017 David Demelier <markand@malikania.fr> + * + * Permission to use, copy, modify, and/or distribute this software for any + * purpose with or without fee is hereby granted, provided that the above + * copyright notice and this permission notice appear in all copies. + * + * THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES + * WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF + * MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR + * ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES + * WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN + * ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF + * OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE. + */ + +#include <malikania/server/db/character.hpp> +#include <malikania/server/db/character_dao.hpp> + +#include "common.hpp" + +namespace mlk { + +namespace server { + +class sqlite_character_dao : public character_dao { +public: + void save(character&) override; + void remove(character&) override; + void set_name(character&, const std::string&) override; +}; + +void sqlite_character_dao::save(character& ch) +{ + const std::string sql( + "INSERT INTO character(name) VALUES (?)" + ); + + mlk::server::sqlite::exec(sql, {ch.name()}); + + ch.set_id(sqlite3_last_insert_rowid(mlk::server::sqlite::handle)); +} + +void sqlite_character_dao::remove(character& ch) +{ + const std::string sql( + "DELETE" + " FROM character" + " WHERE id = ?" + ); + + mlk::server::sqlite::exec(sql, {ch.id()}); +} + +void sqlite_character_dao::set_name(character& ch, const std::string& name) +{ + const std::string sql( + "UPDATE character" + " SET name = ?" + " WHERE id = ?" + ); + + mlk::server::sqlite::exec(sql, {name, ch.id()}); +} + +} // !server + +} // !mlk + +extern "C" { + +BOOST_SYMBOL_EXPORT +std::unique_ptr<mlk::server::character_dao> mlk_character_dao() +{ + return std::make_unique<mlk::server::sqlite_character_dao>(); +} + +} // !C