using FreeSql.DatabaseModel;
using SafeObjectPool;
using System;
using System.Collections.Generic;
using System.Data;
using System.Data.Common;
using System.Text;
using System.Threading.Tasks;
namespace FreeSql {
public partial interface IAdo {
///
/// 主库连接池
///
ObjectPool MasterPool { get; }
///
/// 从库连接池
///
List> SlavePools { get; }
///
/// 监视数据库命令对象(执行前,调试)
///
Action AopCommandExecuting { get; set; }
///
/// 监视数据库命令对象(执行后,用于监视执行性能)
///
Action AopCommandExecuted { get; set; }
///
/// 数据库类型
///
DataType DataType { get; }
#region 事务
///
/// 开启事务(不支持异步),60秒未执行完将自动提交
///
/// 事务体 () => {}
void Transaction(Action handler);
///
/// 开启事务(不支持异步)
///
/// 事务体 () => {}
/// 超时,未执行完将自动提交
void Transaction(Action handler, TimeSpan timeout);
///
/// 当前线程的事务
///
DbTransaction TransactionCurrentThread { get; }
///
/// 事务完成前预删除缓存
///
///
void TransactionPreRemoveCache(params string[] keys);
#endregion
///
/// 查询,若使用读写分离,查询【从库】条件cmdText.StartsWith("SELECT "),否则查询【主库】
///
///
///
///
///
void ExecuteReader(Action readerHander, CommandType cmdType, string cmdText, params DbParameter[] cmdParms);
void ExecuteReader(DbTransaction transaction, Action readerHander, CommandType cmdType, string cmdText, params DbParameter[] cmdParms);
void ExecuteReader(DbConnection connection, Action readerHander, CommandType cmdType, string cmdText, params DbParameter[] cmdParms);
///
/// 查询,ExecuteReader(dr => {}, "select * from user where age > @age", new { age = 25 })
///
///
///
void ExecuteReader(Action readerHander, string cmdText, object parms = null);
void ExecuteReader(DbTransaction transaction, Action readerHander, string cmdText, object parms = null);
void ExecuteReader(DbConnection connection, Action readerHander, string cmdText, object parms = null);
///
/// 查询
///
///
///
object[][] ExecuteArray(CommandType cmdType, string cmdText, params DbParameter[] cmdParms);
object[][] ExecuteArray(DbTransaction transaction, CommandType cmdType, string cmdText, params DbParameter[] cmdParms);
object[][] ExecuteArray(DbConnection connection, CommandType cmdType, string cmdText, params DbParameter[] cmdParms);
///
/// 查询,ExecuteArray("select * from user where age > @age", new { age = 25 })
///
///
///
///
object[][] ExecuteArray(string cmdText, object parms = null);
object[][] ExecuteArray(DbTransaction transaction, string cmdText, object parms = null);
object[][] ExecuteArray(DbConnection connection, string cmdText, object parms = null);
///
/// 查询
///
///
///
DataTable ExecuteDataTable(CommandType cmdType, string cmdText, params DbParameter[] cmdParms);
DataTable ExecuteDataTable(DbTransaction transaction, CommandType cmdType, string cmdText, params DbParameter[] cmdParms);
DataTable ExecuteDataTable(DbConnection connection, CommandType cmdType, string cmdText, params DbParameter[] cmdParms);
///
/// 查询,ExecuteDataTable("select * from user where age > @age", new { age = 25 })
///
///
///
///
DataTable ExecuteDataTable(string cmdText, object parms = null);
DataTable ExecuteDataTable(DbTransaction transaction, string cmdText, object parms = null);
DataTable ExecuteDataTable(DbConnection connection, string cmdText, object parms = null);
///
/// 在【主库】执行
///
///
///
///
int ExecuteNonQuery(CommandType cmdType, string cmdText, params DbParameter[] cmdParms);
int ExecuteNonQuery(DbTransaction transaction, CommandType cmdType, string cmdText, params DbParameter[] cmdParms);
int ExecuteNonQuery(DbConnection connection, CommandType cmdType, string cmdText, params DbParameter[] cmdParms);
///
/// 在【主库】执行,ExecuteNonQuery("delete from user where age > @age", new { age = 25 })
///
///
///
///
int ExecuteNonQuery(string cmdText, object parms = null);
int ExecuteNonQuery(DbTransaction transaction, string cmdText, object parms = null);
int ExecuteNonQuery(DbConnection connection, string cmdText, object parms = null);
///
/// 在【主库】执行
///
///
///
///
object ExecuteScalar(CommandType cmdType, string cmdText, params DbParameter[] cmdParms);
object ExecuteScalar(DbTransaction transaction, CommandType cmdType, string cmdText, params DbParameter[] cmdParms);
object ExecuteScalar(DbConnection connection, CommandType cmdType, string cmdText, params DbParameter[] cmdParms);
///
/// 在【主库】执行,ExecuteScalar("select 1 from user where age > @age", new { age = 25 })
///
///
///
///
object ExecuteScalar(string cmdText, object parms = null);
object ExecuteScalar(DbTransaction transaction, string cmdText, object parms = null);
object ExecuteScalar(DbConnection connection, string cmdText, object parms = null);
///
/// 执行SQL返回对象集合,Query<User>("select * from user where age > @age", new SqlParameter { ParameterName = "age", Value = 25 })
///
///
///
///
///
///
List Query(CommandType cmdType, string cmdText, params DbParameter[] cmdParms);
List Query(DbTransaction transaction, CommandType cmdType, string cmdText, params DbParameter[] cmdParms);
List Query(DbConnection connection, CommandType cmdType, string cmdText, params DbParameter[] cmdParms);
///
/// 执行SQL返回对象集合,Query<User>("select * from user where age > @age", new { age = 25 })
///
///
///
///
///
List Query(string cmdText, object parms = null);
List Query(DbTransaction transaction, string cmdText, object parms = null);
List Query(DbConnection connection, string cmdText, object parms = null);
#region async
///
/// 查询,若使用读写分离,查询【从库】条件cmdText.StartsWith("SELECT "),否则查询【主库】
///
///
///
///
///
Task ExecuteReaderAsync(Func readerHander, CommandType cmdType, string cmdText, params DbParameter[] cmdParms);
Task ExecuteReaderAsync(DbTransaction transaction, Func readerHander, CommandType cmdType, string cmdText, params DbParameter[] cmdParms);
Task ExecuteReaderAsync(DbConnection connection, Func readerHander, CommandType cmdType, string cmdText, params DbParameter[] cmdParms);
///
/// 查询,ExecuteReaderAsync(dr => {}, "select * from user where age > @age", new { age = 25 })
///
///
///
Task ExecuteReaderAsync(Func readerHander, string cmdText, object parms = null);
Task ExecuteReaderAsync(DbTransaction transaction, Func readerHander, string cmdText, object parms = null);
Task ExecuteReaderAsync(DbConnection connection, Func readerHander, string cmdText, object parms = null);
///
/// 查询
///
///
///
Task