//SPDX-FileCopyrightText: 2023 Yury Gubich //SPDX-License-Identifier: GPL-3.0-or-later #pragma once #include #include #include #include #include "database/interface.h" #include "utils/helpers.h" namespace DB { class MySQL : public Interface { class Statement; class Transaction; public: MySQL(); ~MySQL() override; void connect(const std::string& path) override; void disconnect() override; void setCredentials(const std::string& login, const std::string& password) override; void setDatabase(const std::string& database) override; void migrate(uint8_t targetVersion) override; uint8_t getVersion() override; void setVersion(uint8_t version) override; unsigned int registerAccount(const std::string& login, const std::string& hash) override; std::string getAccountHash(const std::string& login) override; unsigned int createSession(const std::string& login, const std::string& access, const std::string& renew) override; Session findSession(const std::string& accessToken) override; private: void executeFile(const std::filesystem::path& relativePath); static std::optional getComment(std::string& string); unsigned int lastInsertedId(); protected: MYSQL connection; std::string login; std::string password; std::string database; struct ResDeleter { void operator () (MYSQL_RES* res) { mysql_free_result(res); } }; }; }