//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; Session createSession (const std::string& login, const std::string& access, const std::string& renew) override; Session findSession (const std::string& accessToken) override; std::vector listAssets (unsigned int owner) 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); } }; }; }