using System;
using System.Collections.Generic;
using System.Data;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using XP.Common.Database.Models;
namespace XP.Common.Database.Interfaces
{
///
/// 通用数据库操作接口(适配任意数据库,SQLite为具体实现)
///
public interface IDbContext : IDisposable
{
///
/// 打开数据库连接
///
IDbExecuteResult OpenConnection();
///
/// 异步打开数据库连接
///
Task OpenConnectionAsync();
///
/// 开始事务
///
(IDbExecuteResult Result, IDbTransaction? Transaction) BeginTransaction();
///
/// 执行增删改SQL(无返回值)
///
/// SQL语句(参数化)
/// 参数集合(key=参数名,value=参数值)
IDbExecuteResult ExecuteNonQuery(string sql, Dictionary? parameters = null);
///
/// 异步执行增删改SQL
///
Task ExecuteNonQueryAsync(string sql, Dictionary? parameters = null);
///
/// 执行查询并返回单个值(如Count/Sum)
///
/// 返回值类型
/// SQL语句
/// 参数集合
(IDbExecuteResult Result, T? Value) ExecuteScalar(string sql, Dictionary? parameters = null);
///
/// 异步执行查询并返回单个值
///
Task<(IDbExecuteResult Result, T? Value)> ExecuteScalarAsync(string sql, Dictionary? parameters = null);
///
/// 执行查询并返回DataTable
///
(IDbExecuteResult Result, DataTable? Data) ExecuteDataTable(string sql, Dictionary? parameters = null);
///
/// 异步执行查询并返回DataTable
///
Task<(IDbExecuteResult Result, DataTable? Data)> ExecuteDataTableAsync(string sql, Dictionary? parameters = null);
///
/// 执行查询并映射为实体列表
///
/// 实体类型(需有无参构造函数)
(IDbExecuteResult Result, List Data) QueryList(string sql, Dictionary? parameters = null) where T : new();
///
/// 异步执行查询并映射为实体列表
///
Task<(IDbExecuteResult Result, List Data)> QueryListAsync(string sql, Dictionary? parameters = null) where T : new();
///
/// 执行分页查询并返回分页结果
///
/// 实体类型
(IDbExecuteResult Result, PaginationResponse Data) QueryPaged(string sql, PaginationRequest pagination, Dictionary? parameters = null) where T : new();
///
/// 异步执行分页查询并返回分页结果
///
Task<(IDbExecuteResult Result, PaginationResponse Data)> QueryPagedAsync(string sql, PaginationRequest pagination, Dictionary? parameters = null) where T : new();
}
}