This commit is contained in:
Alexander
2023-08-19 14:33:14 +03:00
parent 2fdb100ee0
commit 9b37f0477e
3 changed files with 456 additions and 146 deletions

View File

@@ -12,84 +12,206 @@ public interface IDbEngine
/// </summary>
string ConnectionString { get; set; }
#region Небезопасные методы
Task<bool> ExecuteAsync (string sql, object model);
#region Базовые операции
/// <summary>
/// Запрос на получение одной строки
/// Выполняем команду
/// </summary>
/// <typeparam name="T">Тип передаваемого значения</typeparam>
/// <param name="sql">Запрос</param>
/// <param name="model">Данные запроса</param>
/// <returns>Возвращает тип <see cref="T"/> или значение по умолчанию</returns>
Task<T> QueryRowAsync<T> (string sql, object model);
/// <param name="values">Данные запроса</param>
/// <returns>Количество затронутых строк</returns>
Task<int> ExecuteAsync (string sql, object values);
/// <summary>
/// Выполняем команду
/// </summary>
/// <param name="sql">Запрос</param>
/// <param name="values">Данные запроса</param>
/// <returns>Количество затронутых строк</returns>
int Execute (string sql, object values);
/// <summary>
/// Запрос
/// </summary>
/// <typeparam name="T">Тип передаваемого значения</typeparam>
/// <param name="sql">Запрос</param>
/// <param name="model">Данные запроса</param>
/// <param name="values">Данные запроса</param>
/// <returns>Возвращает массив типа <see cref="T"/> или значение по умолчанию</returns>
Task<IEnumerable<T>> QueryAsync<T> (string sql, object model);
#endregion
#region Получение
Task<IEnumerable<T>> QueryAsync<T> (string sql, object values);
/// <summary>
/// Выборка данных из таблицы
/// Запрос
/// </summary>
/// <typeparam name="T">Тип данных</typeparam>
/// <param name="table">Имя таблицы</param>
/// <param name="columns">Выбор столбцов таблицы, которые должны попасть в выборку (пустая -- все)</param>
/// <param name="where">Массив значений столбцов, которые должны попасть в выборку</param>
/// <param name="orderBy">Сортировка</param>
/// <param name="limit">Сколько максимально элементов должно быть в выборке (0 -- без ограничения)</param>
/// <returns>Массив типа <see cref="T"/></returns>
Task<IEnumerable<T>> SelectAsync<T> (string table, string[] columns, List<KeyValue<string, string>> where, string? orderBy, int limit = 0);
/// <typeparam name="T">Тип передаваемого значения</typeparam>
/// <param name="sql">Запрос</param>
/// <param name="values">Данные запроса</param>
/// <returns>Возвращает массив типа <see cref="T"/> или значение по умолчанию</returns>
IEnumerable<T> Query<T> (string sql, object values);
/// <summary>
/// Выборка строки из таблицы
/// Запрос строки
/// </summary>
/// <typeparam name="T">Тип данных</typeparam>
/// <param name="table">Имя таблицы</param>
/// <param name="columns">Выбор столбцов таблицы, которые должны попасть в выборку (пустая -- все)</param>
/// <param name="where">Массив значений столбцов, которые должны попасть в выборку</param>
/// <param name="orderBy">Сортировка</param>
/// <returns>Тип <see cref="T"/> или null</returns>
Task<T?> SelectRowAsync<T> (string table, string[] columns, List<KeyValue<string, string>> where, string? orderBy = null);
#endregion
/// <typeparam name="T">Тип передаваемого значения</typeparam>
/// <param name="sql">Запрос</param>
/// <param name="values">Данные запроса</param>
/// <returns>Возвращает массив типа <see cref="T"/> или значение по умолчанию</returns>
Task<T?> QueryRowAsync<T> (string sql, object values);
#region Вычисление числа элементов в таблице
/// <summary>
/// Вычисляет число строк в таблице <paramref name="table"/>
/// Запрос строки
/// </summary>
/// <param name="table">Таблица</param>
/// <returns>Число строк в таблице <paramref name="table"/></returns>
Task<int> CountAsync (string table);
/// <typeparam name="T">Тип передаваемого значения</typeparam>
/// <param name="sql">Запрос</param>
/// <param name="values">Данные запроса</param>
/// <returns>Возвращает массив типа <see cref="T"/> или значение по умолчанию</returns>
T? QueryRow<T> (string sql, object values);
#endregion
#region Добавление строки в таблицу
#region Получение данных
Task<TPit> InsertAsync<T, TPit> (string table, T entity, KeyValue<string, TPit> primaryIndex);
/// <summary>
/// Получает массив данных (SELECT * FROM...)
/// </summary>
/// <typeparam name="T">Тип получаемых данных</typeparam>
/// <param name="sql">SQL-запрос</param>
/// <param name="values">Данные запроса</param>
/// <returns>Массив результата запроса</returns>
Task<IEnumerable<T>> GetResultsAsync<T> (string sql, object values);
Task<bool> InsertUpdateAsync<T> (string table, T entity);
/// <summary>
/// Получает массив данных (SELECT * FROM...)
/// </summary>
/// <typeparam name="T">Тип получаемых данных</typeparam>
/// <param name="sql">SQL-запрос</param>
/// <param name="values">Данные запроса</param>
/// <returns>Массив результата запроса</returns>
IEnumerable<T> GetResults<T> (string sql, object values);
/// <summary>
/// Получает строку в массиве данных
/// </summary>
/// <typeparam name="T">Тип получаемых данных</typeparam>
/// <param name="sql">SQL-запрос</param>
/// <param name="values">Данные запроса</param>
/// <returns>Строки данных или null</returns>
Task<T?> GetRowAsync<T> (string sql, object values);
/// <summary>
/// Получает строку в массиве данных
/// </summary>
/// <typeparam name="T">Тип получаемых данных</typeparam>
/// <param name="sql">SQL-запрос</param>
/// <param name="values">Данные запроса</param>
/// <returns>Строки данных или null</returns>
T? GetRow<T> (string sql, object values);
/// <summary>
/// Получает колонку в массиве данных
/// </summary>
/// <typeparam name="T">Тип получаемых данных</typeparam>
/// <param name="sql">SQL-запрос</param>
/// <param name="values">Данные запроса</param>
/// <returns>Колонка данных или null</returns>
Task<IEnumerable<T>> GetColAsync<T> (string sql, object values) where T : IComparable, IConvertible, IEquatable<T>;
/// <summary>
/// Получает колонку в массиве данных
/// </summary>
/// <typeparam name="T">Тип получаемых данных</typeparam>
/// <param name="sql">SQL-запрос</param>
/// <param name="values">Данные запроса</param>
/// <returns>Колонка данных или null</returns>
IEnumerable<T> GetCol<T> (string sql, object values) where T : IComparable, IConvertible, IEquatable<T>;
/// <summary>
/// Получение значение единичного поля
/// </summary>
/// <typeparam name="T">Тип получаемых данных</typeparam>
/// <param name="sql">SQL-запрос</param>
/// <param name="values">Данные запроса</param>
/// <returns>Поле или null</returns>
Task<T?> GetVarAsync<T> (string sql, object values) where T : IComparable, IConvertible, IEquatable<T>;
/// <summary>
/// Получение значение единичного поля
/// </summary>
/// <typeparam name="T">Тип получаемых данных</typeparam>
/// <param name="sql">SQL-запрос</param>
/// <param name="values">Данные запроса</param>
/// <returns>Поле или null</returns>
T? GetVar<T> (string sql, object values) where T : IComparable, IConvertible, IEquatable<T>;
#endregion
#region Обновление строки в таблице
#region CRUD данные
/// <summary>
/// Вставляет данные в таблицу
/// </summary>
/// <typeparam name="T">Класс данных</typeparam>
/// <param name="data">Данные</param>
/// <param name="tableName">Имя таблицы</param>
/// <returns>Результат выполнения</returns>
Task<bool> InsertAsync<T> (T data, string tableName) where T : class;
Task<bool> UpdateAsync<T> (string table, T entity, KeyValue<string, string> where);
/// <summary>
/// Вставляет данные в таблицу
/// </summary>
/// <typeparam name="T">Класс данных</typeparam>
/// <param name="data">Данные</param>
/// <param name="tableName">Имя таблицы</param>
/// <returns>Результат выполнения</returns>
bool Insert<T> (T data, string tableName) where T : class;
#endregion
/// <summary>
/// Обновляет строку в таблице
/// </summary>
/// <typeparam name="T">Класс данных</typeparam>
/// <param name="data">Данные</param>
/// <param name="tableName">Имя таблицы</param>
/// <param name="whereConditionColumn">Условие поиска строки. ВНИМАНИЕ! Должно быть одним из указанных свойств типа класса data</param>
/// <returns>Результат выполнения</returns>
Task<bool> UpdateAsync<T> (T data, string tableName, string whereConditionColumn) where T : class;
#region Удаление строк
/// <summary>
/// Обновляет строку в таблице
/// </summary>
/// <typeparam name="T">Класс данных</typeparam>
/// <param name="data">Данные</param>
/// <param name="tableName">Имя таблицы</param>
/// <param name="whereConditionColumn">Условие поиска строки. ВНИМАНИЕ! Должно быть одним из указанных свойств типа класса data</param>
/// <returns>Результат выполнения</returns>
bool Update<T> (T data, string tableName, string whereConditionColumn) where T : class;
Task<bool> DeleteAsync<T> (string table, KeyValue<string, string> where);
/// <summary>
/// Удаляет строки
/// </summary>
/// <param name="tableName">Имя таблицы</param>
/// <param name="where">Условие</param>
/// <returns>Результат выполнения</returns>
Task<bool> DeleteAsync (string tableName, KeyValue<string, object> where);
Task<bool> DeleteRowAsync<T> (string table, KeyValue<string, string> where);
/// <summary>
/// Удаляет строки
/// </summary>
/// <param name="tableName">Имя таблицы</param>
/// <param name="where">Условие</param>
/// <returns>Результат выполнения</returns>
bool Delete (string tableName, KeyValue<string, object> where);
/// <summary>
/// Удаляет строку
/// </summary>
/// <param name="tableName">Имя таблицы</param>
/// <param name="where">Условие</param>
/// <returns>Результат выполнения</returns>
Task<bool> DeleteRowAsync (string tableName, KeyValue<string, object> where);
/// <summary>
/// Удаляет строку
/// </summary>
/// <param name="tableName">Имя таблицы</param>
/// <param name="where">Условие</param>
/// <returns>Результат выполнения</returns>
bool DeleteRow (string tableName, KeyValue<string, object> where);
#endregion
}