/
farado
/
farado-binara
Обзор
Документация
Войти
/
farado
/
farado-binara
Код
Запросы
0
Пакеты
0
Релизы
0
CI/CD
Аналитика
develop
src/datenaro/database/data_elements/data_phase.cpp
270 строк
7 KB
Ostapenko Alexey
[common][datenaro][tests] Добавлена сущность предметной области: phase.
25 мар 2024, 18:07
25 мар 2024, 18:07
0f59364
Код
Авторство
О чём код?
#include "common/elements/phase.h" #include "data_phase.h" namespace Database { DataPhase::DataPhase(Elements::Element* element) { setElement(element); } DataPhase::DataPhase(std::shared_ptr<Elements::Element> element) { m_element = element; } DataPhase::DataPhase(sqlite::database& database, unsigned id) { fromDatabase(database, id); } DataElement* DataPhase::clone() const { if (m_element) return new DataPhase(m_element->clone()); return nullptr; } DataElement* DataPhase::wrap(Elements::Element* element) const { return new DataPhase(element); } void DataPhase::toDatabase(sqlite::database& database) { const auto element = std::dynamic_pointer_cast<Elements::Phase>(m_element); if (nullptr == element) return; if (0 == element->id()) { const auto sqlStr = "INSERT INTO Phase " "( projectId " ", caption " ", description " ", searchCaption " ", searchDescription " ", beginDate " ", endDate " ") VALUES (?,?,?,?,?,?,?);"; database << sqlStr << element->projectId() << element->caption() << element->description() << element->searchCaption() << element->searchDescription() << element->beginDate() << element->endDate(); element->setId(lastAddedId(database)); return; } const auto sqlStr = "INSERT OR REPLACE INTO Phase " "( id " ", projectId " ", caption " ", description " ", searchCaption " ", searchDescription " ", beginDate " ", endDate " ") VALUES (?,?,?,?,?,?,?,?);"; database << sqlStr << element->id() << element->projectId() << element->caption() << element->description() << element->searchCaption() << element->searchDescription() << element->beginDate() << element->endDate(); } void DataPhase::fromDatabase(sqlite::database& database, unsigned id) { if (nullptr == m_element) m_element.reset(new Elements::Phase()); const auto element = std::dynamic_pointer_cast<Elements::Phase>(m_element); const auto sqlStr = "SELECT " " id " ", projectId " ", caption " ", description " ", searchCaption " ", searchDescription " ", beginDate " ", endDate " "FROM Phase WHERE id = ?;"; database << sqlStr << id >> [element]( unsigned id, unsigned projectId, std::string caption, std::string description, std::string searchCaption, std::string searchDescription, std::time_t beginDate, std::time_t endDate ) { element->setId(id); element->setProjectId(projectId); element->setCaption(caption); element->setDescription(description); element->setSearchCaption(searchCaption); element->setSearchDescription(searchDescription); element->setBeginDate(beginDate); element->setEndDate(endDate); }; } std::vector<Elements::Element*> DataPhase::fromDatabaseElements( sqlite::database& database, std::vector<unsigned> ids ) const { const auto sqlStr = "SELECT " " id " ", projectId " ", caption " ", description " ", searchCaption " ", searchDescription " ", beginDate " ", endDate " "FROM Phase WHERE id in (" + questionMarks(ids.size()) + ")"; auto query = database << sqlStr; for (auto id : ids) query << id; std::vector<Elements::Element*> result; query >> [&result]( unsigned id, unsigned projectId, std::string caption, std::string description, std::string searchCaption, std::string searchDescription, std::time_t beginDate, std::time_t endDate ) { auto element = new Elements::Phase(); element->setId(id); element->setProjectId(projectId); element->setCaption(caption); element->setDescription(description); element->setSearchCaption(searchCaption); element->setSearchDescription(searchDescription); element->setBeginDate(beginDate); element->setEndDate(endDate); result.push_back(element); }; query.execute(); query.reset(); return result; } // Получение идентификаторов --------------------------------------------------- std::vector<unsigned> DataPhase::ids( sqlite::database& database ) { std::vector<unsigned> result; database << "SELECT id FROM Phase;" >> [&result](unsigned id) { result.emplace_back(id); }; return result; } std::vector<unsigned> DataPhase::idsByProjectId( sqlite::database& database, unsigned id ) { std::vector<unsigned> result; database << "SELECT id FROM Phase WHERE projectId = ?;" << id >> [&result](unsigned id) { result.emplace_back(id); }; return result; } // Поиск по критериям ---------------------------------------------------------- std::vector<unsigned> DataPhase::idsByText( sqlite::database& database, const std::string& value ) { std::vector<unsigned> result; // TODO: реализовать метод: // * по caption // * по description return result; } std::vector<unsigned> DataPhase::idsByCaption( sqlite::database& database, const std::string& value ) { std::vector<unsigned> result; // TODO: реализовать метод return result; } std::vector<unsigned> DataPhase::idsByDescription( sqlite::database& database, const std::string& value ) { std::vector<unsigned> result; // TODO: реализовать метод return result; } // Удаление -------------------------------------------------------------------- void DataPhase::removeOne( sqlite::database& database, unsigned id ) { std::vector<unsigned> ids = { id }; remove(database, ids); } void DataPhase::remove( sqlite::database& database, std::vector<unsigned> ids ) { const auto sqlStr = "DELETE FROM Phase WHERE id in (" + questionMarks(ids.size()) + ")"; auto query = database << sqlStr; for (auto id : ids) query << id; query.execute(); query.reset(); } } // namespace Elements