asyncpg/src/SqlConnect.h

123 lines
4.5 KiB
C++
Raw Permalink Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

#pragma once
#include "global.h"
#include "SqlError.h"
#include "SqlResult.h"
#include "SqlValue.h"
#include <queue>
#include <functional>
using PGconn = struct pg_conn;
struct event_base;
namespace AsyncPg {
/// Соединение с базой данных
class ASYNCPGLIB SqlConnect
{
public:
/// Функция обратного вызова
using Callback = std::function<void(SqlConnect *)>;
/// Конструктор класса
/// @param connInfo Строка соединения с базой данных в URI формате
/// @param service Сервис ввода-вывода
explicit SqlConnect(std::string_view connInfo, struct event_base *evbase = nullptr);
/// Конструктор копирования
SqlConnect(const SqlConnect&) = delete;
/// Оператор копирования
void operator=(const SqlConnect&) = delete;
/// Конструктор перемещения
/// @param other Соединение с базой данных
SqlConnect(SqlConnect &&other) noexcept;
/// Оператор перемещения
/// @param other Соединение с базой данных
/// @return Соединение с базой данных
SqlConnect& operator=(SqlConnect &&other) noexcept;
/// Деструктор класса
~SqlConnect();
/// Выполняет запрос к базе данных
/// @param sql Запрос к базе данных
void execute(std::string_view sql);
/// Выполняет параметрический запрос к базе данных
/// @param sql Запрос к базе данных
/// @param params Параметры запроса
void execute(std::string_view sql, std::vector<SqlValue> params);
/// Создаёт параметрический запрос к базе данных
/// @param sql Запрос к базе данных
/// @param sqlTypes Типы параметров
void prepare(std::string_view sql, std::vector<SqlType> sqlTypes);
/// Выполняет подготовленный параметрический запрос к базе данных
/// @param params Параметры запроса
void execute(std::vector<SqlValue> params);
/// Отменяет запрос к базе данных
/// @return Результат операции
bool cancel();
/// Устанавливает обработчик результата выполнения запроса
/// @param func Функция обратного вызова
void post(Callback func);
/// Создаёт копию текущего соединения с базой данных
/// @return Соединение с базой данных
SqlConnect clone();
/// Возвращает ошибку выполнения запроса
/// @return Ошибка выполнения запроса
const SqlError &error() const;
/// Возвращает результат выполнения запроса
/// @return Результат выполнения запроса
const SqlResult &result() const;
/// Проверяет занято ли соединение выполнением запросов
/// @return Результат проверки
bool isBusy() const;
/// Производит соединение с PostgreSql
void connecting();
/// Производит подготовку параметрического SQL запроса
void preparing();
/// Производит запуск SQL запроса
void executing();
protected:
/// Возвращает соединение PostgreSql
/// @return Соединение PostgreSql
PGconn *connect();
/// Добавляет обработчик результата SQL запроса в очередь
/// @param callback Функция обратного вызова
/// @return Была ли вызван callback
bool push(const Callback &callback);
/// Убирает обработчик результата SQL запроса из очереди
void pop();
private:
struct event_base *_evbase = nullptr;
std::queue<Callback> _callbackQueue;
PGconn *_connect = nullptr;
std::string _connInfo;
SqlError _error;
SqlResult _result;
bool _isExec = true;
int _socket = -1;
};
}