pica/database/mysql/mysql.h

60 lines
1.7 KiB
C++

//SPDX-FileCopyrightText: 2023 Yury Gubich <blue@macaw.me>
//SPDX-License-Identifier: GPL-3.0-or-later
#pragma once
#include <stdexcept>
#include <filesystem>
#include <optional>
#include <mysql.h>
#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<Asset> listAssets (unsigned int owner) override;
Asset addAsset (const Asset& asset) override;
bool deleteAsset(unsigned int assetId, unsigned int actorId) override;
private:
void executeFile (const std::filesystem::path& relativePath);
static std::optional<std::string> 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);
}
};
};
}