mirror of
https://github.com/nsnail/FreeSql.git
synced 2025-04-22 02:32:50 +08:00
- 增加 [Table(AsTable = xx)] 分表特性,完成分表更新数据功能;
This commit is contained in:
parent
f73c02d8d1
commit
d051a27d4e
@ -149,7 +149,7 @@ namespace base_entity
|
|||||||
BaseEntity.Initialization(fsql, () => _asyncUow.Value);
|
BaseEntity.Initialization(fsql, () => _asyncUow.Value);
|
||||||
#endregion
|
#endregion
|
||||||
|
|
||||||
var sqlatb = fsql.Insert(new[]
|
var testitems = new[]
|
||||||
{
|
{
|
||||||
new AsTableLog{ msg = "msg01", createtime = DateTime.Parse("2022-1-1 13:00:11") },
|
new AsTableLog{ msg = "msg01", createtime = DateTime.Parse("2022-1-1 13:00:11") },
|
||||||
new AsTableLog{ msg = "msg02", createtime = DateTime.Parse("2022-1-2 14:00:12") },
|
new AsTableLog{ msg = "msg02", createtime = DateTime.Parse("2022-1-2 14:00:12") },
|
||||||
@ -158,7 +158,8 @@ namespace base_entity
|
|||||||
new AsTableLog{ msg = "msg05", createtime = DateTime.Parse("2022-3-8 15:00:13") },
|
new AsTableLog{ msg = "msg05", createtime = DateTime.Parse("2022-3-8 15:00:13") },
|
||||||
new AsTableLog{ msg = "msg06", createtime = DateTime.Parse("2022-4-8 15:00:13") },
|
new AsTableLog{ msg = "msg06", createtime = DateTime.Parse("2022-4-8 15:00:13") },
|
||||||
new AsTableLog{ msg = "msg07", createtime = DateTime.Parse("2022-6-8 15:00:13") }
|
new AsTableLog{ msg = "msg07", createtime = DateTime.Parse("2022-6-8 15:00:13") }
|
||||||
}).NoneParameter();
|
};
|
||||||
|
var sqlatb = fsql.Insert(testitems).NoneParameter();
|
||||||
var sqlat = sqlatb.ToSql();
|
var sqlat = sqlatb.ToSql();
|
||||||
var sqlatr = sqlatb.ExecuteAffrows();
|
var sqlatr = sqlatb.ExecuteAffrows();
|
||||||
|
|
||||||
@ -166,6 +167,33 @@ namespace base_entity
|
|||||||
var sqlatca = sqlatc.ToSql();
|
var sqlatca = sqlatc.ToSql();
|
||||||
var sqlatcr = sqlatc.ExecuteAffrows();
|
var sqlatcr = sqlatc.ExecuteAffrows();
|
||||||
|
|
||||||
|
var sqlatd1 = fsql.Update<AsTableLog>().SetSource(testitems[0]);
|
||||||
|
var sqlatd101 = sqlatd1.ToSql();
|
||||||
|
var sqlatd102 = sqlatd1.ExecuteAffrows();
|
||||||
|
|
||||||
|
var sqlatd2 = fsql.Update<AsTableLog>().SetSource(testitems[5]);
|
||||||
|
var sqlatd201 = sqlatd2.ToSql();
|
||||||
|
var sqlatd202 = sqlatd2.ExecuteAffrows();
|
||||||
|
|
||||||
|
var sqlatd3 = fsql.Update<AsTableLog>().SetSource(testitems);
|
||||||
|
var sqlatd301 = sqlatd3.ToSql();
|
||||||
|
var sqlatd302 = sqlatd3.ExecuteAffrows();
|
||||||
|
|
||||||
|
var sqlatd4 = fsql.Update<AsTableLog>(Guid.NewGuid()).Set(a => a.msg == "newmsg");
|
||||||
|
var sqlatd401 = sqlatd4.ToSql();
|
||||||
|
var sqlatd402 = sqlatd4.ExecuteAffrows();
|
||||||
|
|
||||||
|
var sqlatd5 = fsql.Update<AsTableLog>(Guid.NewGuid()).Set(a => a.msg == "newmsg").Where(a => a.createtime.Between(DateTime.Parse("2022-3-1"), DateTime.Parse("2022-5-1")));
|
||||||
|
var sqlatd501 = sqlatd5.ToSql();
|
||||||
|
var sqlatd502 = sqlatd5.ExecuteAffrows();
|
||||||
|
|
||||||
|
var sqlatd6 = fsql.Update<AsTableLog>(Guid.NewGuid()).Set(a => a.msg == "newmsg").Where(a => a.createtime > DateTime.Parse("2022-3-1"));
|
||||||
|
var sqlatd601 = sqlatd6.ToSql();
|
||||||
|
var sqlatd602 = sqlatd6.ExecuteAffrows();
|
||||||
|
|
||||||
|
var sqlatd7 = fsql.Update<AsTableLog>(Guid.NewGuid()).Set(a => a.msg == "newmsg").Where(a => a.createtime < DateTime.Parse("2022-5-1"));
|
||||||
|
var sqlatd701 = sqlatd7.ToSql();
|
||||||
|
var sqlatd702 = sqlatd7.ExecuteAffrows();
|
||||||
|
|
||||||
fsql.Aop.AuditValue += new EventHandler<FreeSql.Aop.AuditValueEventArgs>((_, e) =>
|
fsql.Aop.AuditValue += new EventHandler<FreeSql.Aop.AuditValueEventArgs>((_, e) =>
|
||||||
{
|
{
|
||||||
|
@ -3254,177 +3254,6 @@
|
|||||||
<param name="parms"></param>
|
<param name="parms"></param>
|
||||||
<returns></returns>
|
<returns></returns>
|
||||||
</member>
|
</member>
|
||||||
<member name="M:FreeSql.IAdo.ExecuteConnectTestAsync(System.Int32,System.Threading.CancellationToken)">
|
|
||||||
<summary>
|
|
||||||
测试数据库是否连接正确,本方法执行如下命令:<para></para>
|
|
||||||
MySql/SqlServer/PostgreSQL/达梦/人大金仓/神通: SELECT 1<para></para>
|
|
||||||
Oracle: SELECT 1 FROM dual<para></para>
|
|
||||||
</summary>
|
|
||||||
<param name="commandTimeout">命令超时设置(秒)</param>
|
|
||||||
<param name="cancellationToken"></param>
|
|
||||||
<returns>true: 成功, false: 失败</returns>
|
|
||||||
</member>
|
|
||||||
<member name="M:FreeSql.IAdo.ExecuteReaderAsync(System.Func{FreeSql.Internal.Model.FetchCallbackArgs{System.Data.Common.DbDataReader},System.Threading.Tasks.Task},System.Data.CommandType,System.String,System.Data.Common.DbParameter[],System.Threading.CancellationToken)">
|
|
||||||
<summary>
|
|
||||||
查询,若使用读写分离,查询【从库】条件cmdText.StartsWith("SELECT "),否则查询【主库】
|
|
||||||
</summary>
|
|
||||||
<param name="readerHander"></param>
|
|
||||||
<param name="cmdType"></param>
|
|
||||||
<param name="cmdText"></param>
|
|
||||||
<param name="cmdParms"></param>
|
|
||||||
<param name="cancellationToken"></param>
|
|
||||||
</member>
|
|
||||||
<member name="M:FreeSql.IAdo.ExecuteReaderAsync(System.Func{FreeSql.Internal.Model.FetchCallbackArgs{System.Data.Common.DbDataReader},System.Threading.Tasks.Task},System.String,System.Object,System.Threading.CancellationToken)">
|
|
||||||
<summary>
|
|
||||||
查询,ExecuteReaderAsync(dr => {}, "select * from user where age > @age", new { age = 25 })<para></para>
|
|
||||||
提示:parms 参数还可以传 Dictionary<string, object>
|
|
||||||
</summary>
|
|
||||||
<param name="readerHander"></param>
|
|
||||||
<param name="cmdText"></param>
|
|
||||||
<param name="parms"></param>
|
|
||||||
<param name="cancellationToken"></param>
|
|
||||||
</member>
|
|
||||||
<member name="M:FreeSql.IAdo.ExecuteArrayAsync(System.Data.CommandType,System.String,System.Data.Common.DbParameter[],System.Threading.CancellationToken)">
|
|
||||||
<summary>
|
|
||||||
查询
|
|
||||||
</summary>
|
|
||||||
<param name="cmdType"></param>
|
|
||||||
<param name="cmdText"></param>
|
|
||||||
<param name="cmdParms"></param>
|
|
||||||
<param name="cancellationToken"></param>
|
|
||||||
</member>
|
|
||||||
<member name="M:FreeSql.IAdo.ExecuteArrayAsync(System.String,System.Object,System.Threading.CancellationToken)">
|
|
||||||
<summary>
|
|
||||||
查询,ExecuteArrayAsync("select * from user where age > @age", new { age = 25 })<para></para>
|
|
||||||
提示:parms 参数还可以传 Dictionary<string, object>
|
|
||||||
</summary>
|
|
||||||
<param name="cmdText"></param>
|
|
||||||
<param name="parms"></param>
|
|
||||||
<param name="cancellationToken"></param>
|
|
||||||
<returns></returns>
|
|
||||||
</member>
|
|
||||||
<member name="M:FreeSql.IAdo.ExecuteDataSetAsync(System.Data.CommandType,System.String,System.Data.Common.DbParameter[],System.Threading.CancellationToken)">
|
|
||||||
<summary>
|
|
||||||
查询
|
|
||||||
</summary>
|
|
||||||
<param name="cmdType"></param>
|
|
||||||
<param name="cmdText"></param>
|
|
||||||
<param name="cmdParms"></param>
|
|
||||||
<param name="cancellationToken"></param>
|
|
||||||
</member>
|
|
||||||
<member name="M:FreeSql.IAdo.ExecuteDataSetAsync(System.String,System.Object,System.Threading.CancellationToken)">
|
|
||||||
<summary>
|
|
||||||
查询,ExecuteDataSetAsync("select * from user where age > @age; select 2", new { age = 25 })<para></para>
|
|
||||||
提示:parms 参数还可以传 Dictionary<string, object>
|
|
||||||
</summary>
|
|
||||||
<param name="cmdText"></param>
|
|
||||||
<param name="parms"></param>
|
|
||||||
<param name="cancellationToken"></param>
|
|
||||||
<returns></returns>
|
|
||||||
</member>
|
|
||||||
<member name="M:FreeSql.IAdo.ExecuteDataTableAsync(System.Data.CommandType,System.String,System.Data.Common.DbParameter[],System.Threading.CancellationToken)">
|
|
||||||
<summary>
|
|
||||||
查询
|
|
||||||
</summary>
|
|
||||||
<param name="cmdType"></param>
|
|
||||||
<param name="cmdText"></param>
|
|
||||||
<param name="cmdParms"></param>
|
|
||||||
<param name="cancellationToken"></param>
|
|
||||||
</member>
|
|
||||||
<member name="M:FreeSql.IAdo.ExecuteDataTableAsync(System.String,System.Object,System.Threading.CancellationToken)">
|
|
||||||
<summary>
|
|
||||||
查询,ExecuteDataTableAsync("select * from user where age > @age", new { age = 25 })<para></para>
|
|
||||||
提示:parms 参数还可以传 Dictionary<string, object>
|
|
||||||
</summary>
|
|
||||||
<param name="cmdText"></param>
|
|
||||||
<param name="parms"></param>
|
|
||||||
<param name="cancellationToken"></param>
|
|
||||||
<returns></returns>
|
|
||||||
</member>
|
|
||||||
<member name="M:FreeSql.IAdo.ExecuteNonQueryAsync(System.Data.CommandType,System.String,System.Data.Common.DbParameter[],System.Threading.CancellationToken)">
|
|
||||||
<summary>
|
|
||||||
在【主库】执行
|
|
||||||
</summary>
|
|
||||||
<param name="cmdType"></param>
|
|
||||||
<param name="cmdText"></param>
|
|
||||||
<param name="cmdParms"></param>
|
|
||||||
<param name="cancellationToken"></param>
|
|
||||||
</member>
|
|
||||||
<member name="M:FreeSql.IAdo.ExecuteNonQueryAsync(System.String,System.Object,System.Threading.CancellationToken)">
|
|
||||||
<summary>
|
|
||||||
在【主库】执行,ExecuteNonQueryAsync("delete from user where age > @age", new { age = 25 })<para></para>
|
|
||||||
提示:parms 参数还可以传 Dictionary<string, object>
|
|
||||||
</summary>
|
|
||||||
<param name="cmdText"></param>
|
|
||||||
<param name="parms"></param>
|
|
||||||
<param name="cancellationToken"></param>
|
|
||||||
<returns></returns>
|
|
||||||
</member>
|
|
||||||
<member name="M:FreeSql.IAdo.ExecuteScalarAsync(System.Data.CommandType,System.String,System.Data.Common.DbParameter[],System.Threading.CancellationToken)">
|
|
||||||
<summary>
|
|
||||||
在【主库】执行
|
|
||||||
</summary>
|
|
||||||
<param name="cmdType"></param>
|
|
||||||
<param name="cmdText"></param>
|
|
||||||
<param name="cmdParms"></param>
|
|
||||||
<param name="cancellationToken"></param>
|
|
||||||
</member>
|
|
||||||
<member name="M:FreeSql.IAdo.ExecuteScalarAsync(System.String,System.Object,System.Threading.CancellationToken)">
|
|
||||||
<summary>
|
|
||||||
在【主库】执行,ExecuteScalarAsync("select 1 from user where age > @age", new { age = 25 })<para></para>
|
|
||||||
提示:parms 参数还可以传 Dictionary<string, object>
|
|
||||||
</summary>
|
|
||||||
<param name="cmdText"></param>
|
|
||||||
<param name="parms"></param>
|
|
||||||
<param name="cancellationToken"></param>
|
|
||||||
<returns></returns>
|
|
||||||
</member>
|
|
||||||
<member name="M:FreeSql.IAdo.QueryAsync``1(System.Data.CommandType,System.String,System.Data.Common.DbParameter[],System.Threading.CancellationToken)">
|
|
||||||
<summary>
|
|
||||||
执行SQL返回对象集合,QueryAsync<User>("select * from user where age > @age", new SqlParameter { ParameterName = "age", Value = 25 })
|
|
||||||
</summary>
|
|
||||||
<typeparam name="T"></typeparam>
|
|
||||||
<param name="cmdType"></param>
|
|
||||||
<param name="cmdText"></param>
|
|
||||||
<param name="cmdParms"></param>
|
|
||||||
<param name="cancellationToken"></param>
|
|
||||||
<returns></returns>
|
|
||||||
</member>
|
|
||||||
<member name="M:FreeSql.IAdo.QueryAsync``1(System.String,System.Object,System.Threading.CancellationToken)">
|
|
||||||
<summary>
|
|
||||||
执行SQL返回对象集合,QueryAsync<User>("select * from user where age > @age", new { age = 25 })<para></para>
|
|
||||||
提示:parms 参数还可以传 Dictionary<string, object>
|
|
||||||
</summary>
|
|
||||||
<typeparam name="T"></typeparam>
|
|
||||||
<param name="cmdText"></param>
|
|
||||||
<param name="parms"></param>
|
|
||||||
<param name="cancellationToken"></param>
|
|
||||||
<returns></returns>
|
|
||||||
</member>
|
|
||||||
<member name="M:FreeSql.IAdo.QueryAsync``2(System.Data.CommandType,System.String,System.Data.Common.DbParameter[],System.Threading.CancellationToken)">
|
|
||||||
<summary>
|
|
||||||
执行SQL返回对象集合,Query<User>("select * from user where age > @age; select * from address", new SqlParameter { ParameterName = "age", Value = 25 })
|
|
||||||
</summary>
|
|
||||||
<typeparam name="T1"></typeparam>
|
|
||||||
<typeparam name="T2"></typeparam>
|
|
||||||
<param name="cmdType"></param>
|
|
||||||
<param name="cmdText"></param>
|
|
||||||
<param name="cmdParms"></param>
|
|
||||||
<param name="cancellationToken"></param>
|
|
||||||
<returns></returns>
|
|
||||||
</member>
|
|
||||||
<member name="M:FreeSql.IAdo.QueryAsync``2(System.String,System.Object,System.Threading.CancellationToken)">
|
|
||||||
<summary>
|
|
||||||
执行SQL返回对象集合,Query<User, Address>("select * from user where age > @age; select * from address", new { age = 25 })<para></para>
|
|
||||||
提示:parms 参数还可以传 Dictionary<string, object>
|
|
||||||
</summary>
|
|
||||||
<typeparam name="T1"></typeparam>
|
|
||||||
<typeparam name="T2"></typeparam>
|
|
||||||
<param name="cmdText"></param>
|
|
||||||
<param name="parms"></param>
|
|
||||||
<param name="cancellationToken"></param>
|
|
||||||
<returns></returns>
|
|
||||||
</member>
|
|
||||||
<member name="E:FreeSql.IAop.ParseExpression">
|
<member name="E:FreeSql.IAop.ParseExpression">
|
||||||
<summary>
|
<summary>
|
||||||
可自定义解析表达式
|
可自定义解析表达式
|
||||||
@ -4319,12 +4148,6 @@
|
|||||||
<param name="timeout">超时</param>
|
<param name="timeout">超时</param>
|
||||||
<returns></returns>
|
<returns></returns>
|
||||||
</member>
|
</member>
|
||||||
<member name="M:FreeSql.Internal.ObjectPool.IObjectPool`1.GetAsync">
|
|
||||||
<summary>
|
|
||||||
获取资源
|
|
||||||
</summary>
|
|
||||||
<returns></returns>
|
|
||||||
</member>
|
|
||||||
<member name="M:FreeSql.Internal.ObjectPool.IObjectPool`1.Return(FreeSql.Internal.ObjectPool.Object{`0},System.Boolean)">
|
<member name="M:FreeSql.Internal.ObjectPool.IObjectPool`1.Return(FreeSql.Internal.ObjectPool.Object{`0},System.Boolean)">
|
||||||
<summary>
|
<summary>
|
||||||
使用完毕后,归还资源
|
使用完毕后,归还资源
|
||||||
@ -4400,12 +4223,6 @@
|
|||||||
</summary>
|
</summary>
|
||||||
<param name="obj">资源对象</param>
|
<param name="obj">资源对象</param>
|
||||||
</member>
|
</member>
|
||||||
<member name="M:FreeSql.Internal.ObjectPool.IPolicy`1.OnGetAsync(FreeSql.Internal.ObjectPool.Object{`0})">
|
|
||||||
<summary>
|
|
||||||
从对象池获取对象成功的时候触发,通过该方法统计或初始化对象
|
|
||||||
</summary>
|
|
||||||
<param name="obj">资源对象</param>
|
|
||||||
</member>
|
|
||||||
<member name="M:FreeSql.Internal.ObjectPool.IPolicy`1.OnReturn(FreeSql.Internal.ObjectPool.Object{`0})">
|
<member name="M:FreeSql.Internal.ObjectPool.IPolicy`1.OnReturn(FreeSql.Internal.ObjectPool.Object{`0})">
|
||||||
<summary>
|
<summary>
|
||||||
归还对象给对象池的时候触发
|
归还对象给对象池的时候触发
|
||||||
@ -5087,3 +4904,222 @@
|
|||||||
</member>
|
</member>
|
||||||
</members>
|
</members>
|
||||||
</doc>
|
</doc>
|
||||||
|
ystem.Boolean}})">
|
||||||
|
<summary>
|
||||||
|
使用 and 拼接两个 lambda 表达式
|
||||||
|
</summary>
|
||||||
|
<param name="exp1"></param>
|
||||||
|
<param name="condition">true 时生效</param>
|
||||||
|
<param name="exp2"></param>
|
||||||
|
<returns></returns>
|
||||||
|
</member>
|
||||||
|
<member name="M:System.Linq.Expressions.LambadaExpressionExtensions.Or``4(System.Linq.Expressions.Expression{System.Func{``0,``1,``2,``3,System.Boolean}},System.Linq.Expressions.Expression{System.Func{``0,``1,``2,``3,System.Boolean}})">
|
||||||
|
<summary>
|
||||||
|
使用 or 拼接两个 lambda 表达式
|
||||||
|
</summary>
|
||||||
|
<returns></returns>
|
||||||
|
</member>
|
||||||
|
<member name="M:System.Linq.Expressions.LambadaExpressionExtensions.Or``4(System.Linq.Expressions.Expression{System.Func{``0,``1,``2,``3,System.Boolean}},System.Boolean,System.Linq.Expressions.Expression{System.Func{``0,``1,``2,``3,System.Boolean}})">
|
||||||
|
<summary>
|
||||||
|
使用 or 拼接两个 lambda 表达式
|
||||||
|
</summary>
|
||||||
|
<param name="exp1"></param>
|
||||||
|
<param name="condition">true 时生效</param>
|
||||||
|
<param name="exp2"></param>
|
||||||
|
<returns></returns>
|
||||||
|
</member>
|
||||||
|
<member name="M:System.Linq.Expressions.LambadaExpressionExtensions.Not``4(System.Linq.Expressions.Expression{System.Func{``0,``1,``2,``3,System.Boolean}},System.Boolean)">
|
||||||
|
<summary>
|
||||||
|
将 lambda 表达式取反
|
||||||
|
</summary>
|
||||||
|
<param name="exp"></param>
|
||||||
|
<param name="condition">true 时生效</param>
|
||||||
|
<returns></returns>
|
||||||
|
</member>
|
||||||
|
<member name="M:System.Linq.Expressions.LambadaExpressionExtensions.And``5(System.Linq.Expressions.Expression{System.Func{``0,``1,``2,``3,``4,System.Boolean}},System.Linq.Expressions.Expression{System.Func{``0,``1,``2,``3,``4,System.Boolean}})">
|
||||||
|
<summary>
|
||||||
|
使用 and 拼接两个 lambda 表达式
|
||||||
|
</summary>
|
||||||
|
<returns></returns>
|
||||||
|
</member>
|
||||||
|
<member name="M:System.Linq.Expressions.LambadaExpressionExtensions.And``5(System.Linq.Expressions.Expression{System.Func{``0,``1,``2,``3,``4,System.Boolean}},System.Boolean,System.Linq.Expressions.Expression{System.Func{``0,``1,``2,``3,``4,System.Boolean}})">
|
||||||
|
<summary>
|
||||||
|
使用 and 拼接两个 lambda 表达式
|
||||||
|
</summary>
|
||||||
|
<param name="exp1"></param>
|
||||||
|
<param name="condition">true 时生效</param>
|
||||||
|
<param name="exp2"></param>
|
||||||
|
<returns></returns>
|
||||||
|
</member>
|
||||||
|
<member name="M:System.Linq.Expressions.LambadaExpressionExtensions.Or``5(System.Linq.Expressions.Expression{System.Func{``0,``1,``2,``3,``4,System.Boolean}},System.Linq.Expressions.Expression{System.Func{``0,``1,``2,``3,``4,System.Boolean}})">
|
||||||
|
<summary>
|
||||||
|
使用 or 拼接两个 lambda 表达式
|
||||||
|
</summary>
|
||||||
|
<returns></returns>
|
||||||
|
</member>
|
||||||
|
<member name="M:System.Linq.Expressions.LambadaExpressionExtensions.Or``5(System.Linq.Expressions.Expression{System.Func{``0,``1,``2,``3,``4,System.Boolean}},System.Boolean,System.Linq.Expressions.Expression{System.Func{``0,``1,``2,``3,``4,System.Boolean}})">
|
||||||
|
<summary>
|
||||||
|
使用 or 拼接两个 lambda 表达式
|
||||||
|
</summary>
|
||||||
|
<param name="exp1"></param>
|
||||||
|
<param name="condition">true 时生效</param>
|
||||||
|
<param name="exp2"></param>
|
||||||
|
<returns></returns>
|
||||||
|
</member>
|
||||||
|
<member name="M:System.Linq.Expressions.LambadaExpressionExtensions.Not``5(System.Linq.Expressions.Expression{System.Func{``0,``1,``2,``3,``4,System.Boolean}},System.Boolean)">
|
||||||
|
<summary>
|
||||||
|
将 lambda 表达式取反
|
||||||
|
</summary>
|
||||||
|
<param name="exp"></param>
|
||||||
|
<param name="condition">true 时生效</param>
|
||||||
|
<returns></returns>
|
||||||
|
</member>
|
||||||
|
<member name="M:FreeUtil.NewMongodbId">
|
||||||
|
<summary>
|
||||||
|
生成类似Mongodb的ObjectId有序、不重复Guid
|
||||||
|
</summary>
|
||||||
|
<returns></returns>
|
||||||
|
</member>
|
||||||
|
<member name="M:IFreeSql.Insert``1">
|
||||||
|
<summary>
|
||||||
|
插入数据
|
||||||
|
</summary>
|
||||||
|
<typeparam name="T1"></typeparam>
|
||||||
|
<returns></returns>
|
||||||
|
</member>
|
||||||
|
<member name="M:IFreeSql.Insert``1(``0)">
|
||||||
|
<summary>
|
||||||
|
插入数据,传入实体
|
||||||
|
</summary>
|
||||||
|
<typeparam name="T1"></typeparam>
|
||||||
|
<param name="source"></param>
|
||||||
|
<returns></returns>
|
||||||
|
</member>
|
||||||
|
<member name="M:IFreeSql.Insert``1(``0[])">
|
||||||
|
<summary>
|
||||||
|
插入数据,传入实体数组
|
||||||
|
</summary>
|
||||||
|
<typeparam name="T1"></typeparam>
|
||||||
|
<param name="source"></param>
|
||||||
|
<returns></returns>
|
||||||
|
</member>
|
||||||
|
<member name="M:IFreeSql.Insert``1(System.Collections.Generic.List{``0})">
|
||||||
|
<summary>
|
||||||
|
插入数据,传入实体集合
|
||||||
|
</summary>
|
||||||
|
<typeparam name="T1"></typeparam>
|
||||||
|
<param name="source"></param>
|
||||||
|
<returns></returns>
|
||||||
|
</member>
|
||||||
|
<member name="M:IFreeSql.Insert``1(System.Collections.Generic.IEnumerable{``0})">
|
||||||
|
<summary>
|
||||||
|
插入数据,传入实体集合
|
||||||
|
</summary>
|
||||||
|
<typeparam name="T1"></typeparam>
|
||||||
|
<param name="source"></param>
|
||||||
|
<returns></returns>
|
||||||
|
</member>
|
||||||
|
<member name="M:IFreeSql.InsertOrUpdate``1">
|
||||||
|
<summary>
|
||||||
|
插入或更新数据,此功能依赖数据库特性(低版本可能不支持),参考如下:<para></para>
|
||||||
|
MySql 5.6+: on duplicate key update<para></para>
|
||||||
|
PostgreSQL 9.4+: on conflict do update<para></para>
|
||||||
|
SqlServer 2008+: merge into<para></para>
|
||||||
|
Oracle 11+: merge into<para></para>
|
||||||
|
Sqlite: replace into<para></para>
|
||||||
|
达梦: merge into<para></para>
|
||||||
|
人大金仓:on conflict do update<para></para>
|
||||||
|
神通:merge into<para></para>
|
||||||
|
MsAccess:不支持<para></para>
|
||||||
|
注意区别:FreeSql.Repository 仓储也有 InsertOrUpdate 方法(不依赖数据库特性)
|
||||||
|
</summary>
|
||||||
|
<typeparam name="T1"></typeparam>
|
||||||
|
<returns></returns>
|
||||||
|
</member>
|
||||||
|
<member name="M:IFreeSql.Update``1">
|
||||||
|
<summary>
|
||||||
|
修改数据
|
||||||
|
</summary>
|
||||||
|
<typeparam name="T1"></typeparam>
|
||||||
|
<returns></returns>
|
||||||
|
</member>
|
||||||
|
<member name="M:IFreeSql.Update``1(System.Object)">
|
||||||
|
<summary>
|
||||||
|
修改数据,传入动态条件,如:主键值 | new[]{主键值1,主键值2} | TEntity1 | new[]{TEntity1,TEntity2} | new{id=1}
|
||||||
|
</summary>
|
||||||
|
<typeparam name="T1"></typeparam>
|
||||||
|
<param name="dywhere">主键值、主键值集合、实体、实体集合、匿名对象、匿名对象集合</param>
|
||||||
|
<returns></returns>
|
||||||
|
</member>
|
||||||
|
<member name="M:IFreeSql.Select``1">
|
||||||
|
<summary>
|
||||||
|
查询数据
|
||||||
|
</summary>
|
||||||
|
<typeparam name="T1"></typeparam>
|
||||||
|
<returns></returns>
|
||||||
|
</member>
|
||||||
|
<member name="M:IFreeSql.Select``1(System.Object)">
|
||||||
|
<summary>
|
||||||
|
查询数据,传入动态条件,如:主键值 | new[]{主键值1,主键值2} | TEntity1 | new[]{TEntity1,TEntity2} | new{id=1}
|
||||||
|
</summary>
|
||||||
|
<typeparam name="T1"></typeparam>
|
||||||
|
<param name="dywhere">主键值、主键值集合、实体、实体集合、匿名对象、匿名对象集合</param>
|
||||||
|
<returns></returns>
|
||||||
|
</member>
|
||||||
|
<member name="M:IFreeSql.Delete``1">
|
||||||
|
<summary>
|
||||||
|
删除数据
|
||||||
|
</summary>
|
||||||
|
<typeparam name="T1"></typeparam>
|
||||||
|
<returns></returns>
|
||||||
|
</member>
|
||||||
|
<member name="M:IFreeSql.Delete``1(System.Object)">
|
||||||
|
<summary>
|
||||||
|
删除数据,传入动态条件,如:主键值 | new[]{主键值1,主键值2} | TEntity1 | new[]{TEntity1,TEntity2} | new{id=1}
|
||||||
|
</summary>
|
||||||
|
<typeparam name="T1"></typeparam>
|
||||||
|
<param name="dywhere">主键值、主键值集合、实体、实体集合、匿名对象、匿名对象集合</param>
|
||||||
|
<returns></returns>
|
||||||
|
</member>
|
||||||
|
<member name="M:IFreeSql.Transaction(System.Action)">
|
||||||
|
<summary>
|
||||||
|
开启事务(不支持异步)<para></para>
|
||||||
|
v1.5.0 关闭了线程事务超时自动提交的机制
|
||||||
|
</summary>
|
||||||
|
<param name="handler">事务体 () => {}</param>
|
||||||
|
</member>
|
||||||
|
<member name="M:IFreeSql.Transaction(System.Data.IsolationLevel,System.Action)">
|
||||||
|
<summary>
|
||||||
|
开启事务(不支持异步)<para></para>
|
||||||
|
v1.5.0 关闭了线程事务超时自动提交的机制
|
||||||
|
</summary>
|
||||||
|
<param name="isolationLevel"></param>
|
||||||
|
<param name="handler">事务体 () => {}</param>
|
||||||
|
</member>
|
||||||
|
<member name="P:IFreeSql.Ado">
|
||||||
|
<summary>
|
||||||
|
数据库访问对象
|
||||||
|
</summary>
|
||||||
|
</member>
|
||||||
|
<member name="P:IFreeSql.Aop">
|
||||||
|
<summary>
|
||||||
|
所有拦截方法都在这里
|
||||||
|
</summary>
|
||||||
|
</member>
|
||||||
|
<member name="P:IFreeSql.CodeFirst">
|
||||||
|
<summary>
|
||||||
|
CodeFirst 模式开发相关方法
|
||||||
|
</summary>
|
||||||
|
</member>
|
||||||
|
<member name="P:IFreeSql.DbFirst">
|
||||||
|
<summary>
|
||||||
|
DbFirst 模式开发相关方法
|
||||||
|
</summary>
|
||||||
|
</member>
|
||||||
|
<member name="P:IFreeSql.GlobalFilter">
|
||||||
|
<summary>
|
||||||
|
全局过滤设置,可默认附加为 Select/Update/Delete 条件
|
||||||
|
</summary>
|
||||||
|
</member>
|
||||||
|
</members>
|
||||||
|
</doc>
|
||||||
|
@ -206,9 +206,10 @@ namespace FreeSql.Internal.CommonProvider
|
|||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
|
||||||
sb.Insert(0, _commonUtils.QuoteSqlName(TableRuleInvoke())).Insert(0, "DELETE FROM ");
|
sb.Append("DELETE FROM ").Append(_commonUtils.QuoteSqlName(TableRuleInvoke())).Append(newwhere);
|
||||||
_interceptSql?.Invoke(sb);
|
_interceptSql?.Invoke(sb);
|
||||||
fetch(sb);
|
fetch(sb);
|
||||||
|
sb.Clear();
|
||||||
}
|
}
|
||||||
#if net40
|
#if net40
|
||||||
#else
|
#else
|
||||||
@ -241,6 +242,7 @@ namespace FreeSql.Internal.CommonProvider
|
|||||||
sb.Insert(0, _commonUtils.QuoteSqlName(TableRuleInvoke())).Insert(0, "DELETE FROM ");
|
sb.Insert(0, _commonUtils.QuoteSqlName(TableRuleInvoke())).Insert(0, "DELETE FROM ");
|
||||||
_interceptSql?.Invoke(sb);
|
_interceptSql?.Invoke(sb);
|
||||||
await fetchAsync(sb);
|
await fetchAsync(sb);
|
||||||
|
sb.Clear();
|
||||||
}
|
}
|
||||||
#endif
|
#endif
|
||||||
}
|
}
|
||||||
|
@ -540,7 +540,18 @@ namespace FreeSql.Internal.CommonProvider
|
|||||||
{
|
{
|
||||||
var tbname = _table?.DbName ?? "";
|
var tbname = _table?.DbName ?? "";
|
||||||
if (_tableRule == null && _table.AsTableImpl == null) return tbname;
|
if (_tableRule == null && _table.AsTableImpl == null) return tbname;
|
||||||
var newname = _table.AsTableImpl?.GetTableNameByColumnValue(_source.Any() ? _table.AsTableColumn.GetValue(_source.FirstOrDefault()) : DateTime.Now) ?? _tableRule(tbname);
|
string newname = null;
|
||||||
|
if (_table.AsTableImpl != null)
|
||||||
|
{
|
||||||
|
if (_source.Any())
|
||||||
|
newname = _table.AsTableImpl.GetTableNameByColumnValue(_table.AsTableColumn.GetValue(_source.FirstOrDefault()));
|
||||||
|
else if (_tableRule == null)
|
||||||
|
newname = _table.AsTableImpl.GetTableNameByColumnValue(DateTime.Now);
|
||||||
|
else
|
||||||
|
newname = _tableRule(_table.DbName);
|
||||||
|
}
|
||||||
|
else
|
||||||
|
newname = _tableRule(_table.DbName);
|
||||||
if (newname == tbname) return tbname;
|
if (newname == tbname) return tbname;
|
||||||
if (string.IsNullOrEmpty(newname)) return tbname;
|
if (string.IsNullOrEmpty(newname)) return tbname;
|
||||||
if (_orm.CodeFirst.IsSyncStructureToLower) newname = newname.ToLower();
|
if (_orm.CodeFirst.IsSyncStructureToLower) newname = newname.ToLower();
|
||||||
|
@ -12,13 +12,11 @@ using System.Threading.Tasks;
|
|||||||
|
|
||||||
namespace FreeSql.Internal.CommonProvider
|
namespace FreeSql.Internal.CommonProvider
|
||||||
{
|
{
|
||||||
|
public abstract partial class UpdateProvider
|
||||||
public abstract partial class UpdateProvider<T1> : IUpdate<T1>
|
|
||||||
{
|
{
|
||||||
public IFreeSql _orm;
|
public IFreeSql _orm;
|
||||||
public CommonUtils _commonUtils;
|
public CommonUtils _commonUtils;
|
||||||
public CommonExpression _commonExpression;
|
public CommonExpression _commonExpression;
|
||||||
public List<T1> _source = new List<T1>();
|
|
||||||
public Dictionary<string, bool> _ignore = new Dictionary<string, bool>(StringComparer.CurrentCultureIgnoreCase);
|
public Dictionary<string, bool> _ignore = new Dictionary<string, bool>(StringComparer.CurrentCultureIgnoreCase);
|
||||||
public Dictionary<string, bool> _auditValueChangedDict = new Dictionary<string, bool>(StringComparer.CurrentCultureIgnoreCase);
|
public Dictionary<string, bool> _auditValueChangedDict = new Dictionary<string, bool>(StringComparer.CurrentCultureIgnoreCase);
|
||||||
public TableInfo _table;
|
public TableInfo _table;
|
||||||
@ -33,12 +31,18 @@ namespace FreeSql.Internal.CommonProvider
|
|||||||
public bool _noneParameter;
|
public bool _noneParameter;
|
||||||
public int _batchRowsLimit, _batchParameterLimit;
|
public int _batchRowsLimit, _batchParameterLimit;
|
||||||
public bool _batchAutoTransaction = true;
|
public bool _batchAutoTransaction = true;
|
||||||
public Action<BatchProgressStatus<T1>> _batchProgress;
|
|
||||||
public DbTransaction _transaction;
|
public DbTransaction _transaction;
|
||||||
public DbConnection _connection;
|
public DbConnection _connection;
|
||||||
public int _commandTimeout = 0;
|
public int _commandTimeout = 0;
|
||||||
public Action<StringBuilder> _interceptSql;
|
public Action<StringBuilder> _interceptSql;
|
||||||
public byte[] _updateVersionValue;
|
public byte[] _updateVersionValue;
|
||||||
|
}
|
||||||
|
|
||||||
|
public abstract partial class UpdateProvider<T1> : UpdateProvider, IUpdate<T1>
|
||||||
|
{
|
||||||
|
public List<T1> _source = new List<T1>();
|
||||||
|
public List<T1> _sourceOld;
|
||||||
|
public Action<BatchProgressStatus<T1>> _batchProgress;
|
||||||
|
|
||||||
public UpdateProvider(IFreeSql orm, CommonUtils commonUtils, CommonExpression commonExpression, object dywhere)
|
public UpdateProvider(IFreeSql orm, CommonUtils commonUtils, CommonExpression commonExpression, object dywhere)
|
||||||
{
|
{
|
||||||
@ -52,6 +56,7 @@ namespace FreeSql.Internal.CommonProvider
|
|||||||
if (_orm.CodeFirst.IsAutoSyncStructure && typeof(T1) != typeof(object)) _orm.CodeFirst.SyncStructure<T1>();
|
if (_orm.CodeFirst.IsAutoSyncStructure && typeof(T1) != typeof(object)) _orm.CodeFirst.SyncStructure<T1>();
|
||||||
IgnoreCanUpdate();
|
IgnoreCanUpdate();
|
||||||
_whereGlobalFilter = _orm.GlobalFilter.GetFilters();
|
_whereGlobalFilter = _orm.GlobalFilter.GetFilters();
|
||||||
|
_sourceOld = _source;
|
||||||
}
|
}
|
||||||
|
|
||||||
/// <summary>
|
/// <summary>
|
||||||
@ -69,6 +74,7 @@ namespace FreeSql.Internal.CommonProvider
|
|||||||
_batchRowsLimit = _batchParameterLimit = 0;
|
_batchRowsLimit = _batchParameterLimit = 0;
|
||||||
_batchAutoTransaction = true;
|
_batchAutoTransaction = true;
|
||||||
_source.Clear();
|
_source.Clear();
|
||||||
|
_sourceOld = _source;
|
||||||
_ignore.Clear();
|
_ignore.Clear();
|
||||||
_auditValueChangedDict.Clear();
|
_auditValueChangedDict.Clear();
|
||||||
_where.Clear();
|
_where.Clear();
|
||||||
@ -138,7 +144,7 @@ namespace FreeSql.Internal.CommonProvider
|
|||||||
}
|
}
|
||||||
|
|
||||||
#region 参数化数据限制,或values数量限制
|
#region 参数化数据限制,或values数量限制
|
||||||
protected internal List<T1>[] SplitSource(int valuesLimit, int parameterLimit)
|
protected internal List<T1>[] SplitSource(int valuesLimit, int parameterLimit, bool isAsTableSplited = false)
|
||||||
{
|
{
|
||||||
valuesLimit = valuesLimit - 1;
|
valuesLimit = valuesLimit - 1;
|
||||||
parameterLimit = parameterLimit - 1;
|
parameterLimit = parameterLimit - 1;
|
||||||
@ -147,6 +153,28 @@ namespace FreeSql.Internal.CommonProvider
|
|||||||
if (_source == null || _source.Any() == false) return new List<T1>[0];
|
if (_source == null || _source.Any() == false) return new List<T1>[0];
|
||||||
if (_source.Count == 1) return new[] { _source };
|
if (_source.Count == 1) return new[] { _source };
|
||||||
|
|
||||||
|
if (_table.AsTableImpl != null && isAsTableSplited == false)
|
||||||
|
{
|
||||||
|
var atarr = _source.Select(a => new
|
||||||
|
{
|
||||||
|
item = a,
|
||||||
|
splitKey = _table.AsTableImpl.GetTableNameByColumnValue(_table.AsTableColumn.GetValue(a), true)
|
||||||
|
}).GroupBy(a => a.splitKey, a => a.item).ToArray();
|
||||||
|
if (atarr.Length > 1)
|
||||||
|
{
|
||||||
|
var oldSource = _source;
|
||||||
|
var arrret = new List<List<T1>>();
|
||||||
|
foreach (var item in atarr)
|
||||||
|
{
|
||||||
|
_source = item.ToList();
|
||||||
|
var itemret = SplitSource(valuesLimit + 1, parameterLimit + 1, true);
|
||||||
|
arrret.AddRange(itemret);
|
||||||
|
}
|
||||||
|
_source = oldSource;
|
||||||
|
return arrret.ToArray();
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
var takeMax = valuesLimit;
|
var takeMax = valuesLimit;
|
||||||
if (_noneParameter == false)
|
if (_noneParameter == false)
|
||||||
{
|
{
|
||||||
@ -314,28 +342,33 @@ namespace FreeSql.Internal.CommonProvider
|
|||||||
|
|
||||||
protected int RawExecuteAffrows()
|
protected int RawExecuteAffrows()
|
||||||
{
|
{
|
||||||
var sql = this.ToSql();
|
|
||||||
if (string.IsNullOrEmpty(sql)) return 0;
|
|
||||||
var dbParms = _params.Concat(_paramsSource).ToArray();
|
|
||||||
var before = new Aop.CurdBeforeEventArgs(_table.Type, _table, Aop.CurdType.Update, sql, dbParms);
|
|
||||||
_orm.Aop.CurdBeforeHandler?.Invoke(this, before);
|
|
||||||
var affrows = 0;
|
var affrows = 0;
|
||||||
Exception exception = null;
|
DbParameter[] dbParms = null;
|
||||||
try
|
ToSqlFetch(sb =>
|
||||||
{
|
{
|
||||||
affrows = _orm.Ado.ExecuteNonQuery(_connection, _transaction, CommandType.Text, sql, _commandTimeout, dbParms);
|
if (dbParms == null) dbParms = _params.Concat(_paramsSource).ToArray();
|
||||||
ValidateVersionAndThrow(affrows, sql, dbParms);
|
var sql = sb.ToString();
|
||||||
}
|
var before = new Aop.CurdBeforeEventArgs(_table.Type, _table, Aop.CurdType.Update, sql, dbParms);
|
||||||
catch (Exception ex)
|
_orm.Aop.CurdBeforeHandler?.Invoke(this, before);
|
||||||
{
|
|
||||||
exception = ex;
|
Exception exception = null;
|
||||||
throw;
|
try
|
||||||
}
|
{
|
||||||
finally
|
var affrowstmp = _orm.Ado.ExecuteNonQuery(_connection, _transaction, CommandType.Text, sql, _commandTimeout, dbParms);
|
||||||
{
|
ValidateVersionAndThrow(affrowstmp, sql, dbParms);
|
||||||
var after = new Aop.CurdAfterEventArgs(before, exception, affrows);
|
affrows += affrowstmp;
|
||||||
_orm.Aop.CurdAfterHandler?.Invoke(this, after);
|
}
|
||||||
}
|
catch (Exception ex)
|
||||||
|
{
|
||||||
|
exception = ex;
|
||||||
|
throw;
|
||||||
|
}
|
||||||
|
finally
|
||||||
|
{
|
||||||
|
var after = new Aop.CurdAfterEventArgs(before, exception, affrows);
|
||||||
|
_orm.Aop.CurdAfterHandler?.Invoke(this, after);
|
||||||
|
}
|
||||||
|
});
|
||||||
return affrows;
|
return affrows;
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -692,8 +725,19 @@ namespace FreeSql.Internal.CommonProvider
|
|||||||
|
|
||||||
protected string TableRuleInvoke()
|
protected string TableRuleInvoke()
|
||||||
{
|
{
|
||||||
if (_tableRule == null) return _table.DbName;
|
if (_tableRule == null && _table.AsTableImpl == null) return _table.DbName;
|
||||||
var newname = _tableRule(_table.DbName);
|
string newname = null;
|
||||||
|
if (_table.AsTableImpl != null)
|
||||||
|
{
|
||||||
|
if (_source.Any())
|
||||||
|
newname = _table.AsTableImpl.GetTableNameByColumnValue(_table.AsTableColumn.GetValue(_source.FirstOrDefault()));
|
||||||
|
else if (_tableRule == null)
|
||||||
|
newname = _table.AsTableImpl.GetTableNameByColumnValue(DateTime.Now);
|
||||||
|
else
|
||||||
|
newname = _tableRule(_table.DbName);
|
||||||
|
}
|
||||||
|
else
|
||||||
|
newname = _tableRule(_table.DbName);
|
||||||
if (newname == _table.DbName) return _table.DbName;
|
if (newname == _table.DbName) return _table.DbName;
|
||||||
if (string.IsNullOrEmpty(newname)) return _table.DbName;
|
if (string.IsNullOrEmpty(newname)) return _table.DbName;
|
||||||
if (_orm.CodeFirst.IsSyncStructureToLower) newname = newname.ToLower();
|
if (_orm.CodeFirst.IsSyncStructureToLower) newname = newname.ToLower();
|
||||||
@ -725,9 +769,114 @@ namespace FreeSql.Internal.CommonProvider
|
|||||||
|
|
||||||
public virtual string ToSql()
|
public virtual string ToSql()
|
||||||
{
|
{
|
||||||
if (_where.Length == 0 && _source.Any() == false) return null;
|
if (_source.Any())
|
||||||
|
{
|
||||||
|
var sb1 = new StringBuilder();
|
||||||
|
ToSqlExtension110(sb1, false);
|
||||||
|
return sb1.ToString();
|
||||||
|
}
|
||||||
|
|
||||||
|
if (_where.Length == 0) return null;
|
||||||
|
|
||||||
|
var sb2 = new StringBuilder();
|
||||||
|
ToSqlFetch(sql =>
|
||||||
|
{
|
||||||
|
sb2.Append(sql).Append("\r\n\r\n;\r\n\r\n");
|
||||||
|
});
|
||||||
|
if (sb2.Length > 0) sb2.Remove(sb2.Length - 9, 9);
|
||||||
|
return sb2.ToString();
|
||||||
|
}
|
||||||
|
|
||||||
|
public void ToSqlFetch(Action<StringBuilder> fetch)
|
||||||
|
{
|
||||||
|
if (_source.Any())
|
||||||
|
{
|
||||||
|
var sb1 = new StringBuilder();
|
||||||
|
ToSqlExtension110(sb1, false);
|
||||||
|
fetch(sb1);
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
if (_where.Length == 0) return;
|
||||||
|
var newwhere = new StringBuilder();
|
||||||
|
ToSqlWhere(newwhere);
|
||||||
|
|
||||||
var sb = new StringBuilder();
|
var sb = new StringBuilder();
|
||||||
|
if (_table.AsTableImpl != null)
|
||||||
|
{
|
||||||
|
var names = _table.AsTableImpl.GetTableNamesBySqlWhere(newwhere.ToString(), _params, _table, _commonUtils);
|
||||||
|
foreach (var name in names)
|
||||||
|
{
|
||||||
|
_tableRule = old => name;
|
||||||
|
ToSqlExtension110(sb.Clear(), true);
|
||||||
|
fetch(sb);
|
||||||
|
}
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
|
||||||
|
ToSqlExtension110(sb, true);
|
||||||
|
fetch(sb);
|
||||||
|
}
|
||||||
|
#if net40
|
||||||
|
#else
|
||||||
|
async public Task ToSqlFetchAsync(Func<StringBuilder, Task> fetchAsync)
|
||||||
|
{
|
||||||
|
if (_source.Any())
|
||||||
|
{
|
||||||
|
var sb1 = new StringBuilder();
|
||||||
|
ToSqlExtension110(sb1, false);
|
||||||
|
await fetchAsync(sb1);
|
||||||
|
sb1.Clear();
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
if (_where.Length == 0) return;
|
||||||
|
var newwhere = new StringBuilder();
|
||||||
|
ToSqlWhere(newwhere);
|
||||||
|
|
||||||
|
var sb = new StringBuilder();
|
||||||
|
if (_table.AsTableImpl != null)
|
||||||
|
{
|
||||||
|
var names = _table.AsTableImpl.GetTableNamesBySqlWhere(newwhere.ToString(), _params, _table, _commonUtils);
|
||||||
|
foreach (var name in names)
|
||||||
|
{
|
||||||
|
_tableRule = old => name;
|
||||||
|
ToSqlExtension110(sb.Clear(), true);
|
||||||
|
await fetchAsync(sb);
|
||||||
|
}
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
|
||||||
|
ToSqlExtension110(sb, true);
|
||||||
|
await fetchAsync(sb);
|
||||||
|
sb.Clear();
|
||||||
|
}
|
||||||
|
#endif
|
||||||
|
public virtual void ToSqlExtension110(StringBuilder sb, bool isAsTableSplited)
|
||||||
|
{
|
||||||
|
if (_where.Length == 0 && _source.Any() == false) return;
|
||||||
|
|
||||||
|
if (_table.AsTableImpl != null && isAsTableSplited == false && _source == _sourceOld && _source.Any())
|
||||||
|
{
|
||||||
|
var atarr = _source.Select(a => new
|
||||||
|
{
|
||||||
|
item = a,
|
||||||
|
splitKey = _table.AsTableImpl.GetTableNameByColumnValue(_table.AsTableColumn.GetValue(a))
|
||||||
|
}).GroupBy(a => a.splitKey, a => a.item).ToArray();
|
||||||
|
if (atarr.Length > 1)
|
||||||
|
{
|
||||||
|
var oldSource = _source;
|
||||||
|
var arrret = new List<List<T1>>();
|
||||||
|
foreach (var item in atarr)
|
||||||
|
{
|
||||||
|
_source = item.ToList();
|
||||||
|
ToSqlExtension110(sb, true);
|
||||||
|
sb.Append("\r\n\r\n;\r\n\r\n");
|
||||||
|
}
|
||||||
|
_source = oldSource;
|
||||||
|
if (sb.Length > 0) sb.Remove(sb.Length - 9, 9);
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
sb.Append("UPDATE ").Append(_commonUtils.QuoteSqlName(TableRuleInvoke())).Append(" SET ");
|
sb.Append("UPDATE ").Append(_commonUtils.QuoteSqlName(TableRuleInvoke())).Append(" SET ");
|
||||||
|
|
||||||
if (_set.Length > 0)
|
if (_set.Length > 0)
|
||||||
@ -763,12 +912,12 @@ namespace FreeSql.Internal.CommonProvider
|
|||||||
++colidx;
|
++colidx;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
if (colidx == 0) return null;
|
if (colidx == 0) return;
|
||||||
|
|
||||||
}
|
}
|
||||||
else if (_source.Count > 1)
|
else if (_source.Count > 1)
|
||||||
{ //批量保存 Source
|
{ //批量保存 Source
|
||||||
if (_tempPrimarys.Any() == false) return null;
|
if (_tempPrimarys.Any() == false) return;
|
||||||
|
|
||||||
var caseWhen = new StringBuilder();
|
var caseWhen = new StringBuilder();
|
||||||
caseWhen.Append("CASE ");
|
caseWhen.Append("CASE ");
|
||||||
@ -818,10 +967,10 @@ namespace FreeSql.Internal.CommonProvider
|
|||||||
++colidx;
|
++colidx;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
if (colidx == 0) return null;
|
if (colidx == 0) return;
|
||||||
}
|
}
|
||||||
else if (_setIncr.Length == 0)
|
else if (_setIncr.Length == 0)
|
||||||
return null;
|
return;
|
||||||
|
|
||||||
if (_setIncr.Length > 0)
|
if (_setIncr.Length > 0)
|
||||||
sb.Append(_set.Length > 0 ? _setIncr.ToString() : _setIncr.ToString().Substring(2));
|
sb.Append(_set.Length > 0 ? _setIncr.ToString() : _setIncr.ToString().Substring(2));
|
||||||
@ -844,7 +993,13 @@ namespace FreeSql.Internal.CommonProvider
|
|||||||
else
|
else
|
||||||
sb.Append(", ").Append(vcname).Append(" = ").Append(_commonUtils.IsNull(vcname, 0)).Append(" + 1");
|
sb.Append(", ").Append(vcname).Append(" = ").Append(_commonUtils.IsNull(vcname, 0)).Append(" + 1");
|
||||||
}
|
}
|
||||||
|
ToSqlWhere(sb);
|
||||||
|
_interceptSql?.Invoke(sb);
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
|
||||||
|
public virtual void ToSqlWhere(StringBuilder sb)
|
||||||
|
{
|
||||||
sb.Append(" \r\nWHERE ");
|
sb.Append(" \r\nWHERE ");
|
||||||
if (_source.Any())
|
if (_source.Any())
|
||||||
{
|
{
|
||||||
@ -868,9 +1023,6 @@ namespace FreeSql.Internal.CommonProvider
|
|||||||
if (string.IsNullOrEmpty(versionCondi) == false)
|
if (string.IsNullOrEmpty(versionCondi) == false)
|
||||||
sb.Append(" AND ").Append(versionCondi);
|
sb.Append(" AND ").Append(versionCondi);
|
||||||
}
|
}
|
||||||
|
|
||||||
_interceptSql?.Invoke(sb);
|
|
||||||
return sb.ToString();
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -167,28 +167,33 @@ namespace FreeSql.Internal.CommonProvider
|
|||||||
|
|
||||||
async protected Task<int> RawExecuteAffrowsAsync(CancellationToken cancellationToken = default)
|
async protected Task<int> RawExecuteAffrowsAsync(CancellationToken cancellationToken = default)
|
||||||
{
|
{
|
||||||
var sql = this.ToSql();
|
|
||||||
if (string.IsNullOrEmpty(sql)) return 0;
|
|
||||||
var dbParms = _params.Concat(_paramsSource).ToArray();
|
|
||||||
var before = new Aop.CurdBeforeEventArgs(_table.Type, _table, Aop.CurdType.Update, sql, dbParms);
|
|
||||||
_orm.Aop.CurdBeforeHandler?.Invoke(this, before);
|
|
||||||
var affrows = 0;
|
var affrows = 0;
|
||||||
Exception exception = null;
|
DbParameter[] dbParms = null;
|
||||||
try
|
await ToSqlFetchAsync(async sb =>
|
||||||
{
|
{
|
||||||
affrows = await _orm.Ado.ExecuteNonQueryAsync(_connection, _transaction, CommandType.Text, sql, _commandTimeout, dbParms, cancellationToken);
|
if (dbParms == null) dbParms = _params.Concat(_paramsSource).ToArray();
|
||||||
ValidateVersionAndThrow(affrows, sql, dbParms);
|
var sql = sb.ToString();
|
||||||
}
|
var before = new Aop.CurdBeforeEventArgs(_table.Type, _table, Aop.CurdType.Update, sql, dbParms);
|
||||||
catch (Exception ex)
|
_orm.Aop.CurdBeforeHandler?.Invoke(this, before);
|
||||||
{
|
|
||||||
exception = ex;
|
Exception exception = null;
|
||||||
throw;
|
try
|
||||||
}
|
{
|
||||||
finally
|
var affrowstmp = await _orm.Ado.ExecuteNonQueryAsync(_connection, _transaction, CommandType.Text, sql, _commandTimeout, dbParms, cancellationToken);
|
||||||
{
|
ValidateVersionAndThrow(affrowstmp, sql, dbParms);
|
||||||
var after = new Aop.CurdAfterEventArgs(before, exception, affrows);
|
affrows += affrowstmp;
|
||||||
_orm.Aop.CurdAfterHandler?.Invoke(this, after);
|
}
|
||||||
}
|
catch (Exception ex)
|
||||||
|
{
|
||||||
|
exception = ex;
|
||||||
|
throw;
|
||||||
|
}
|
||||||
|
finally
|
||||||
|
{
|
||||||
|
var after = new Aop.CurdAfterEventArgs(before, exception, affrows);
|
||||||
|
_orm.Aop.CurdAfterHandler?.Invoke(this, after);
|
||||||
|
}
|
||||||
|
});
|
||||||
return affrows;
|
return affrows;
|
||||||
}
|
}
|
||||||
protected abstract Task<List<T1>> RawExecuteUpdatedAsync(CancellationToken cancellationToken = default);
|
protected abstract Task<List<T1>> RawExecuteUpdatedAsync(CancellationToken cancellationToken = default);
|
||||||
|
@ -80,27 +80,7 @@ namespace FreeSql.ClickHouse.Curd
|
|||||||
_orm.Aop.CurdAfterHandler?.Invoke(this, after);
|
_orm.Aop.CurdAfterHandler?.Invoke(this, after);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
else
|
return base.RawExecuteAffrows();
|
||||||
{
|
|
||||||
var sql = this.ToSql();
|
|
||||||
before = new Aop.CurdBeforeEventArgs(_table.Type, _table, Aop.CurdType.Insert, sql, _params);
|
|
||||||
_orm.Aop.CurdBeforeHandler?.Invoke(this, before);
|
|
||||||
try
|
|
||||||
{
|
|
||||||
affrows = _orm.Ado.ExecuteNonQuery(_connection, null, CommandType.Text, sql, _commandTimeout, _params);
|
|
||||||
}
|
|
||||||
catch (Exception ex)
|
|
||||||
{
|
|
||||||
exception = ex;
|
|
||||||
throw ex;
|
|
||||||
}
|
|
||||||
finally
|
|
||||||
{
|
|
||||||
var after = new Aop.CurdAfterEventArgs(before, exception, affrows);
|
|
||||||
_orm.Aop.CurdAfterHandler?.Invoke(this, after);
|
|
||||||
}
|
|
||||||
return affrows;
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
|
|
||||||
private IDictionary<string, object> GetValue<T>(T u, System.Reflection.PropertyInfo[] columns)
|
private IDictionary<string, object> GetValue<T>(T u, System.Reflection.PropertyInfo[] columns)
|
||||||
@ -210,27 +190,7 @@ namespace FreeSql.ClickHouse.Curd
|
|||||||
_orm.Aop.CurdAfterHandler?.Invoke(this, after);
|
_orm.Aop.CurdAfterHandler?.Invoke(this, after);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
else
|
return await base.RawExecuteAffrowsAsync(cancellationToken);
|
||||||
{
|
|
||||||
var sql = this.ToSql();
|
|
||||||
before = new Aop.CurdBeforeEventArgs(_table.Type, _table, Aop.CurdType.Insert, sql, _params);
|
|
||||||
_orm.Aop.CurdBeforeHandler?.Invoke(this, before);
|
|
||||||
try
|
|
||||||
{
|
|
||||||
affrows = await _orm.Ado.ExecuteNonQueryAsync(_connection, null, CommandType.Text, sql, _commandTimeout, _params);
|
|
||||||
}
|
|
||||||
catch (Exception ex)
|
|
||||||
{
|
|
||||||
exception = ex;
|
|
||||||
throw ex;
|
|
||||||
}
|
|
||||||
finally
|
|
||||||
{
|
|
||||||
var after = new Aop.CurdAfterEventArgs(before, exception, affrows);
|
|
||||||
_orm.Aop.CurdAfterHandler?.Invoke(this, after);
|
|
||||||
}
|
|
||||||
return affrows;
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
|
|
||||||
async protected override Task<long> RawExecuteIdentityAsync(CancellationToken cancellationToken = default)
|
async protected override Task<long> RawExecuteIdentityAsync(CancellationToken cancellationToken = default)
|
||||||
|
@ -65,11 +65,33 @@ namespace FreeSql.ClickHouse.Curd
|
|||||||
sb.Append(")");
|
sb.Append(")");
|
||||||
}
|
}
|
||||||
|
|
||||||
public override string ToSql()
|
public override void ToSqlExtension110(StringBuilder sb, bool isAsTableSplited)
|
||||||
{
|
{
|
||||||
if (_where.Length == 0 && _source.Any() == false) return null;
|
if (_where.Length == 0 && _source.Any() == false) return;
|
||||||
|
|
||||||
|
if (_table.AsTableImpl != null && isAsTableSplited == false && _source == _sourceOld && _source.Any())
|
||||||
|
{
|
||||||
|
var atarr = _source.Select(a => new
|
||||||
|
{
|
||||||
|
item = a,
|
||||||
|
splitKey = _table.AsTableImpl.GetTableNameByColumnValue(_table.AsTableColumn.GetValue(a))
|
||||||
|
}).GroupBy(a => a.splitKey, a => a.item).ToArray();
|
||||||
|
if (atarr.Length > 1)
|
||||||
|
{
|
||||||
|
var oldSource = _source;
|
||||||
|
var arrret = new List<List<T1>>();
|
||||||
|
foreach (var item in atarr)
|
||||||
|
{
|
||||||
|
_source = item.ToList();
|
||||||
|
ToSqlExtension110(sb, true);
|
||||||
|
sb.Append("\r\n\r\n;\r\n\r\n");
|
||||||
|
}
|
||||||
|
_source = oldSource;
|
||||||
|
if (sb.Length > 0) sb.Remove(sb.Length - 9, 9);
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
var sb = new StringBuilder();
|
|
||||||
sb.Append("ALTER TABLE ").Append(_commonUtils.QuoteSqlName(TableRuleInvoke())).Append(" UPDATE ");
|
sb.Append("ALTER TABLE ").Append(_commonUtils.QuoteSqlName(TableRuleInvoke())).Append(" UPDATE ");
|
||||||
|
|
||||||
if (_set.Length > 0)
|
if (_set.Length > 0)
|
||||||
@ -105,12 +127,12 @@ namespace FreeSql.ClickHouse.Curd
|
|||||||
++colidx;
|
++colidx;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
if (colidx == 0) return null;
|
if (colidx == 0) return;
|
||||||
|
|
||||||
}
|
}
|
||||||
else if (_source.Count > 1)
|
else if (_source.Count > 1)
|
||||||
{ //批量保存 Source
|
{ //批量保存 Source
|
||||||
if (_tempPrimarys.Any() == false) return null;
|
if (_tempPrimarys.Any() == false) return;
|
||||||
|
|
||||||
var caseWhen = new StringBuilder();
|
var caseWhen = new StringBuilder();
|
||||||
ToSqlCase(caseWhen, _tempPrimarys);
|
ToSqlCase(caseWhen, _tempPrimarys);
|
||||||
@ -160,10 +182,10 @@ namespace FreeSql.ClickHouse.Curd
|
|||||||
++colidx;
|
++colidx;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
if (colidx == 0) return null;
|
if (colidx == 0) return;
|
||||||
}
|
}
|
||||||
else if (_setIncr.Length == 0)
|
else if (_setIncr.Length == 0)
|
||||||
return null;
|
return;
|
||||||
|
|
||||||
if (_setIncr.Length > 0)
|
if (_setIncr.Length > 0)
|
||||||
sb.Append(_set.Length > 0 ? _setIncr.ToString() : _setIncr.ToString().Substring(2));
|
sb.Append(_set.Length > 0 ? _setIncr.ToString() : _setIncr.ToString().Substring(2));
|
||||||
@ -186,33 +208,9 @@ namespace FreeSql.ClickHouse.Curd
|
|||||||
else
|
else
|
||||||
sb.Append(", ").Append(vcname).Append(" = ").Append(_commonUtils.IsNull(vcname, 0)).Append(" + 1");
|
sb.Append(", ").Append(vcname).Append(" = ").Append(_commonUtils.IsNull(vcname, 0)).Append(" + 1");
|
||||||
}
|
}
|
||||||
|
ToSqlWhere(sb);
|
||||||
sb.Append(" \r\nWHERE ");
|
|
||||||
if (_source.Any())
|
|
||||||
{
|
|
||||||
if (_tempPrimarys.Any() == false) throw new ArgumentException($"{_table.Type.DisplayCsharp()} 没有定义主键,无法使用 SetSource,请尝试 SetDto");
|
|
||||||
sb.Append('(').Append(_commonUtils.WhereItems(_tempPrimarys, "", _source)).Append(')');
|
|
||||||
}
|
|
||||||
|
|
||||||
if (_where.Length > 0)
|
|
||||||
sb.Append(_source.Any() ? _where.ToString() : _where.ToString().Substring(5));
|
|
||||||
|
|
||||||
if (_whereGlobalFilter.Any())
|
|
||||||
{
|
|
||||||
var globalFilterCondi = _commonExpression.GetWhereCascadeSql(new SelectTableInfo { Table = _table }, _whereGlobalFilter, false);
|
|
||||||
if (string.IsNullOrEmpty(globalFilterCondi) == false)
|
|
||||||
sb.Append(" AND ").Append(globalFilterCondi);
|
|
||||||
}
|
|
||||||
|
|
||||||
if (_table.VersionColumn != null)
|
|
||||||
{
|
|
||||||
var versionCondi = WhereCaseSource(_table.VersionColumn.CsName, sqlval => sqlval);
|
|
||||||
if (string.IsNullOrEmpty(versionCondi) == false)
|
|
||||||
sb.Append(" AND ").Append(versionCondi);
|
|
||||||
}
|
|
||||||
|
|
||||||
_interceptSql?.Invoke(sb);
|
_interceptSql?.Invoke(sb);
|
||||||
return sb.ToString();
|
return;
|
||||||
}
|
}
|
||||||
|
|
||||||
protected override int SplitExecuteAffrows(int valuesLimit, int parameterLimit)
|
protected override int SplitExecuteAffrows(int valuesLimit, int parameterLimit)
|
||||||
|
@ -23,7 +23,7 @@ namespace FreeSql.Custom
|
|||||||
public override int ExecuteAffrows() => base.SplitExecuteAffrows(_batchRowsLimit > 0 ? _batchRowsLimit : _utils.Adapter.UpdateBatchSplitLimit, _batchParameterLimit > 0 ? _batchParameterLimit : 255);
|
public override int ExecuteAffrows() => base.SplitExecuteAffrows(_batchRowsLimit > 0 ? _batchRowsLimit : _utils.Adapter.UpdateBatchSplitLimit, _batchParameterLimit > 0 ? _batchParameterLimit : 255);
|
||||||
public override List<T1> ExecuteUpdated() => base.SplitExecuteUpdated(_batchRowsLimit > 0 ? _batchRowsLimit : _utils.Adapter.UpdateBatchSplitLimit, _batchParameterLimit > 0 ? _batchParameterLimit : 255);
|
public override List<T1> ExecuteUpdated() => base.SplitExecuteUpdated(_batchRowsLimit > 0 ? _batchRowsLimit : _utils.Adapter.UpdateBatchSplitLimit, _batchParameterLimit > 0 ? _batchParameterLimit : 255);
|
||||||
|
|
||||||
protected override List<T1> RawExecuteUpdated() => throw new NotImplementedException("FreeSql.Provider.Custom 未实现该功能 未实现该功能");
|
protected override List<T1> RawExecuteUpdated() => throw new NotImplementedException("FreeSql.Provider.Custom 未实现该功能");
|
||||||
|
|
||||||
protected override void ToSqlCase(StringBuilder caseWhen, ColumnInfo[] primarys)
|
protected override void ToSqlCase(StringBuilder caseWhen, ColumnInfo[] primarys)
|
||||||
{
|
{
|
||||||
@ -65,7 +65,7 @@ namespace FreeSql.Custom
|
|||||||
public override Task<int> ExecuteAffrowsAsync(CancellationToken cancellationToken = default) => base.SplitExecuteAffrowsAsync(_batchRowsLimit > 0 ? _batchRowsLimit : _utils.Adapter.UpdateBatchSplitLimit, _batchParameterLimit > 0 ? _batchParameterLimit : 255, cancellationToken);
|
public override Task<int> ExecuteAffrowsAsync(CancellationToken cancellationToken = default) => base.SplitExecuteAffrowsAsync(_batchRowsLimit > 0 ? _batchRowsLimit : _utils.Adapter.UpdateBatchSplitLimit, _batchParameterLimit > 0 ? _batchParameterLimit : 255, cancellationToken);
|
||||||
public override Task<List<T1>> ExecuteUpdatedAsync(CancellationToken cancellationToken = default) => base.SplitExecuteUpdatedAsync(_batchRowsLimit > 0 ? _batchRowsLimit : _utils.Adapter.UpdateBatchSplitLimit, _batchParameterLimit > 0 ? _batchParameterLimit : 255, cancellationToken);
|
public override Task<List<T1>> ExecuteUpdatedAsync(CancellationToken cancellationToken = default) => base.SplitExecuteUpdatedAsync(_batchRowsLimit > 0 ? _batchRowsLimit : _utils.Adapter.UpdateBatchSplitLimit, _batchParameterLimit > 0 ? _batchParameterLimit : 255, cancellationToken);
|
||||||
|
|
||||||
protected override Task<List<T1>> RawExecuteUpdatedAsync(CancellationToken cancellationToken = default) => throw new NotImplementedException("FreeSql.Provider.Custom 未实现该功能 未实现该功能");
|
protected override Task<List<T1>> RawExecuteUpdatedAsync(CancellationToken cancellationToken = default) => throw new NotImplementedException("FreeSql.Provider.Custom 未实现该功能");
|
||||||
#endif
|
#endif
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -21,11 +21,7 @@ namespace FreeSql.Dameng.Curd
|
|||||||
public override int ExecuteAffrows() => base.SplitExecuteAffrows(_batchRowsLimit > 0 ? _batchRowsLimit : 200, _batchParameterLimit > 0 ? _batchParameterLimit : 999);
|
public override int ExecuteAffrows() => base.SplitExecuteAffrows(_batchRowsLimit > 0 ? _batchRowsLimit : 200, _batchParameterLimit > 0 ? _batchParameterLimit : 999);
|
||||||
public override List<T1> ExecuteUpdated() => base.SplitExecuteUpdated(_batchRowsLimit > 0 ? _batchRowsLimit : 200, _batchParameterLimit > 0 ? _batchParameterLimit : 999);
|
public override List<T1> ExecuteUpdated() => base.SplitExecuteUpdated(_batchRowsLimit > 0 ? _batchRowsLimit : 200, _batchParameterLimit > 0 ? _batchParameterLimit : 999);
|
||||||
|
|
||||||
|
protected override List<T1> RawExecuteUpdated() => throw new NotImplementedException("FreeSql.Provider.Dameng 未实现该功能");
|
||||||
protected override List<T1> RawExecuteUpdated()
|
|
||||||
{
|
|
||||||
throw new NotImplementedException();
|
|
||||||
}
|
|
||||||
|
|
||||||
protected override void ToSqlCase(StringBuilder caseWhen, ColumnInfo[] primarys)
|
protected override void ToSqlCase(StringBuilder caseWhen, ColumnInfo[] primarys)
|
||||||
{
|
{
|
||||||
@ -69,10 +65,7 @@ namespace FreeSql.Dameng.Curd
|
|||||||
public override Task<int> ExecuteAffrowsAsync(CancellationToken cancellationToken = default) => base.SplitExecuteAffrowsAsync(_batchRowsLimit > 0 ? _batchRowsLimit : 200, _batchParameterLimit > 0 ? _batchParameterLimit : 999, cancellationToken);
|
public override Task<int> ExecuteAffrowsAsync(CancellationToken cancellationToken = default) => base.SplitExecuteAffrowsAsync(_batchRowsLimit > 0 ? _batchRowsLimit : 200, _batchParameterLimit > 0 ? _batchParameterLimit : 999, cancellationToken);
|
||||||
public override Task<List<T1>> ExecuteUpdatedAsync(CancellationToken cancellationToken = default) => base.SplitExecuteUpdatedAsync(_batchRowsLimit > 0 ? _batchRowsLimit : 200, _batchParameterLimit > 0 ? _batchParameterLimit : 999, cancellationToken);
|
public override Task<List<T1>> ExecuteUpdatedAsync(CancellationToken cancellationToken = default) => base.SplitExecuteUpdatedAsync(_batchRowsLimit > 0 ? _batchRowsLimit : 200, _batchParameterLimit > 0 ? _batchParameterLimit : 999, cancellationToken);
|
||||||
|
|
||||||
protected override Task<List<T1>> RawExecuteUpdatedAsync(CancellationToken cancellationToken = default)
|
protected override Task<List<T1>> RawExecuteUpdatedAsync(CancellationToken cancellationToken = default) => throw new NotImplementedException("FreeSql.Provider.Dameng 未实现该功能");
|
||||||
{
|
|
||||||
throw new NotImplementedException();
|
|
||||||
}
|
|
||||||
#endif
|
#endif
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -3,6 +3,7 @@ using FreeSql.Internal.Model;
|
|||||||
using System;
|
using System;
|
||||||
using System.Collections.Generic;
|
using System.Collections.Generic;
|
||||||
using System.Data;
|
using System.Data;
|
||||||
|
using System.Data.Common;
|
||||||
using System.Linq;
|
using System.Linq;
|
||||||
using System.Text;
|
using System.Text;
|
||||||
using System.Threading;
|
using System.Threading;
|
||||||
@ -24,40 +25,48 @@ namespace FreeSql.Firebird.Curd
|
|||||||
|
|
||||||
protected override List<T1> RawExecuteUpdated()
|
protected override List<T1> RawExecuteUpdated()
|
||||||
{
|
{
|
||||||
var sql = this.ToSql();
|
|
||||||
if (string.IsNullOrEmpty(sql)) return new List<T1>();
|
|
||||||
|
|
||||||
var sb = new StringBuilder();
|
|
||||||
sb.Append(sql).Append(" RETURNING ");
|
|
||||||
|
|
||||||
var colidx = 0;
|
|
||||||
foreach (var col in _table.Columns.Values)
|
|
||||||
{
|
|
||||||
if (colidx > 0) sb.Append(", ");
|
|
||||||
sb.Append(_commonUtils.RereadColumn(col, $"new.{_commonUtils.QuoteSqlName(col.Attribute.Name)}")).Append(" as ").Append(_commonUtils.QuoteSqlName(col.CsName));
|
|
||||||
++colidx;
|
|
||||||
}
|
|
||||||
sql = sb.ToString();
|
|
||||||
var dbParms = _params.Concat(_paramsSource).ToArray();
|
|
||||||
var before = new Aop.CurdBeforeEventArgs(_table.Type, _table, Aop.CurdType.Update, sql, dbParms);
|
|
||||||
_orm.Aop.CurdBeforeHandler?.Invoke(this, before);
|
|
||||||
var ret = new List<T1>();
|
var ret = new List<T1>();
|
||||||
Exception exception = null;
|
DbParameter[] dbParms = null;
|
||||||
try
|
StringBuilder sbret = null;
|
||||||
|
ToSqlFetch(sb =>
|
||||||
{
|
{
|
||||||
ret = _orm.Ado.Query<T1>(_connection, _transaction, CommandType.Text, sql, _commandTimeout, dbParms);
|
if (dbParms == null)
|
||||||
ValidateVersionAndThrow(ret.Count, sql, dbParms);
|
{
|
||||||
}
|
dbParms = _params.Concat(_paramsSource).ToArray();
|
||||||
catch (Exception ex)
|
sbret = new StringBuilder();
|
||||||
{
|
sbret.Append(" RETURNING ");
|
||||||
exception = ex;
|
|
||||||
throw ex;
|
var colidx = 0;
|
||||||
}
|
foreach (var col in _table.Columns.Values)
|
||||||
finally
|
{
|
||||||
{
|
if (colidx > 0) sbret.Append(", ");
|
||||||
var after = new Aop.CurdAfterEventArgs(before, exception, ret);
|
sbret.Append(_commonUtils.RereadColumn(col, $"new.{_commonUtils.QuoteSqlName(col.Attribute.Name)}")).Append(" as ").Append(_commonUtils.QuoteSqlName(col.CsName));
|
||||||
_orm.Aop.CurdAfterHandler?.Invoke(this, after);
|
++colidx;
|
||||||
}
|
}
|
||||||
|
}
|
||||||
|
var sql = sb.Append(sbret).ToString();
|
||||||
|
var before = new Aop.CurdBeforeEventArgs(_table.Type, _table, Aop.CurdType.Update, sql, dbParms);
|
||||||
|
_orm.Aop.CurdBeforeHandler?.Invoke(this, before);
|
||||||
|
|
||||||
|
Exception exception = null;
|
||||||
|
try
|
||||||
|
{
|
||||||
|
var rettmp = _orm.Ado.Query<T1>(_table.TypeLazy ?? _table.Type, _connection, _transaction, CommandType.Text, sql, _commandTimeout, dbParms);
|
||||||
|
ValidateVersionAndThrow(rettmp.Count, sql, dbParms);
|
||||||
|
ret.AddRange(rettmp);
|
||||||
|
}
|
||||||
|
catch (Exception ex)
|
||||||
|
{
|
||||||
|
exception = ex;
|
||||||
|
throw;
|
||||||
|
}
|
||||||
|
finally
|
||||||
|
{
|
||||||
|
var after = new Aop.CurdAfterEventArgs(before, exception, ret);
|
||||||
|
_orm.Aop.CurdAfterHandler?.Invoke(this, after);
|
||||||
|
}
|
||||||
|
});
|
||||||
|
sbret?.Clear();
|
||||||
return ret;
|
return ret;
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -105,40 +114,48 @@ namespace FreeSql.Firebird.Curd
|
|||||||
|
|
||||||
async protected override Task<List<T1>> RawExecuteUpdatedAsync(CancellationToken cancellationToken = default)
|
async protected override Task<List<T1>> RawExecuteUpdatedAsync(CancellationToken cancellationToken = default)
|
||||||
{
|
{
|
||||||
var sql = this.ToSql();
|
|
||||||
if (string.IsNullOrEmpty(sql)) return new List<T1>();
|
|
||||||
|
|
||||||
var sb = new StringBuilder();
|
|
||||||
sb.Append(sql).Append(" RETURNING ");
|
|
||||||
|
|
||||||
var colidx = 0;
|
|
||||||
foreach (var col in _table.Columns.Values)
|
|
||||||
{
|
|
||||||
if (colidx > 0) sb.Append(", ");
|
|
||||||
sb.Append(_commonUtils.RereadColumn(col, $"new.{_commonUtils.QuoteSqlName(col.Attribute.Name)}")).Append(" as ").Append(_commonUtils.QuoteSqlName(col.CsName));
|
|
||||||
++colidx;
|
|
||||||
}
|
|
||||||
sql = sb.ToString();
|
|
||||||
var dbParms = _params.Concat(_paramsSource).ToArray();
|
|
||||||
var before = new Aop.CurdBeforeEventArgs(_table.Type, _table, Aop.CurdType.Update, sql, dbParms);
|
|
||||||
_orm.Aop.CurdBeforeHandler?.Invoke(this, before);
|
|
||||||
var ret = new List<T1>();
|
var ret = new List<T1>();
|
||||||
Exception exception = null;
|
DbParameter[] dbParms = null;
|
||||||
try
|
StringBuilder sbret = null;
|
||||||
|
await ToSqlFetchAsync(async sb =>
|
||||||
{
|
{
|
||||||
ret = await _orm.Ado.QueryAsync<T1>(_connection, _transaction, CommandType.Text, sql, _commandTimeout, dbParms, cancellationToken);
|
if (dbParms == null)
|
||||||
ValidateVersionAndThrow(ret.Count, sql, dbParms);
|
{
|
||||||
}
|
dbParms = _params.Concat(_paramsSource).ToArray();
|
||||||
catch (Exception ex)
|
sbret = new StringBuilder();
|
||||||
{
|
sbret.Append(" RETURNING ");
|
||||||
exception = ex;
|
|
||||||
throw ex;
|
var colidx = 0;
|
||||||
}
|
foreach (var col in _table.Columns.Values)
|
||||||
finally
|
{
|
||||||
{
|
if (colidx > 0) sbret.Append(", ");
|
||||||
var after = new Aop.CurdAfterEventArgs(before, exception, ret);
|
sbret.Append(_commonUtils.RereadColumn(col, $"new.{_commonUtils.QuoteSqlName(col.Attribute.Name)}")).Append(" as ").Append(_commonUtils.QuoteSqlName(col.CsName));
|
||||||
_orm.Aop.CurdAfterHandler?.Invoke(this, after);
|
++colidx;
|
||||||
}
|
}
|
||||||
|
}
|
||||||
|
var sql = sb.Append(sbret).ToString();
|
||||||
|
var before = new Aop.CurdBeforeEventArgs(_table.Type, _table, Aop.CurdType.Update, sql, dbParms);
|
||||||
|
_orm.Aop.CurdBeforeHandler?.Invoke(this, before);
|
||||||
|
|
||||||
|
Exception exception = null;
|
||||||
|
try
|
||||||
|
{
|
||||||
|
var rettmp = await _orm.Ado.QueryAsync<T1>(_table.TypeLazy ?? _table.Type, _connection, _transaction, CommandType.Text, sql, _commandTimeout, dbParms, cancellationToken);
|
||||||
|
ValidateVersionAndThrow(rettmp.Count, sql, dbParms);
|
||||||
|
ret.AddRange(rettmp);
|
||||||
|
}
|
||||||
|
catch (Exception ex)
|
||||||
|
{
|
||||||
|
exception = ex;
|
||||||
|
throw;
|
||||||
|
}
|
||||||
|
finally
|
||||||
|
{
|
||||||
|
var after = new Aop.CurdAfterEventArgs(before, exception, ret);
|
||||||
|
_orm.Aop.CurdAfterHandler?.Invoke(this, after);
|
||||||
|
}
|
||||||
|
});
|
||||||
|
sbret?.Clear();
|
||||||
return ret;
|
return ret;
|
||||||
}
|
}
|
||||||
#endif
|
#endif
|
||||||
|
@ -22,10 +22,7 @@ namespace FreeSql.GBase.Curd
|
|||||||
public override int ExecuteAffrows() => base.SplitExecuteAffrows(_batchRowsLimit > 0 ? _batchRowsLimit : 200, _batchParameterLimit > 0 ? _batchParameterLimit : 999);
|
public override int ExecuteAffrows() => base.SplitExecuteAffrows(_batchRowsLimit > 0 ? _batchRowsLimit : 200, _batchParameterLimit > 0 ? _batchParameterLimit : 999);
|
||||||
public override List<T1> ExecuteUpdated() => base.SplitExecuteUpdated(_batchRowsLimit > 0 ? _batchRowsLimit : 200, _batchParameterLimit > 0 ? _batchParameterLimit : 999);
|
public override List<T1> ExecuteUpdated() => base.SplitExecuteUpdated(_batchRowsLimit > 0 ? _batchRowsLimit : 200, _batchParameterLimit > 0 ? _batchParameterLimit : 999);
|
||||||
|
|
||||||
protected override List<T1> RawExecuteUpdated()
|
protected override List<T1> RawExecuteUpdated() => throw new NotImplementedException("FreeSql.Provider.GBase 未实现该功能");
|
||||||
{
|
|
||||||
throw new NotImplementedException();
|
|
||||||
}
|
|
||||||
|
|
||||||
protected override void ToSqlCase(StringBuilder caseWhen, ColumnInfo[] primarys)
|
protected override void ToSqlCase(StringBuilder caseWhen, ColumnInfo[] primarys)
|
||||||
{
|
{
|
||||||
@ -69,10 +66,7 @@ namespace FreeSql.GBase.Curd
|
|||||||
public override Task<int> ExecuteAffrowsAsync(CancellationToken cancellationToken = default) => base.SplitExecuteAffrowsAsync(_batchRowsLimit > 0 ? _batchRowsLimit : 200, _batchParameterLimit > 0 ? _batchParameterLimit : 999, cancellationToken);
|
public override Task<int> ExecuteAffrowsAsync(CancellationToken cancellationToken = default) => base.SplitExecuteAffrowsAsync(_batchRowsLimit > 0 ? _batchRowsLimit : 200, _batchParameterLimit > 0 ? _batchParameterLimit : 999, cancellationToken);
|
||||||
public override Task<List<T1>> ExecuteUpdatedAsync(CancellationToken cancellationToken = default) => base.SplitExecuteUpdatedAsync(_batchRowsLimit > 0 ? _batchRowsLimit : 200, _batchParameterLimit > 0 ? _batchParameterLimit : 999, cancellationToken);
|
public override Task<List<T1>> ExecuteUpdatedAsync(CancellationToken cancellationToken = default) => base.SplitExecuteUpdatedAsync(_batchRowsLimit > 0 ? _batchRowsLimit : 200, _batchParameterLimit > 0 ? _batchParameterLimit : 999, cancellationToken);
|
||||||
|
|
||||||
protected override Task<List<T1>> RawExecuteUpdatedAsync(CancellationToken cancellationToken = default)
|
protected override Task<List<T1>> RawExecuteUpdatedAsync(CancellationToken cancellationToken = default) => throw new NotImplementedException("FreeSql.Provider.GBase 未实现该功能");
|
||||||
{
|
|
||||||
throw new NotImplementedException();
|
|
||||||
}
|
|
||||||
#endif
|
#endif
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -3,6 +3,7 @@ using FreeSql.Internal.Model;
|
|||||||
using System;
|
using System;
|
||||||
using System.Collections.Generic;
|
using System.Collections.Generic;
|
||||||
using System.Data;
|
using System.Data;
|
||||||
|
using System.Data.Common;
|
||||||
using System.Linq;
|
using System.Linq;
|
||||||
using System.Text;
|
using System.Text;
|
||||||
using System.Threading;
|
using System.Threading;
|
||||||
@ -32,40 +33,48 @@ namespace FreeSql.KingbaseES
|
|||||||
|
|
||||||
protected override List<T1> RawExecuteUpdated()
|
protected override List<T1> RawExecuteUpdated()
|
||||||
{
|
{
|
||||||
var sql = this.ToSql();
|
|
||||||
if (string.IsNullOrEmpty(sql)) return new List<T1>();
|
|
||||||
|
|
||||||
var sb = new StringBuilder();
|
|
||||||
sb.Append(sql).Append(" RETURNING ");
|
|
||||||
|
|
||||||
var colidx = 0;
|
|
||||||
foreach (var col in _table.Columns.Values)
|
|
||||||
{
|
|
||||||
if (colidx > 0) sb.Append(", ");
|
|
||||||
sb.Append(_commonUtils.RereadColumn(col, _commonUtils.QuoteSqlName(col.Attribute.Name))).Append(" as ").Append(_commonUtils.QuoteSqlName(col.CsName));
|
|
||||||
++colidx;
|
|
||||||
}
|
|
||||||
sql = sb.ToString();
|
|
||||||
var dbParms = _params.Concat(_paramsSource).ToArray();
|
|
||||||
var before = new Aop.CurdBeforeEventArgs(_table.Type, _table, Aop.CurdType.Update, sql, dbParms);
|
|
||||||
_orm.Aop.CurdBeforeHandler?.Invoke(this, before);
|
|
||||||
var ret = new List<T1>();
|
var ret = new List<T1>();
|
||||||
Exception exception = null;
|
DbParameter[] dbParms = null;
|
||||||
try
|
StringBuilder sbret = null;
|
||||||
|
ToSqlFetch(sb =>
|
||||||
{
|
{
|
||||||
ret = _orm.Ado.Query<T1>(_table.TypeLazy ?? _table.Type, _connection, _transaction, CommandType.Text, sql, _commandTimeout, dbParms);
|
if (dbParms == null)
|
||||||
ValidateVersionAndThrow(ret.Count, sql, dbParms);
|
{
|
||||||
}
|
dbParms = _params.Concat(_paramsSource).ToArray();
|
||||||
catch (Exception ex)
|
sbret = new StringBuilder();
|
||||||
{
|
sbret.Append(" RETURNING ");
|
||||||
exception = ex;
|
|
||||||
throw ex;
|
var colidx = 0;
|
||||||
}
|
foreach (var col in _table.Columns.Values)
|
||||||
finally
|
{
|
||||||
{
|
if (colidx > 0) sbret.Append(", ");
|
||||||
var after = new Aop.CurdAfterEventArgs(before, exception, ret);
|
sbret.Append(_commonUtils.RereadColumn(col, _commonUtils.QuoteSqlName(col.Attribute.Name))).Append(" as ").Append(_commonUtils.QuoteSqlName(col.CsName));
|
||||||
_orm.Aop.CurdAfterHandler?.Invoke(this, after);
|
++colidx;
|
||||||
}
|
}
|
||||||
|
}
|
||||||
|
var sql = sb.Append(sbret).ToString();
|
||||||
|
var before = new Aop.CurdBeforeEventArgs(_table.Type, _table, Aop.CurdType.Update, sql, dbParms);
|
||||||
|
_orm.Aop.CurdBeforeHandler?.Invoke(this, before);
|
||||||
|
|
||||||
|
Exception exception = null;
|
||||||
|
try
|
||||||
|
{
|
||||||
|
var rettmp = _orm.Ado.Query<T1>(_table.TypeLazy ?? _table.Type, _connection, _transaction, CommandType.Text, sql, _commandTimeout, dbParms);
|
||||||
|
ValidateVersionAndThrow(rettmp.Count, sql, dbParms);
|
||||||
|
ret.AddRange(rettmp);
|
||||||
|
}
|
||||||
|
catch (Exception ex)
|
||||||
|
{
|
||||||
|
exception = ex;
|
||||||
|
throw;
|
||||||
|
}
|
||||||
|
finally
|
||||||
|
{
|
||||||
|
var after = new Aop.CurdAfterEventArgs(before, exception, ret);
|
||||||
|
_orm.Aop.CurdAfterHandler?.Invoke(this, after);
|
||||||
|
}
|
||||||
|
});
|
||||||
|
sbret?.Clear();
|
||||||
return ret;
|
return ret;
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -129,40 +138,48 @@ namespace FreeSql.KingbaseES
|
|||||||
|
|
||||||
async protected override Task<List<T1>> RawExecuteUpdatedAsync(CancellationToken cancellationToken = default)
|
async protected override Task<List<T1>> RawExecuteUpdatedAsync(CancellationToken cancellationToken = default)
|
||||||
{
|
{
|
||||||
var sql = this.ToSql();
|
|
||||||
if (string.IsNullOrEmpty(sql)) return new List<T1>();
|
|
||||||
|
|
||||||
var sb = new StringBuilder();
|
|
||||||
sb.Append(sql).Append(" RETURNING ");
|
|
||||||
|
|
||||||
var colidx = 0;
|
|
||||||
foreach (var col in _table.Columns.Values)
|
|
||||||
{
|
|
||||||
if (colidx > 0) sb.Append(", ");
|
|
||||||
sb.Append(_commonUtils.RereadColumn(col, _commonUtils.QuoteSqlName(col.Attribute.Name))).Append(" as ").Append(_commonUtils.QuoteSqlName(col.CsName));
|
|
||||||
++colidx;
|
|
||||||
}
|
|
||||||
sql = sb.ToString();
|
|
||||||
var dbParms = _params.Concat(_paramsSource).ToArray();
|
|
||||||
var before = new Aop.CurdBeforeEventArgs(_table.Type, _table, Aop.CurdType.Update, sql, dbParms);
|
|
||||||
_orm.Aop.CurdBeforeHandler?.Invoke(this, before);
|
|
||||||
var ret = new List<T1>();
|
var ret = new List<T1>();
|
||||||
Exception exception = null;
|
DbParameter[] dbParms = null;
|
||||||
try
|
StringBuilder sbret = null;
|
||||||
|
await ToSqlFetchAsync(async sb =>
|
||||||
{
|
{
|
||||||
ret = await _orm.Ado.QueryAsync<T1>(_table.TypeLazy ?? _table.Type, _connection, _transaction, CommandType.Text, sql, _commandTimeout, dbParms, cancellationToken);
|
if (dbParms == null)
|
||||||
ValidateVersionAndThrow(ret.Count, sql, dbParms);
|
{
|
||||||
}
|
dbParms = _params.Concat(_paramsSource).ToArray();
|
||||||
catch (Exception ex)
|
sbret = new StringBuilder();
|
||||||
{
|
sbret.Append(" RETURNING ");
|
||||||
exception = ex;
|
|
||||||
throw ex;
|
var colidx = 0;
|
||||||
}
|
foreach (var col in _table.Columns.Values)
|
||||||
finally
|
{
|
||||||
{
|
if (colidx > 0) sbret.Append(", ");
|
||||||
var after = new Aop.CurdAfterEventArgs(before, exception, ret);
|
sbret.Append(_commonUtils.RereadColumn(col, _commonUtils.QuoteSqlName(col.Attribute.Name))).Append(" as ").Append(_commonUtils.QuoteSqlName(col.CsName));
|
||||||
_orm.Aop.CurdAfterHandler?.Invoke(this, after);
|
++colidx;
|
||||||
}
|
}
|
||||||
|
}
|
||||||
|
var sql = sb.Append(sbret).ToString();
|
||||||
|
var before = new Aop.CurdBeforeEventArgs(_table.Type, _table, Aop.CurdType.Update, sql, dbParms);
|
||||||
|
_orm.Aop.CurdBeforeHandler?.Invoke(this, before);
|
||||||
|
|
||||||
|
Exception exception = null;
|
||||||
|
try
|
||||||
|
{
|
||||||
|
var rettmp = await _orm.Ado.QueryAsync<T1>(_table.TypeLazy ?? _table.Type, _connection, _transaction, CommandType.Text, sql, _commandTimeout, dbParms, cancellationToken);
|
||||||
|
ValidateVersionAndThrow(rettmp.Count, sql, dbParms);
|
||||||
|
ret.AddRange(rettmp);
|
||||||
|
}
|
||||||
|
catch (Exception ex)
|
||||||
|
{
|
||||||
|
exception = ex;
|
||||||
|
throw;
|
||||||
|
}
|
||||||
|
finally
|
||||||
|
{
|
||||||
|
var after = new Aop.CurdAfterEventArgs(before, exception, ret);
|
||||||
|
_orm.Aop.CurdAfterHandler?.Invoke(this, after);
|
||||||
|
}
|
||||||
|
});
|
||||||
|
sbret?.Clear();
|
||||||
return ret;
|
return ret;
|
||||||
}
|
}
|
||||||
#endif
|
#endif
|
||||||
|
@ -27,10 +27,7 @@ namespace FreeSql.MsAccess.Curd
|
|||||||
public override IUpdate<T1> BatchOptions(int rowsLimit, int parameterLimit, bool autoTransaction = true) =>
|
public override IUpdate<T1> BatchOptions(int rowsLimit, int parameterLimit, bool autoTransaction = true) =>
|
||||||
throw new NotImplementedException("蛋疼的 access 插入只能一条一条执行,不支持 values(..),(..) 也不支持 select .. UNION ALL select ..");
|
throw new NotImplementedException("蛋疼的 access 插入只能一条一条执行,不支持 values(..),(..) 也不支持 select .. UNION ALL select ..");
|
||||||
|
|
||||||
protected override List<T1> RawExecuteUpdated()
|
protected override List<T1> RawExecuteUpdated() => throw new NotImplementedException("FreeSql.Provider.MsAccess 未实现该功能");
|
||||||
{
|
|
||||||
throw new NotImplementedException();
|
|
||||||
}
|
|
||||||
|
|
||||||
protected override void ToSqlCase(StringBuilder caseWhen, ColumnInfo[] primarys)
|
protected override void ToSqlCase(StringBuilder caseWhen, ColumnInfo[] primarys)
|
||||||
{
|
{
|
||||||
@ -72,10 +69,7 @@ namespace FreeSql.MsAccess.Curd
|
|||||||
public override Task<int> ExecuteAffrowsAsync(CancellationToken cancellationToken = default) => base.SplitExecuteAffrowsAsync(1, 1000, cancellationToken);
|
public override Task<int> ExecuteAffrowsAsync(CancellationToken cancellationToken = default) => base.SplitExecuteAffrowsAsync(1, 1000, cancellationToken);
|
||||||
public override Task<List<T1>> ExecuteUpdatedAsync(CancellationToken cancellationToken = default) => base.SplitExecuteUpdatedAsync(1, 1000, cancellationToken);
|
public override Task<List<T1>> ExecuteUpdatedAsync(CancellationToken cancellationToken = default) => base.SplitExecuteUpdatedAsync(1, 1000, cancellationToken);
|
||||||
|
|
||||||
protected override Task<List<T1>> RawExecuteUpdatedAsync(CancellationToken cancellationToken = default)
|
protected override Task<List<T1>> RawExecuteUpdatedAsync(CancellationToken cancellationToken = default) => throw new NotImplementedException("FreeSql.Provider.MsAccess 未实现该功能");
|
||||||
{
|
|
||||||
throw new NotImplementedException();
|
|
||||||
}
|
|
||||||
#endif
|
#endif
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -3,6 +3,7 @@ using FreeSql.Internal.Model;
|
|||||||
using System;
|
using System;
|
||||||
using System.Collections.Generic;
|
using System.Collections.Generic;
|
||||||
using System.Data;
|
using System.Data;
|
||||||
|
using System.Data.Common;
|
||||||
using System.Linq;
|
using System.Linq;
|
||||||
using System.Text;
|
using System.Text;
|
||||||
using System.Threading;
|
using System.Threading;
|
||||||
@ -31,40 +32,48 @@ namespace FreeSql.MySql.Curd
|
|||||||
|
|
||||||
protected override List<T1> RawExecuteUpdated()
|
protected override List<T1> RawExecuteUpdated()
|
||||||
{
|
{
|
||||||
var sql = this.ToSql();
|
|
||||||
if (string.IsNullOrEmpty(sql)) return new List<T1>();
|
|
||||||
|
|
||||||
var sb = new StringBuilder();
|
|
||||||
sb.Append(sql).Append(" RETURNING ");
|
|
||||||
|
|
||||||
var colidx = 0;
|
|
||||||
foreach (var col in _table.Columns.Values)
|
|
||||||
{
|
|
||||||
if (colidx > 0) sb.Append(", ");
|
|
||||||
sb.Append(_commonUtils.RereadColumn(col, _commonUtils.QuoteSqlName(col.Attribute.Name))).Append(" as ").Append(_commonUtils.QuoteSqlName(col.CsName));
|
|
||||||
++colidx;
|
|
||||||
}
|
|
||||||
sql = sb.ToString();
|
|
||||||
var dbParms = _params.Concat(_paramsSource).ToArray();
|
|
||||||
var before = new Aop.CurdBeforeEventArgs(_table.Type, _table, Aop.CurdType.Update, sql, dbParms);
|
|
||||||
_orm.Aop.CurdBeforeHandler?.Invoke(this, before);
|
|
||||||
var ret = new List<T1>();
|
var ret = new List<T1>();
|
||||||
Exception exception = null;
|
DbParameter[] dbParms = null;
|
||||||
try
|
StringBuilder sbret = null;
|
||||||
|
ToSqlFetch(sb =>
|
||||||
{
|
{
|
||||||
ret = _orm.Ado.Query<T1>(_table.TypeLazy ?? _table.Type, _connection, _transaction, CommandType.Text, sql, _commandTimeout, dbParms);
|
if (dbParms == null)
|
||||||
ValidateVersionAndThrow(ret.Count, sql, dbParms);
|
{
|
||||||
}
|
dbParms = _params.Concat(_paramsSource).ToArray();
|
||||||
catch (Exception ex)
|
sbret = new StringBuilder();
|
||||||
{
|
sbret.Append(" RETURNING ");
|
||||||
exception = ex;
|
|
||||||
throw;
|
var colidx = 0;
|
||||||
}
|
foreach (var col in _table.Columns.Values)
|
||||||
finally
|
{
|
||||||
{
|
if (colidx > 0) sbret.Append(", ");
|
||||||
var after = new Aop.CurdAfterEventArgs(before, exception, ret);
|
sbret.Append(_commonUtils.RereadColumn(col, _commonUtils.QuoteSqlName(col.Attribute.Name))).Append(" as ").Append(_commonUtils.QuoteSqlName(col.CsName));
|
||||||
_orm.Aop.CurdAfterHandler?.Invoke(this, after);
|
++colidx;
|
||||||
}
|
}
|
||||||
|
}
|
||||||
|
var sql = sb.Append(sbret).ToString();
|
||||||
|
var before = new Aop.CurdBeforeEventArgs(_table.Type, _table, Aop.CurdType.Update, sql, dbParms);
|
||||||
|
_orm.Aop.CurdBeforeHandler?.Invoke(this, before);
|
||||||
|
|
||||||
|
Exception exception = null;
|
||||||
|
try
|
||||||
|
{
|
||||||
|
var rettmp = _orm.Ado.Query<T1>(_table.TypeLazy ?? _table.Type, _connection, _transaction, CommandType.Text, sql, _commandTimeout, dbParms);
|
||||||
|
ValidateVersionAndThrow(rettmp.Count, sql, dbParms);
|
||||||
|
ret.AddRange(rettmp);
|
||||||
|
}
|
||||||
|
catch (Exception ex)
|
||||||
|
{
|
||||||
|
exception = ex;
|
||||||
|
throw;
|
||||||
|
}
|
||||||
|
finally
|
||||||
|
{
|
||||||
|
var after = new Aop.CurdAfterEventArgs(before, exception, ret);
|
||||||
|
_orm.Aop.CurdAfterHandler?.Invoke(this, after);
|
||||||
|
}
|
||||||
|
});
|
||||||
|
sbret?.Clear();
|
||||||
return ret;
|
return ret;
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -112,40 +121,48 @@ namespace FreeSql.MySql.Curd
|
|||||||
|
|
||||||
async protected override Task<List<T1>> RawExecuteUpdatedAsync(CancellationToken cancellationToken = default)
|
async protected override Task<List<T1>> RawExecuteUpdatedAsync(CancellationToken cancellationToken = default)
|
||||||
{
|
{
|
||||||
var sql = this.ToSql();
|
|
||||||
if (string.IsNullOrEmpty(sql)) return new List<T1>();
|
|
||||||
|
|
||||||
var sb = new StringBuilder();
|
|
||||||
sb.Append(sql).Append(" RETURNING ");
|
|
||||||
|
|
||||||
var colidx = 0;
|
|
||||||
foreach (var col in _table.Columns.Values)
|
|
||||||
{
|
|
||||||
if (colidx > 0) sb.Append(", ");
|
|
||||||
sb.Append(_commonUtils.RereadColumn(col, _commonUtils.QuoteSqlName(col.Attribute.Name))).Append(" as ").Append(_commonUtils.QuoteSqlName(col.CsName));
|
|
||||||
++colidx;
|
|
||||||
}
|
|
||||||
sql = sb.ToString();
|
|
||||||
var dbParms = _params.Concat(_paramsSource).ToArray();
|
|
||||||
var before = new Aop.CurdBeforeEventArgs(_table.Type, _table, Aop.CurdType.Update, sql, dbParms);
|
|
||||||
_orm.Aop.CurdBeforeHandler?.Invoke(this, before);
|
|
||||||
var ret = new List<T1>();
|
var ret = new List<T1>();
|
||||||
Exception exception = null;
|
DbParameter[] dbParms = null;
|
||||||
try
|
StringBuilder sbret = null;
|
||||||
|
await ToSqlFetchAsync(async sb =>
|
||||||
{
|
{
|
||||||
ret = await _orm.Ado.QueryAsync<T1>(_table.TypeLazy ?? _table.Type, _connection, _transaction, CommandType.Text, sql, _commandTimeout, dbParms, cancellationToken);
|
if (dbParms == null)
|
||||||
ValidateVersionAndThrow(ret.Count, sql, dbParms);
|
{
|
||||||
}
|
dbParms = _params.Concat(_paramsSource).ToArray();
|
||||||
catch (Exception ex)
|
sbret = new StringBuilder();
|
||||||
{
|
sbret.Append(" RETURNING ");
|
||||||
exception = ex;
|
|
||||||
throw;
|
var colidx = 0;
|
||||||
}
|
foreach (var col in _table.Columns.Values)
|
||||||
finally
|
{
|
||||||
{
|
if (colidx > 0) sbret.Append(", ");
|
||||||
var after = new Aop.CurdAfterEventArgs(before, exception, ret);
|
sbret.Append(_commonUtils.RereadColumn(col, _commonUtils.QuoteSqlName(col.Attribute.Name))).Append(" as ").Append(_commonUtils.QuoteSqlName(col.CsName));
|
||||||
_orm.Aop.CurdAfterHandler?.Invoke(this, after);
|
++colidx;
|
||||||
}
|
}
|
||||||
|
}
|
||||||
|
var sql = sb.Append(sbret).ToString();
|
||||||
|
var before = new Aop.CurdBeforeEventArgs(_table.Type, _table, Aop.CurdType.Update, sql, dbParms);
|
||||||
|
_orm.Aop.CurdBeforeHandler?.Invoke(this, before);
|
||||||
|
|
||||||
|
Exception exception = null;
|
||||||
|
try
|
||||||
|
{
|
||||||
|
var rettmp = await _orm.Ado.QueryAsync<T1>(_table.TypeLazy ?? _table.Type, _connection, _transaction, CommandType.Text, sql, _commandTimeout, dbParms, cancellationToken);
|
||||||
|
ValidateVersionAndThrow(rettmp.Count, sql, dbParms);
|
||||||
|
ret.AddRange(rettmp);
|
||||||
|
}
|
||||||
|
catch (Exception ex)
|
||||||
|
{
|
||||||
|
exception = ex;
|
||||||
|
throw;
|
||||||
|
}
|
||||||
|
finally
|
||||||
|
{
|
||||||
|
var after = new Aop.CurdAfterEventArgs(before, exception, ret);
|
||||||
|
_orm.Aop.CurdAfterHandler?.Invoke(this, after);
|
||||||
|
}
|
||||||
|
});
|
||||||
|
sbret?.Clear();
|
||||||
return ret;
|
return ret;
|
||||||
}
|
}
|
||||||
#endif
|
#endif
|
||||||
|
@ -22,11 +22,7 @@ namespace FreeSql.Odbc.Dameng
|
|||||||
public override int ExecuteAffrows() => base.SplitExecuteAffrows(_batchRowsLimit > 0 ? _batchRowsLimit : 200, _batchParameterLimit > 0 ? _batchParameterLimit : 999);
|
public override int ExecuteAffrows() => base.SplitExecuteAffrows(_batchRowsLimit > 0 ? _batchRowsLimit : 200, _batchParameterLimit > 0 ? _batchParameterLimit : 999);
|
||||||
public override List<T1> ExecuteUpdated() => base.SplitExecuteUpdated(_batchRowsLimit > 0 ? _batchRowsLimit : 200, _batchParameterLimit > 0 ? _batchParameterLimit : 999);
|
public override List<T1> ExecuteUpdated() => base.SplitExecuteUpdated(_batchRowsLimit > 0 ? _batchRowsLimit : 200, _batchParameterLimit > 0 ? _batchParameterLimit : 999);
|
||||||
|
|
||||||
|
protected override List<T1> RawExecuteUpdated() => throw new NotImplementedException("FreeSql.Odbc.Dameng 未实现该功能");
|
||||||
protected override List<T1> RawExecuteUpdated()
|
|
||||||
{
|
|
||||||
throw new NotImplementedException();
|
|
||||||
}
|
|
||||||
|
|
||||||
protected override void ToSqlCase(StringBuilder caseWhen, ColumnInfo[] primarys)
|
protected override void ToSqlCase(StringBuilder caseWhen, ColumnInfo[] primarys)
|
||||||
{
|
{
|
||||||
@ -70,10 +66,7 @@ namespace FreeSql.Odbc.Dameng
|
|||||||
public override Task<int> ExecuteAffrowsAsync(CancellationToken cancellationToken = default) => base.SplitExecuteAffrowsAsync(_batchRowsLimit > 0 ? _batchRowsLimit : 200, _batchParameterLimit > 0 ? _batchParameterLimit : 999, cancellationToken);
|
public override Task<int> ExecuteAffrowsAsync(CancellationToken cancellationToken = default) => base.SplitExecuteAffrowsAsync(_batchRowsLimit > 0 ? _batchRowsLimit : 200, _batchParameterLimit > 0 ? _batchParameterLimit : 999, cancellationToken);
|
||||||
public override Task<List<T1>> ExecuteUpdatedAsync(CancellationToken cancellationToken = default) => base.SplitExecuteUpdatedAsync(_batchRowsLimit > 0 ? _batchRowsLimit : 200, _batchParameterLimit > 0 ? _batchParameterLimit : 999, cancellationToken);
|
public override Task<List<T1>> ExecuteUpdatedAsync(CancellationToken cancellationToken = default) => base.SplitExecuteUpdatedAsync(_batchRowsLimit > 0 ? _batchRowsLimit : 200, _batchParameterLimit > 0 ? _batchParameterLimit : 999, cancellationToken);
|
||||||
|
|
||||||
protected override Task<List<T1>> RawExecuteUpdatedAsync(CancellationToken cancellationToken = default)
|
protected override Task<List<T1>> RawExecuteUpdatedAsync(CancellationToken cancellationToken = default) => throw new NotImplementedException("FreeSql.Odbc.Dameng 未实现该功能");
|
||||||
{
|
|
||||||
throw new NotImplementedException();
|
|
||||||
}
|
|
||||||
#endif
|
#endif
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -3,6 +3,7 @@ using FreeSql.Internal.Model;
|
|||||||
using System;
|
using System;
|
||||||
using System.Collections.Generic;
|
using System.Collections.Generic;
|
||||||
using System.Data;
|
using System.Data;
|
||||||
|
using System.Data.Common;
|
||||||
using System.Linq;
|
using System.Linq;
|
||||||
using System.Text;
|
using System.Text;
|
||||||
using System.Threading;
|
using System.Threading;
|
||||||
@ -32,40 +33,48 @@ namespace FreeSql.Odbc.KingbaseES
|
|||||||
|
|
||||||
protected override List<T1> RawExecuteUpdated()
|
protected override List<T1> RawExecuteUpdated()
|
||||||
{
|
{
|
||||||
var sql = this.ToSql();
|
|
||||||
if (string.IsNullOrEmpty(sql)) return new List<T1>();
|
|
||||||
|
|
||||||
var sb = new StringBuilder();
|
|
||||||
sb.Append(sql).Append(" RETURNING ");
|
|
||||||
|
|
||||||
var colidx = 0;
|
|
||||||
foreach (var col in _table.Columns.Values)
|
|
||||||
{
|
|
||||||
if (colidx > 0) sb.Append(", ");
|
|
||||||
sb.Append(_commonUtils.RereadColumn(col, _commonUtils.QuoteSqlName(col.Attribute.Name))).Append(" as ").Append(_commonUtils.QuoteSqlName(col.CsName));
|
|
||||||
++colidx;
|
|
||||||
}
|
|
||||||
sql = sb.ToString();
|
|
||||||
var dbParms = _params.Concat(_paramsSource).ToArray();
|
|
||||||
var before = new Aop.CurdBeforeEventArgs(_table.Type, _table, Aop.CurdType.Update, sql, dbParms);
|
|
||||||
_orm.Aop.CurdBeforeHandler?.Invoke(this, before);
|
|
||||||
var ret = new List<T1>();
|
var ret = new List<T1>();
|
||||||
Exception exception = null;
|
DbParameter[] dbParms = null;
|
||||||
try
|
StringBuilder sbret = null;
|
||||||
|
ToSqlFetch(sb =>
|
||||||
{
|
{
|
||||||
ret = _orm.Ado.Query<T1>(_table.TypeLazy ?? _table.Type, _connection, _transaction, CommandType.Text, sql, _commandTimeout, dbParms);
|
if (dbParms == null)
|
||||||
ValidateVersionAndThrow(ret.Count, sql, dbParms);
|
{
|
||||||
}
|
dbParms = _params.Concat(_paramsSource).ToArray();
|
||||||
catch (Exception ex)
|
sbret = new StringBuilder();
|
||||||
{
|
sbret.Append(" RETURNING ");
|
||||||
exception = ex;
|
|
||||||
throw ex;
|
var colidx = 0;
|
||||||
}
|
foreach (var col in _table.Columns.Values)
|
||||||
finally
|
{
|
||||||
{
|
if (colidx > 0) sbret.Append(", ");
|
||||||
var after = new Aop.CurdAfterEventArgs(before, exception, ret);
|
sbret.Append(_commonUtils.RereadColumn(col, _commonUtils.QuoteSqlName(col.Attribute.Name))).Append(" as ").Append(_commonUtils.QuoteSqlName(col.CsName));
|
||||||
_orm.Aop.CurdAfterHandler?.Invoke(this, after);
|
++colidx;
|
||||||
}
|
}
|
||||||
|
}
|
||||||
|
var sql = sb.Append(sbret).ToString();
|
||||||
|
var before = new Aop.CurdBeforeEventArgs(_table.Type, _table, Aop.CurdType.Update, sql, dbParms);
|
||||||
|
_orm.Aop.CurdBeforeHandler?.Invoke(this, before);
|
||||||
|
|
||||||
|
Exception exception = null;
|
||||||
|
try
|
||||||
|
{
|
||||||
|
var rettmp = _orm.Ado.Query<T1>(_table.TypeLazy ?? _table.Type, _connection, _transaction, CommandType.Text, sql, _commandTimeout, dbParms);
|
||||||
|
ValidateVersionAndThrow(rettmp.Count, sql, dbParms);
|
||||||
|
ret.AddRange(rettmp);
|
||||||
|
}
|
||||||
|
catch (Exception ex)
|
||||||
|
{
|
||||||
|
exception = ex;
|
||||||
|
throw;
|
||||||
|
}
|
||||||
|
finally
|
||||||
|
{
|
||||||
|
var after = new Aop.CurdAfterEventArgs(before, exception, ret);
|
||||||
|
_orm.Aop.CurdAfterHandler?.Invoke(this, after);
|
||||||
|
}
|
||||||
|
});
|
||||||
|
sbret?.Clear();
|
||||||
return ret;
|
return ret;
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -129,40 +138,48 @@ namespace FreeSql.Odbc.KingbaseES
|
|||||||
|
|
||||||
async protected override Task<List<T1>> RawExecuteUpdatedAsync(CancellationToken cancellationToken = default)
|
async protected override Task<List<T1>> RawExecuteUpdatedAsync(CancellationToken cancellationToken = default)
|
||||||
{
|
{
|
||||||
var sql = this.ToSql();
|
|
||||||
if (string.IsNullOrEmpty(sql)) return new List<T1>();
|
|
||||||
|
|
||||||
var sb = new StringBuilder();
|
|
||||||
sb.Append(sql).Append(" RETURNING ");
|
|
||||||
|
|
||||||
var colidx = 0;
|
|
||||||
foreach (var col in _table.Columns.Values)
|
|
||||||
{
|
|
||||||
if (colidx > 0) sb.Append(", ");
|
|
||||||
sb.Append(_commonUtils.RereadColumn(col, _commonUtils.QuoteSqlName(col.Attribute.Name))).Append(" as ").Append(_commonUtils.QuoteSqlName(col.CsName));
|
|
||||||
++colidx;
|
|
||||||
}
|
|
||||||
sql = sb.ToString();
|
|
||||||
var dbParms = _params.Concat(_paramsSource).ToArray();
|
|
||||||
var before = new Aop.CurdBeforeEventArgs(_table.Type, _table, Aop.CurdType.Update, sql, dbParms);
|
|
||||||
_orm.Aop.CurdBeforeHandler?.Invoke(this, before);
|
|
||||||
var ret = new List<T1>();
|
var ret = new List<T1>();
|
||||||
Exception exception = null;
|
DbParameter[] dbParms = null;
|
||||||
try
|
StringBuilder sbret = null;
|
||||||
|
await ToSqlFetchAsync(async sb =>
|
||||||
{
|
{
|
||||||
ret = await _orm.Ado.QueryAsync<T1>(_table.TypeLazy ?? _table.Type, _connection, _transaction, CommandType.Text, sql, _commandTimeout, dbParms, cancellationToken);
|
if (dbParms == null)
|
||||||
ValidateVersionAndThrow(ret.Count, sql, dbParms);
|
{
|
||||||
}
|
dbParms = _params.Concat(_paramsSource).ToArray();
|
||||||
catch (Exception ex)
|
sbret = new StringBuilder();
|
||||||
{
|
sbret.Append(" RETURNING ");
|
||||||
exception = ex;
|
|
||||||
throw ex;
|
var colidx = 0;
|
||||||
}
|
foreach (var col in _table.Columns.Values)
|
||||||
finally
|
{
|
||||||
{
|
if (colidx > 0) sbret.Append(", ");
|
||||||
var after = new Aop.CurdAfterEventArgs(before, exception, ret);
|
sbret.Append(_commonUtils.RereadColumn(col, _commonUtils.QuoteSqlName(col.Attribute.Name))).Append(" as ").Append(_commonUtils.QuoteSqlName(col.CsName));
|
||||||
_orm.Aop.CurdAfterHandler?.Invoke(this, after);
|
++colidx;
|
||||||
}
|
}
|
||||||
|
}
|
||||||
|
var sql = sb.Append(sbret).ToString();
|
||||||
|
var before = new Aop.CurdBeforeEventArgs(_table.Type, _table, Aop.CurdType.Update, sql, dbParms);
|
||||||
|
_orm.Aop.CurdBeforeHandler?.Invoke(this, before);
|
||||||
|
|
||||||
|
Exception exception = null;
|
||||||
|
try
|
||||||
|
{
|
||||||
|
var rettmp = await _orm.Ado.QueryAsync<T1>(_table.TypeLazy ?? _table.Type, _connection, _transaction, CommandType.Text, sql, _commandTimeout, dbParms, cancellationToken);
|
||||||
|
ValidateVersionAndThrow(rettmp.Count, sql, dbParms);
|
||||||
|
ret.AddRange(rettmp);
|
||||||
|
}
|
||||||
|
catch (Exception ex)
|
||||||
|
{
|
||||||
|
exception = ex;
|
||||||
|
throw;
|
||||||
|
}
|
||||||
|
finally
|
||||||
|
{
|
||||||
|
var after = new Aop.CurdAfterEventArgs(before, exception, ret);
|
||||||
|
_orm.Aop.CurdAfterHandler?.Invoke(this, after);
|
||||||
|
}
|
||||||
|
});
|
||||||
|
sbret?.Clear();
|
||||||
return ret;
|
return ret;
|
||||||
}
|
}
|
||||||
#endif
|
#endif
|
||||||
|
@ -3,6 +3,7 @@ using FreeSql.Internal.Model;
|
|||||||
using System;
|
using System;
|
||||||
using System.Collections.Generic;
|
using System.Collections.Generic;
|
||||||
using System.Data;
|
using System.Data;
|
||||||
|
using System.Data.Common;
|
||||||
using System.Linq;
|
using System.Linq;
|
||||||
using System.Text;
|
using System.Text;
|
||||||
using System.Threading;
|
using System.Threading;
|
||||||
@ -31,40 +32,48 @@ namespace FreeSql.Odbc.MySql
|
|||||||
|
|
||||||
protected override List<T1> RawExecuteUpdated()
|
protected override List<T1> RawExecuteUpdated()
|
||||||
{
|
{
|
||||||
var sql = this.ToSql();
|
|
||||||
if (string.IsNullOrEmpty(sql)) return new List<T1>();
|
|
||||||
|
|
||||||
var sb = new StringBuilder();
|
|
||||||
sb.Append(sql).Append(" RETURNING ");
|
|
||||||
|
|
||||||
var colidx = 0;
|
|
||||||
foreach (var col in _table.Columns.Values)
|
|
||||||
{
|
|
||||||
if (colidx > 0) sb.Append(", ");
|
|
||||||
sb.Append(_commonUtils.RereadColumn(col, _commonUtils.QuoteSqlName(col.Attribute.Name))).Append(" as ").Append(_commonUtils.QuoteSqlName(col.CsName));
|
|
||||||
++colidx;
|
|
||||||
}
|
|
||||||
sql = sb.ToString();
|
|
||||||
var dbParms = _params.Concat(_paramsSource).ToArray();
|
|
||||||
var before = new Aop.CurdBeforeEventArgs(_table.Type, _table, Aop.CurdType.Update, sql, dbParms);
|
|
||||||
_orm.Aop.CurdBeforeHandler?.Invoke(this, before);
|
|
||||||
var ret = new List<T1>();
|
var ret = new List<T1>();
|
||||||
Exception exception = null;
|
DbParameter[] dbParms = null;
|
||||||
try
|
StringBuilder sbret = null;
|
||||||
|
ToSqlFetch(sb =>
|
||||||
{
|
{
|
||||||
ret = _orm.Ado.Query<T1>(_table.TypeLazy ?? _table.Type, _connection, _transaction, CommandType.Text, sql, _commandTimeout, dbParms);
|
if (dbParms == null)
|
||||||
ValidateVersionAndThrow(ret.Count, sql, dbParms);
|
{
|
||||||
}
|
dbParms = _params.Concat(_paramsSource).ToArray();
|
||||||
catch (Exception ex)
|
sbret = new StringBuilder();
|
||||||
{
|
sbret.Append(" RETURNING ");
|
||||||
exception = ex;
|
|
||||||
throw ex;
|
var colidx = 0;
|
||||||
}
|
foreach (var col in _table.Columns.Values)
|
||||||
finally
|
{
|
||||||
{
|
if (colidx > 0) sbret.Append(", ");
|
||||||
var after = new Aop.CurdAfterEventArgs(before, exception, ret);
|
sbret.Append(_commonUtils.RereadColumn(col, _commonUtils.QuoteSqlName(col.Attribute.Name))).Append(" as ").Append(_commonUtils.QuoteSqlName(col.CsName));
|
||||||
_orm.Aop.CurdAfterHandler?.Invoke(this, after);
|
++colidx;
|
||||||
}
|
}
|
||||||
|
}
|
||||||
|
var sql = sb.Append(sbret).ToString();
|
||||||
|
var before = new Aop.CurdBeforeEventArgs(_table.Type, _table, Aop.CurdType.Update, sql, dbParms);
|
||||||
|
_orm.Aop.CurdBeforeHandler?.Invoke(this, before);
|
||||||
|
|
||||||
|
Exception exception = null;
|
||||||
|
try
|
||||||
|
{
|
||||||
|
var rettmp = _orm.Ado.Query<T1>(_table.TypeLazy ?? _table.Type, _connection, _transaction, CommandType.Text, sql, _commandTimeout, dbParms);
|
||||||
|
ValidateVersionAndThrow(rettmp.Count, sql, dbParms);
|
||||||
|
ret.AddRange(rettmp);
|
||||||
|
}
|
||||||
|
catch (Exception ex)
|
||||||
|
{
|
||||||
|
exception = ex;
|
||||||
|
throw;
|
||||||
|
}
|
||||||
|
finally
|
||||||
|
{
|
||||||
|
var after = new Aop.CurdAfterEventArgs(before, exception, ret);
|
||||||
|
_orm.Aop.CurdAfterHandler?.Invoke(this, after);
|
||||||
|
}
|
||||||
|
});
|
||||||
|
sbret?.Clear();
|
||||||
return ret;
|
return ret;
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -112,40 +121,48 @@ namespace FreeSql.Odbc.MySql
|
|||||||
|
|
||||||
async protected override Task<List<T1>> RawExecuteUpdatedAsync(CancellationToken cancellationToken = default)
|
async protected override Task<List<T1>> RawExecuteUpdatedAsync(CancellationToken cancellationToken = default)
|
||||||
{
|
{
|
||||||
var sql = this.ToSql();
|
|
||||||
if (string.IsNullOrEmpty(sql)) return new List<T1>();
|
|
||||||
|
|
||||||
var sb = new StringBuilder();
|
|
||||||
sb.Append(sql).Append(" RETURNING ");
|
|
||||||
|
|
||||||
var colidx = 0;
|
|
||||||
foreach (var col in _table.Columns.Values)
|
|
||||||
{
|
|
||||||
if (colidx > 0) sb.Append(", ");
|
|
||||||
sb.Append(_commonUtils.RereadColumn(col, _commonUtils.QuoteSqlName(col.Attribute.Name))).Append(" as ").Append(_commonUtils.QuoteSqlName(col.CsName));
|
|
||||||
++colidx;
|
|
||||||
}
|
|
||||||
sql = sb.ToString();
|
|
||||||
var dbParms = _params.Concat(_paramsSource).ToArray();
|
|
||||||
var before = new Aop.CurdBeforeEventArgs(_table.Type, _table, Aop.CurdType.Update, sql, dbParms);
|
|
||||||
_orm.Aop.CurdBeforeHandler?.Invoke(this, before);
|
|
||||||
var ret = new List<T1>();
|
var ret = new List<T1>();
|
||||||
Exception exception = null;
|
DbParameter[] dbParms = null;
|
||||||
try
|
StringBuilder sbret = null;
|
||||||
|
await ToSqlFetchAsync(async sb =>
|
||||||
{
|
{
|
||||||
ret = await _orm.Ado.QueryAsync<T1>(_table.TypeLazy ?? _table.Type, _connection, _transaction, CommandType.Text, sql, _commandTimeout, dbParms, cancellationToken);
|
if (dbParms == null)
|
||||||
ValidateVersionAndThrow(ret.Count, sql, dbParms);
|
{
|
||||||
}
|
dbParms = _params.Concat(_paramsSource).ToArray();
|
||||||
catch (Exception ex)
|
sbret = new StringBuilder();
|
||||||
{
|
sbret.Append(" RETURNING ");
|
||||||
exception = ex;
|
|
||||||
throw ex;
|
var colidx = 0;
|
||||||
}
|
foreach (var col in _table.Columns.Values)
|
||||||
finally
|
{
|
||||||
{
|
if (colidx > 0) sbret.Append(", ");
|
||||||
var after = new Aop.CurdAfterEventArgs(before, exception, ret);
|
sbret.Append(_commonUtils.RereadColumn(col, _commonUtils.QuoteSqlName(col.Attribute.Name))).Append(" as ").Append(_commonUtils.QuoteSqlName(col.CsName));
|
||||||
_orm.Aop.CurdAfterHandler?.Invoke(this, after);
|
++colidx;
|
||||||
}
|
}
|
||||||
|
}
|
||||||
|
var sql = sb.Append(sbret).ToString();
|
||||||
|
var before = new Aop.CurdBeforeEventArgs(_table.Type, _table, Aop.CurdType.Update, sql, dbParms);
|
||||||
|
_orm.Aop.CurdBeforeHandler?.Invoke(this, before);
|
||||||
|
|
||||||
|
Exception exception = null;
|
||||||
|
try
|
||||||
|
{
|
||||||
|
var rettmp = await _orm.Ado.QueryAsync<T1>(_table.TypeLazy ?? _table.Type, _connection, _transaction, CommandType.Text, sql, _commandTimeout, dbParms, cancellationToken);
|
||||||
|
ValidateVersionAndThrow(rettmp.Count, sql, dbParms);
|
||||||
|
ret.AddRange(rettmp);
|
||||||
|
}
|
||||||
|
catch (Exception ex)
|
||||||
|
{
|
||||||
|
exception = ex;
|
||||||
|
throw;
|
||||||
|
}
|
||||||
|
finally
|
||||||
|
{
|
||||||
|
var after = new Aop.CurdAfterEventArgs(before, exception, ret);
|
||||||
|
_orm.Aop.CurdAfterHandler?.Invoke(this, after);
|
||||||
|
}
|
||||||
|
});
|
||||||
|
sbret?.Clear();
|
||||||
return ret;
|
return ret;
|
||||||
}
|
}
|
||||||
#endif
|
#endif
|
||||||
|
@ -22,11 +22,7 @@ namespace FreeSql.Odbc.Oracle
|
|||||||
public override int ExecuteAffrows() => base.SplitExecuteAffrows(_batchRowsLimit > 0 ? _batchRowsLimit : 200, _batchParameterLimit > 0 ? _batchParameterLimit : 999);
|
public override int ExecuteAffrows() => base.SplitExecuteAffrows(_batchRowsLimit > 0 ? _batchRowsLimit : 200, _batchParameterLimit > 0 ? _batchParameterLimit : 999);
|
||||||
public override List<T1> ExecuteUpdated() => base.SplitExecuteUpdated(_batchRowsLimit > 0 ? _batchRowsLimit : 200, _batchParameterLimit > 0 ? _batchParameterLimit : 999);
|
public override List<T1> ExecuteUpdated() => base.SplitExecuteUpdated(_batchRowsLimit > 0 ? _batchRowsLimit : 200, _batchParameterLimit > 0 ? _batchParameterLimit : 999);
|
||||||
|
|
||||||
|
protected override List<T1> RawExecuteUpdated() => throw new NotImplementedException("FreeSql.Odbc.Oracle 未实现该功能");
|
||||||
protected override List<T1> RawExecuteUpdated()
|
|
||||||
{
|
|
||||||
throw new NotImplementedException();
|
|
||||||
}
|
|
||||||
|
|
||||||
protected override void ToSqlCase(StringBuilder caseWhen, ColumnInfo[] primarys)
|
protected override void ToSqlCase(StringBuilder caseWhen, ColumnInfo[] primarys)
|
||||||
{
|
{
|
||||||
@ -72,10 +68,7 @@ namespace FreeSql.Odbc.Oracle
|
|||||||
public override Task<int> ExecuteAffrowsAsync(CancellationToken cancellationToken = default) => base.SplitExecuteAffrowsAsync(_batchRowsLimit > 0 ? _batchRowsLimit : 200, _batchParameterLimit > 0 ? _batchParameterLimit : 999, cancellationToken);
|
public override Task<int> ExecuteAffrowsAsync(CancellationToken cancellationToken = default) => base.SplitExecuteAffrowsAsync(_batchRowsLimit > 0 ? _batchRowsLimit : 200, _batchParameterLimit > 0 ? _batchParameterLimit : 999, cancellationToken);
|
||||||
public override Task<List<T1>> ExecuteUpdatedAsync(CancellationToken cancellationToken = default) => base.SplitExecuteUpdatedAsync(_batchRowsLimit > 0 ? _batchRowsLimit : 200, _batchParameterLimit > 0 ? _batchParameterLimit : 999, cancellationToken);
|
public override Task<List<T1>> ExecuteUpdatedAsync(CancellationToken cancellationToken = default) => base.SplitExecuteUpdatedAsync(_batchRowsLimit > 0 ? _batchRowsLimit : 200, _batchParameterLimit > 0 ? _batchParameterLimit : 999, cancellationToken);
|
||||||
|
|
||||||
protected override Task<List<T1>> RawExecuteUpdatedAsync(CancellationToken cancellationToken = default)
|
protected override Task<List<T1>> RawExecuteUpdatedAsync(CancellationToken cancellationToken = default) => throw new NotImplementedException("FreeSql.Odbc.Oracle 未实现该功能");
|
||||||
{
|
|
||||||
throw new NotImplementedException();
|
|
||||||
}
|
|
||||||
#endif
|
#endif
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -3,6 +3,7 @@ using FreeSql.Internal.Model;
|
|||||||
using System;
|
using System;
|
||||||
using System.Collections.Generic;
|
using System.Collections.Generic;
|
||||||
using System.Data;
|
using System.Data;
|
||||||
|
using System.Data.Common;
|
||||||
using System.Linq;
|
using System.Linq;
|
||||||
using System.Text;
|
using System.Text;
|
||||||
using System.Threading;
|
using System.Threading;
|
||||||
@ -32,40 +33,48 @@ namespace FreeSql.Odbc.PostgreSQL
|
|||||||
|
|
||||||
protected override List<T1> RawExecuteUpdated()
|
protected override List<T1> RawExecuteUpdated()
|
||||||
{
|
{
|
||||||
var sql = this.ToSql();
|
|
||||||
if (string.IsNullOrEmpty(sql)) return new List<T1>();
|
|
||||||
|
|
||||||
var sb = new StringBuilder();
|
|
||||||
sb.Append(sql).Append(" RETURNING ");
|
|
||||||
|
|
||||||
var colidx = 0;
|
|
||||||
foreach (var col in _table.Columns.Values)
|
|
||||||
{
|
|
||||||
if (colidx > 0) sb.Append(", ");
|
|
||||||
sb.Append(_commonUtils.RereadColumn(col, _commonUtils.QuoteSqlName(col.Attribute.Name))).Append(" as ").Append(_commonUtils.QuoteSqlName(col.CsName));
|
|
||||||
++colidx;
|
|
||||||
}
|
|
||||||
sql = sb.ToString();
|
|
||||||
var dbParms = _params.Concat(_paramsSource).ToArray();
|
|
||||||
var before = new Aop.CurdBeforeEventArgs(_table.Type, _table, Aop.CurdType.Update, sql, dbParms);
|
|
||||||
_orm.Aop.CurdBeforeHandler?.Invoke(this, before);
|
|
||||||
var ret = new List<T1>();
|
var ret = new List<T1>();
|
||||||
Exception exception = null;
|
DbParameter[] dbParms = null;
|
||||||
try
|
StringBuilder sbret = null;
|
||||||
|
ToSqlFetch(sb =>
|
||||||
{
|
{
|
||||||
ret = _orm.Ado.Query<T1>(_table.TypeLazy ?? _table.Type, _connection, _transaction, CommandType.Text, sql, _commandTimeout, dbParms);
|
if (dbParms == null)
|
||||||
ValidateVersionAndThrow(ret.Count, sql, dbParms);
|
{
|
||||||
}
|
dbParms = _params.Concat(_paramsSource).ToArray();
|
||||||
catch (Exception ex)
|
sbret = new StringBuilder();
|
||||||
{
|
sbret.Append(" RETURNING ");
|
||||||
exception = ex;
|
|
||||||
throw ex;
|
var colidx = 0;
|
||||||
}
|
foreach (var col in _table.Columns.Values)
|
||||||
finally
|
{
|
||||||
{
|
if (colidx > 0) sbret.Append(", ");
|
||||||
var after = new Aop.CurdAfterEventArgs(before, exception, ret);
|
sbret.Append(_commonUtils.RereadColumn(col, _commonUtils.QuoteSqlName(col.Attribute.Name))).Append(" as ").Append(_commonUtils.QuoteSqlName(col.CsName));
|
||||||
_orm.Aop.CurdAfterHandler?.Invoke(this, after);
|
++colidx;
|
||||||
}
|
}
|
||||||
|
}
|
||||||
|
var sql = sb.Append(sbret).ToString();
|
||||||
|
var before = new Aop.CurdBeforeEventArgs(_table.Type, _table, Aop.CurdType.Update, sql, dbParms);
|
||||||
|
_orm.Aop.CurdBeforeHandler?.Invoke(this, before);
|
||||||
|
|
||||||
|
Exception exception = null;
|
||||||
|
try
|
||||||
|
{
|
||||||
|
var rettmp = _orm.Ado.Query<T1>(_table.TypeLazy ?? _table.Type, _connection, _transaction, CommandType.Text, sql, _commandTimeout, dbParms);
|
||||||
|
ValidateVersionAndThrow(rettmp.Count, sql, dbParms);
|
||||||
|
ret.AddRange(rettmp);
|
||||||
|
}
|
||||||
|
catch (Exception ex)
|
||||||
|
{
|
||||||
|
exception = ex;
|
||||||
|
throw;
|
||||||
|
}
|
||||||
|
finally
|
||||||
|
{
|
||||||
|
var after = new Aop.CurdAfterEventArgs(before, exception, ret);
|
||||||
|
_orm.Aop.CurdAfterHandler?.Invoke(this, after);
|
||||||
|
}
|
||||||
|
});
|
||||||
|
sbret?.Clear();
|
||||||
return ret;
|
return ret;
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -129,40 +138,48 @@ namespace FreeSql.Odbc.PostgreSQL
|
|||||||
|
|
||||||
async protected override Task<List<T1>> RawExecuteUpdatedAsync(CancellationToken cancellationToken = default)
|
async protected override Task<List<T1>> RawExecuteUpdatedAsync(CancellationToken cancellationToken = default)
|
||||||
{
|
{
|
||||||
var sql = this.ToSql();
|
|
||||||
if (string.IsNullOrEmpty(sql)) return new List<T1>();
|
|
||||||
|
|
||||||
var sb = new StringBuilder();
|
|
||||||
sb.Append(sql).Append(" RETURNING ");
|
|
||||||
|
|
||||||
var colidx = 0;
|
|
||||||
foreach (var col in _table.Columns.Values)
|
|
||||||
{
|
|
||||||
if (colidx > 0) sb.Append(", ");
|
|
||||||
sb.Append(_commonUtils.RereadColumn(col, _commonUtils.QuoteSqlName(col.Attribute.Name))).Append(" as ").Append(_commonUtils.QuoteSqlName(col.CsName));
|
|
||||||
++colidx;
|
|
||||||
}
|
|
||||||
sql = sb.ToString();
|
|
||||||
var dbParms = _params.Concat(_paramsSource).ToArray();
|
|
||||||
var before = new Aop.CurdBeforeEventArgs(_table.Type, _table, Aop.CurdType.Update, sql, dbParms);
|
|
||||||
_orm.Aop.CurdBeforeHandler?.Invoke(this, before);
|
|
||||||
var ret = new List<T1>();
|
var ret = new List<T1>();
|
||||||
Exception exception = null;
|
DbParameter[] dbParms = null;
|
||||||
try
|
StringBuilder sbret = null;
|
||||||
|
await ToSqlFetchAsync(async sb =>
|
||||||
{
|
{
|
||||||
ret = await _orm.Ado.QueryAsync<T1>(_table.TypeLazy ?? _table.Type, _connection, _transaction, CommandType.Text, sql, _commandTimeout, dbParms, cancellationToken);
|
if (dbParms == null)
|
||||||
ValidateVersionAndThrow(ret.Count, sql, dbParms);
|
{
|
||||||
}
|
dbParms = _params.Concat(_paramsSource).ToArray();
|
||||||
catch (Exception ex)
|
sbret = new StringBuilder();
|
||||||
{
|
sbret.Append(" RETURNING ");
|
||||||
exception = ex;
|
|
||||||
throw ex;
|
var colidx = 0;
|
||||||
}
|
foreach (var col in _table.Columns.Values)
|
||||||
finally
|
{
|
||||||
{
|
if (colidx > 0) sbret.Append(", ");
|
||||||
var after = new Aop.CurdAfterEventArgs(before, exception, ret);
|
sbret.Append(_commonUtils.RereadColumn(col, _commonUtils.QuoteSqlName(col.Attribute.Name))).Append(" as ").Append(_commonUtils.QuoteSqlName(col.CsName));
|
||||||
_orm.Aop.CurdAfterHandler?.Invoke(this, after);
|
++colidx;
|
||||||
}
|
}
|
||||||
|
}
|
||||||
|
var sql = sb.Append(sbret).ToString();
|
||||||
|
var before = new Aop.CurdBeforeEventArgs(_table.Type, _table, Aop.CurdType.Update, sql, dbParms);
|
||||||
|
_orm.Aop.CurdBeforeHandler?.Invoke(this, before);
|
||||||
|
|
||||||
|
Exception exception = null;
|
||||||
|
try
|
||||||
|
{
|
||||||
|
var rettmp = await _orm.Ado.QueryAsync<T1>(_table.TypeLazy ?? _table.Type, _connection, _transaction, CommandType.Text, sql, _commandTimeout, dbParms, cancellationToken);
|
||||||
|
ValidateVersionAndThrow(rettmp.Count, sql, dbParms);
|
||||||
|
ret.AddRange(rettmp);
|
||||||
|
}
|
||||||
|
catch (Exception ex)
|
||||||
|
{
|
||||||
|
exception = ex;
|
||||||
|
throw;
|
||||||
|
}
|
||||||
|
finally
|
||||||
|
{
|
||||||
|
var after = new Aop.CurdAfterEventArgs(before, exception, ret);
|
||||||
|
_orm.Aop.CurdAfterHandler?.Invoke(this, after);
|
||||||
|
}
|
||||||
|
});
|
||||||
|
sbret?.Clear();
|
||||||
return ret;
|
return ret;
|
||||||
}
|
}
|
||||||
#endif
|
#endif
|
||||||
|
@ -3,6 +3,7 @@ using FreeSql.Internal.Model;
|
|||||||
using System;
|
using System;
|
||||||
using System.Collections.Generic;
|
using System.Collections.Generic;
|
||||||
using System.Data;
|
using System.Data;
|
||||||
|
using System.Data.Common;
|
||||||
using System.Linq;
|
using System.Linq;
|
||||||
using System.Text;
|
using System.Text;
|
||||||
using System.Threading;
|
using System.Threading;
|
||||||
@ -24,45 +25,54 @@ namespace FreeSql.Odbc.SqlServer
|
|||||||
|
|
||||||
protected override List<T1> RawExecuteUpdated()
|
protected override List<T1> RawExecuteUpdated()
|
||||||
{
|
{
|
||||||
var sql = this.ToSql();
|
|
||||||
if (string.IsNullOrEmpty(sql)) return new List<T1>();
|
|
||||||
|
|
||||||
var sb = new StringBuilder();
|
|
||||||
sb.Append(" OUTPUT ");
|
|
||||||
var colidx = 0;
|
|
||||||
foreach (var col in _table.Columns.Values)
|
|
||||||
{
|
|
||||||
if (colidx > 0) sb.Append(", ");
|
|
||||||
sb.Append(_commonUtils.RereadColumn(col, $"INSERTED.{_commonUtils.QuoteSqlName(col.Attribute.Name)}")).Append(" as ").Append(_commonUtils.QuoteSqlName(col.CsName));
|
|
||||||
++colidx;
|
|
||||||
}
|
|
||||||
|
|
||||||
var validx = sql.IndexOf(" \r\nWHERE ");
|
|
||||||
if (validx == -1) throw new ArgumentException("找不到 WHERE ");
|
|
||||||
sb.Insert(0, sql.Substring(0, validx));
|
|
||||||
sb.Append(sql.Substring(validx));
|
|
||||||
|
|
||||||
sql = sb.ToString();
|
|
||||||
var dbParms = _params.Concat(_paramsSource).ToArray();
|
|
||||||
var before = new Aop.CurdBeforeEventArgs(_table.Type, _table, Aop.CurdType.Update, sql, dbParms);
|
|
||||||
_orm.Aop.CurdBeforeHandler?.Invoke(this, before);
|
|
||||||
var ret = new List<T1>();
|
var ret = new List<T1>();
|
||||||
Exception exception = null;
|
DbParameter[] dbParms = null;
|
||||||
try
|
StringBuilder sbret = null;
|
||||||
|
ToSqlFetch(sb =>
|
||||||
{
|
{
|
||||||
ret = _orm.Ado.Query<T1>(_table.TypeLazy ?? _table.Type, _connection, _transaction, CommandType.Text, sql, _commandTimeout, dbParms);
|
if (dbParms == null)
|
||||||
ValidateVersionAndThrow(ret.Count, sql, dbParms);
|
{
|
||||||
}
|
dbParms = _params.Concat(_paramsSource).ToArray();
|
||||||
catch (Exception ex)
|
sbret = new StringBuilder();
|
||||||
{
|
sbret.Append(" OUTPUT ");
|
||||||
exception = ex;
|
|
||||||
throw ex;
|
var colidx = 0;
|
||||||
}
|
foreach (var col in _table.Columns.Values)
|
||||||
finally
|
{
|
||||||
{
|
if (colidx > 0) sbret.Append(", ");
|
||||||
var after = new Aop.CurdAfterEventArgs(before, exception, ret);
|
sbret.Append(_commonUtils.RereadColumn(col, $"INSERTED.{_commonUtils.QuoteSqlName(col.Attribute.Name)}")).Append(" as ").Append(_commonUtils.QuoteSqlName(col.CsName));
|
||||||
_orm.Aop.CurdAfterHandler?.Invoke(this, after);
|
++colidx;
|
||||||
}
|
}
|
||||||
|
}
|
||||||
|
var sql = sb.ToString();
|
||||||
|
var validx = sql.IndexOf(" WHERE ");
|
||||||
|
if (validx == -1) throw new ArgumentException("找不到 WHERE ");
|
||||||
|
sb.Clear().Append(sql.Substring(0, validx))
|
||||||
|
.Append(sbret)
|
||||||
|
.Append(sql.Substring(validx));
|
||||||
|
|
||||||
|
var before = new Aop.CurdBeforeEventArgs(_table.Type, _table, Aop.CurdType.Update, sql, dbParms);
|
||||||
|
_orm.Aop.CurdBeforeHandler?.Invoke(this, before);
|
||||||
|
|
||||||
|
Exception exception = null;
|
||||||
|
try
|
||||||
|
{
|
||||||
|
var rettmp = _orm.Ado.Query<T1>(_table.TypeLazy ?? _table.Type, _connection, _transaction, CommandType.Text, sql, _commandTimeout, dbParms);
|
||||||
|
ValidateVersionAndThrow(rettmp.Count, sql, dbParms);
|
||||||
|
ret.AddRange(rettmp);
|
||||||
|
}
|
||||||
|
catch (Exception ex)
|
||||||
|
{
|
||||||
|
exception = ex;
|
||||||
|
throw ex;
|
||||||
|
}
|
||||||
|
finally
|
||||||
|
{
|
||||||
|
var after = new Aop.CurdAfterEventArgs(before, exception, ret);
|
||||||
|
_orm.Aop.CurdAfterHandler?.Invoke(this, after);
|
||||||
|
}
|
||||||
|
});
|
||||||
|
sbret?.Clear();
|
||||||
return ret;
|
return ret;
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -108,45 +118,54 @@ namespace FreeSql.Odbc.SqlServer
|
|||||||
|
|
||||||
async protected override Task<List<T1>> RawExecuteUpdatedAsync(CancellationToken cancellationToken = default)
|
async protected override Task<List<T1>> RawExecuteUpdatedAsync(CancellationToken cancellationToken = default)
|
||||||
{
|
{
|
||||||
var sql = this.ToSql();
|
|
||||||
if (string.IsNullOrEmpty(sql)) return new List<T1>();
|
|
||||||
|
|
||||||
var sb = new StringBuilder();
|
|
||||||
sb.Append(" OUTPUT ");
|
|
||||||
var colidx = 0;
|
|
||||||
foreach (var col in _table.Columns.Values)
|
|
||||||
{
|
|
||||||
if (colidx > 0) sb.Append(", ");
|
|
||||||
sb.Append(_commonUtils.RereadColumn(col, $"INSERTED.{_commonUtils.QuoteSqlName(col.Attribute.Name)}")).Append(" as ").Append(_commonUtils.QuoteSqlName(col.CsName));
|
|
||||||
++colidx;
|
|
||||||
}
|
|
||||||
|
|
||||||
var validx = sql.IndexOf(" \r\nWHERE ");
|
|
||||||
if (validx == -1) throw new ArgumentException("找不到 WHERE ");
|
|
||||||
sb.Insert(0, sql.Substring(0, validx));
|
|
||||||
sb.Append(sql.Substring(validx));
|
|
||||||
|
|
||||||
sql = sb.ToString();
|
|
||||||
var dbParms = _params.Concat(_paramsSource).ToArray();
|
|
||||||
var before = new Aop.CurdBeforeEventArgs(_table.Type, _table, Aop.CurdType.Update, sql, dbParms);
|
|
||||||
_orm.Aop.CurdBeforeHandler?.Invoke(this, before);
|
|
||||||
var ret = new List<T1>();
|
var ret = new List<T1>();
|
||||||
Exception exception = null;
|
DbParameter[] dbParms = null;
|
||||||
try
|
StringBuilder sbret = null;
|
||||||
|
await ToSqlFetchAsync(async sb =>
|
||||||
{
|
{
|
||||||
ret = await _orm.Ado.QueryAsync<T1>(_table.TypeLazy ?? _table.Type, _connection, _transaction, CommandType.Text, sql, _commandTimeout, dbParms, cancellationToken);
|
if (dbParms == null)
|
||||||
ValidateVersionAndThrow(ret.Count, sql, dbParms);
|
{
|
||||||
}
|
dbParms = _params.Concat(_paramsSource).ToArray();
|
||||||
catch (Exception ex)
|
sbret = new StringBuilder();
|
||||||
{
|
sbret.Append(" OUTPUT ");
|
||||||
exception = ex;
|
|
||||||
throw ex;
|
var colidx = 0;
|
||||||
}
|
foreach (var col in _table.Columns.Values)
|
||||||
finally
|
{
|
||||||
{
|
if (colidx > 0) sbret.Append(", ");
|
||||||
var after = new Aop.CurdAfterEventArgs(before, exception, ret);
|
sbret.Append(_commonUtils.RereadColumn(col, $"INSERTED.{_commonUtils.QuoteSqlName(col.Attribute.Name)}")).Append(" as ").Append(_commonUtils.QuoteSqlName(col.CsName));
|
||||||
_orm.Aop.CurdAfterHandler?.Invoke(this, after);
|
++colidx;
|
||||||
}
|
}
|
||||||
|
}
|
||||||
|
var sql = sb.ToString();
|
||||||
|
var validx = sql.IndexOf(" WHERE ");
|
||||||
|
if (validx == -1) throw new ArgumentException("找不到 WHERE ");
|
||||||
|
sb.Clear().Append(sql.Substring(0, validx))
|
||||||
|
.Append(sbret)
|
||||||
|
.Append(sql.Substring(validx));
|
||||||
|
|
||||||
|
var before = new Aop.CurdBeforeEventArgs(_table.Type, _table, Aop.CurdType.Update, sql, dbParms);
|
||||||
|
_orm.Aop.CurdBeforeHandler?.Invoke(this, before);
|
||||||
|
|
||||||
|
Exception exception = null;
|
||||||
|
try
|
||||||
|
{
|
||||||
|
var rettmp = await _orm.Ado.QueryAsync<T1>(_table.TypeLazy ?? _table.Type, _connection, _transaction, CommandType.Text, sql, _commandTimeout, dbParms, cancellationToken);
|
||||||
|
ValidateVersionAndThrow(rettmp.Count, sql, dbParms);
|
||||||
|
ret.AddRange(rettmp);
|
||||||
|
}
|
||||||
|
catch (Exception ex)
|
||||||
|
{
|
||||||
|
exception = ex;
|
||||||
|
throw ex;
|
||||||
|
}
|
||||||
|
finally
|
||||||
|
{
|
||||||
|
var after = new Aop.CurdAfterEventArgs(before, exception, ret);
|
||||||
|
_orm.Aop.CurdAfterHandler?.Invoke(this, after);
|
||||||
|
}
|
||||||
|
});
|
||||||
|
sbret?.Clear();
|
||||||
return ret;
|
return ret;
|
||||||
}
|
}
|
||||||
#endif
|
#endif
|
||||||
|
@ -22,11 +22,7 @@ namespace FreeSql.Oracle.Curd
|
|||||||
public override int ExecuteAffrows() => base.SplitExecuteAffrows(_batchRowsLimit > 0 ? _batchRowsLimit : 200, _batchParameterLimit > 0 ? _batchParameterLimit : 999);
|
public override int ExecuteAffrows() => base.SplitExecuteAffrows(_batchRowsLimit > 0 ? _batchRowsLimit : 200, _batchParameterLimit > 0 ? _batchParameterLimit : 999);
|
||||||
public override List<T1> ExecuteUpdated() => base.SplitExecuteUpdated(_batchRowsLimit > 0 ? _batchRowsLimit : 200, _batchParameterLimit > 0 ? _batchParameterLimit : 999);
|
public override List<T1> ExecuteUpdated() => base.SplitExecuteUpdated(_batchRowsLimit > 0 ? _batchRowsLimit : 200, _batchParameterLimit > 0 ? _batchParameterLimit : 999);
|
||||||
|
|
||||||
|
protected override List<T1> RawExecuteUpdated() => throw new NotImplementedException("FreeSql.Provider.Oracle 未实现该功能");
|
||||||
protected override List<T1> RawExecuteUpdated()
|
|
||||||
{
|
|
||||||
throw new NotImplementedException();
|
|
||||||
}
|
|
||||||
|
|
||||||
protected override void ToSqlCase(StringBuilder caseWhen, ColumnInfo[] primarys)
|
protected override void ToSqlCase(StringBuilder caseWhen, ColumnInfo[] primarys)
|
||||||
{
|
{
|
||||||
@ -72,10 +68,7 @@ namespace FreeSql.Oracle.Curd
|
|||||||
public override Task<int> ExecuteAffrowsAsync(CancellationToken cancellationToken = default) => base.SplitExecuteAffrowsAsync(_batchRowsLimit > 0 ? _batchRowsLimit : 200, _batchParameterLimit > 0 ? _batchParameterLimit : 999, cancellationToken);
|
public override Task<int> ExecuteAffrowsAsync(CancellationToken cancellationToken = default) => base.SplitExecuteAffrowsAsync(_batchRowsLimit > 0 ? _batchRowsLimit : 200, _batchParameterLimit > 0 ? _batchParameterLimit : 999, cancellationToken);
|
||||||
public override Task<List<T1>> ExecuteUpdatedAsync(CancellationToken cancellationToken = default) => base.SplitExecuteUpdatedAsync(_batchRowsLimit > 0 ? _batchRowsLimit : 200, _batchParameterLimit > 0 ? _batchParameterLimit : 999, cancellationToken);
|
public override Task<List<T1>> ExecuteUpdatedAsync(CancellationToken cancellationToken = default) => base.SplitExecuteUpdatedAsync(_batchRowsLimit > 0 ? _batchRowsLimit : 200, _batchParameterLimit > 0 ? _batchParameterLimit : 999, cancellationToken);
|
||||||
|
|
||||||
protected override Task<List<T1>> RawExecuteUpdatedAsync(CancellationToken cancellationToken = default)
|
protected override Task<List<T1>> RawExecuteUpdatedAsync(CancellationToken cancellationToken = default) => throw new NotImplementedException("FreeSql.Provider.Oracle 未实现该功能");
|
||||||
{
|
|
||||||
throw new NotImplementedException();
|
|
||||||
}
|
|
||||||
#endif
|
#endif
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -3,6 +3,7 @@ using FreeSql.Internal.Model;
|
|||||||
using System;
|
using System;
|
||||||
using System.Collections.Generic;
|
using System.Collections.Generic;
|
||||||
using System.Data;
|
using System.Data;
|
||||||
|
using System.Data.Common;
|
||||||
using System.Linq;
|
using System.Linq;
|
||||||
using System.Text;
|
using System.Text;
|
||||||
using System.Threading;
|
using System.Threading;
|
||||||
@ -32,40 +33,48 @@ namespace FreeSql.PostgreSQL.Curd
|
|||||||
|
|
||||||
protected override List<T1> RawExecuteUpdated()
|
protected override List<T1> RawExecuteUpdated()
|
||||||
{
|
{
|
||||||
var sql = this.ToSql();
|
|
||||||
if (string.IsNullOrEmpty(sql)) return new List<T1>();
|
|
||||||
|
|
||||||
var sb = new StringBuilder();
|
|
||||||
sb.Append(sql).Append(" RETURNING ");
|
|
||||||
|
|
||||||
var colidx = 0;
|
|
||||||
foreach (var col in _table.Columns.Values)
|
|
||||||
{
|
|
||||||
if (colidx > 0) sb.Append(", ");
|
|
||||||
sb.Append(_commonUtils.RereadColumn(col, _commonUtils.QuoteSqlName(col.Attribute.Name))).Append(" as ").Append(_commonUtils.QuoteSqlName(col.CsName));
|
|
||||||
++colidx;
|
|
||||||
}
|
|
||||||
sql = sb.ToString();
|
|
||||||
var dbParms = _params.Concat(_paramsSource).ToArray();
|
|
||||||
var before = new Aop.CurdBeforeEventArgs(_table.Type, _table, Aop.CurdType.Update, sql, dbParms);
|
|
||||||
_orm.Aop.CurdBeforeHandler?.Invoke(this, before);
|
|
||||||
var ret = new List<T1>();
|
var ret = new List<T1>();
|
||||||
Exception exception = null;
|
DbParameter[] dbParms = null;
|
||||||
try
|
StringBuilder sbret = null;
|
||||||
|
ToSqlFetch(sb =>
|
||||||
{
|
{
|
||||||
ret = _orm.Ado.Query<T1>(_table.TypeLazy ?? _table.Type, _connection, _transaction, CommandType.Text, sql, _commandTimeout, dbParms);
|
if (dbParms == null)
|
||||||
ValidateVersionAndThrow(ret.Count, sql, dbParms);
|
{
|
||||||
}
|
dbParms = _params.Concat(_paramsSource).ToArray();
|
||||||
catch (Exception ex)
|
sbret = new StringBuilder();
|
||||||
{
|
sbret.Append(" RETURNING ");
|
||||||
exception = ex;
|
|
||||||
throw ex;
|
var colidx = 0;
|
||||||
}
|
foreach (var col in _table.Columns.Values)
|
||||||
finally
|
{
|
||||||
{
|
if (colidx > 0) sbret.Append(", ");
|
||||||
var after = new Aop.CurdAfterEventArgs(before, exception, ret);
|
sbret.Append(_commonUtils.RereadColumn(col, _commonUtils.QuoteSqlName(col.Attribute.Name))).Append(" as ").Append(_commonUtils.QuoteSqlName(col.CsName));
|
||||||
_orm.Aop.CurdAfterHandler?.Invoke(this, after);
|
++colidx;
|
||||||
}
|
}
|
||||||
|
}
|
||||||
|
var sql = sb.Append(sbret).ToString();
|
||||||
|
var before = new Aop.CurdBeforeEventArgs(_table.Type, _table, Aop.CurdType.Update, sql, dbParms);
|
||||||
|
_orm.Aop.CurdBeforeHandler?.Invoke(this, before);
|
||||||
|
|
||||||
|
Exception exception = null;
|
||||||
|
try
|
||||||
|
{
|
||||||
|
var rettmp = _orm.Ado.Query<T1>(_table.TypeLazy ?? _table.Type, _connection, _transaction, CommandType.Text, sql, _commandTimeout, dbParms);
|
||||||
|
ValidateVersionAndThrow(rettmp.Count, sql, dbParms);
|
||||||
|
ret.AddRange(rettmp);
|
||||||
|
}
|
||||||
|
catch (Exception ex)
|
||||||
|
{
|
||||||
|
exception = ex;
|
||||||
|
throw;
|
||||||
|
}
|
||||||
|
finally
|
||||||
|
{
|
||||||
|
var after = new Aop.CurdAfterEventArgs(before, exception, ret);
|
||||||
|
_orm.Aop.CurdAfterHandler?.Invoke(this, after);
|
||||||
|
}
|
||||||
|
});
|
||||||
|
sbret?.Clear();
|
||||||
return ret;
|
return ret;
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -129,40 +138,48 @@ namespace FreeSql.PostgreSQL.Curd
|
|||||||
|
|
||||||
async protected override Task<List<T1>> RawExecuteUpdatedAsync(CancellationToken cancellationToken = default)
|
async protected override Task<List<T1>> RawExecuteUpdatedAsync(CancellationToken cancellationToken = default)
|
||||||
{
|
{
|
||||||
var sql = this.ToSql();
|
|
||||||
if (string.IsNullOrEmpty(sql)) return new List<T1>();
|
|
||||||
|
|
||||||
var sb = new StringBuilder();
|
|
||||||
sb.Append(sql).Append(" RETURNING ");
|
|
||||||
|
|
||||||
var colidx = 0;
|
|
||||||
foreach (var col in _table.Columns.Values)
|
|
||||||
{
|
|
||||||
if (colidx > 0) sb.Append(", ");
|
|
||||||
sb.Append(_commonUtils.RereadColumn(col, _commonUtils.QuoteSqlName(col.Attribute.Name))).Append(" as ").Append(_commonUtils.QuoteSqlName(col.CsName));
|
|
||||||
++colidx;
|
|
||||||
}
|
|
||||||
sql = sb.ToString();
|
|
||||||
var dbParms = _params.Concat(_paramsSource).ToArray();
|
|
||||||
var before = new Aop.CurdBeforeEventArgs(_table.Type, _table, Aop.CurdType.Update, sql, dbParms);
|
|
||||||
_orm.Aop.CurdBeforeHandler?.Invoke(this, before);
|
|
||||||
var ret = new List<T1>();
|
var ret = new List<T1>();
|
||||||
Exception exception = null;
|
DbParameter[] dbParms = null;
|
||||||
try
|
StringBuilder sbret = null;
|
||||||
|
await ToSqlFetchAsync(async sb =>
|
||||||
{
|
{
|
||||||
ret = await _orm.Ado.QueryAsync<T1>(_table.TypeLazy ?? _table.Type, _connection, _transaction, CommandType.Text, sql, _commandTimeout, dbParms, cancellationToken);
|
if (dbParms == null)
|
||||||
ValidateVersionAndThrow(ret.Count, sql, dbParms);
|
{
|
||||||
}
|
dbParms = _params.Concat(_paramsSource).ToArray();
|
||||||
catch (Exception ex)
|
sbret = new StringBuilder();
|
||||||
{
|
sbret.Append(" RETURNING ");
|
||||||
exception = ex;
|
|
||||||
throw ex;
|
var colidx = 0;
|
||||||
}
|
foreach (var col in _table.Columns.Values)
|
||||||
finally
|
{
|
||||||
{
|
if (colidx > 0) sbret.Append(", ");
|
||||||
var after = new Aop.CurdAfterEventArgs(before, exception, ret);
|
sbret.Append(_commonUtils.RereadColumn(col, _commonUtils.QuoteSqlName(col.Attribute.Name))).Append(" as ").Append(_commonUtils.QuoteSqlName(col.CsName));
|
||||||
_orm.Aop.CurdAfterHandler?.Invoke(this, after);
|
++colidx;
|
||||||
}
|
}
|
||||||
|
}
|
||||||
|
var sql = sb.Append(sbret).ToString();
|
||||||
|
var before = new Aop.CurdBeforeEventArgs(_table.Type, _table, Aop.CurdType.Update, sql, dbParms);
|
||||||
|
_orm.Aop.CurdBeforeHandler?.Invoke(this, before);
|
||||||
|
|
||||||
|
Exception exception = null;
|
||||||
|
try
|
||||||
|
{
|
||||||
|
var rettmp = await _orm.Ado.QueryAsync<T1>(_table.TypeLazy ?? _table.Type, _connection, _transaction, CommandType.Text, sql, _commandTimeout, dbParms, cancellationToken);
|
||||||
|
ValidateVersionAndThrow(rettmp.Count, sql, dbParms);
|
||||||
|
ret.AddRange(rettmp);
|
||||||
|
}
|
||||||
|
catch (Exception ex)
|
||||||
|
{
|
||||||
|
exception = ex;
|
||||||
|
throw;
|
||||||
|
}
|
||||||
|
finally
|
||||||
|
{
|
||||||
|
var after = new Aop.CurdAfterEventArgs(before, exception, ret);
|
||||||
|
_orm.Aop.CurdAfterHandler?.Invoke(this, after);
|
||||||
|
}
|
||||||
|
});
|
||||||
|
sbret?.Clear();
|
||||||
return ret;
|
return ret;
|
||||||
}
|
}
|
||||||
#endif
|
#endif
|
||||||
|
@ -4,6 +4,7 @@ using FreeSql.Internal.Model;
|
|||||||
using System;
|
using System;
|
||||||
using System.Collections.Generic;
|
using System.Collections.Generic;
|
||||||
using System.Data;
|
using System.Data;
|
||||||
|
using System.Data.Common;
|
||||||
using System.Linq;
|
using System.Linq;
|
||||||
using System.Text;
|
using System.Text;
|
||||||
using System.Threading;
|
using System.Threading;
|
||||||
@ -33,40 +34,48 @@ namespace FreeSql.ShenTong.Curd
|
|||||||
|
|
||||||
protected override List<T1> RawExecuteUpdated()
|
protected override List<T1> RawExecuteUpdated()
|
||||||
{
|
{
|
||||||
var sql = this.ToSql();
|
|
||||||
if (string.IsNullOrEmpty(sql)) return new List<T1>();
|
|
||||||
|
|
||||||
var sb = new StringBuilder();
|
|
||||||
sb.Append(sql).Append(" RETURNING ");
|
|
||||||
|
|
||||||
var colidx = 0;
|
|
||||||
foreach (var col in _table.Columns.Values)
|
|
||||||
{
|
|
||||||
if (colidx > 0) sb.Append(", ");
|
|
||||||
sb.Append(_commonUtils.RereadColumn(col, _commonUtils.QuoteSqlName(col.Attribute.Name))).Append(" as ").Append(_commonUtils.QuoteSqlName(col.CsName));
|
|
||||||
++colidx;
|
|
||||||
}
|
|
||||||
sql = sb.ToString();
|
|
||||||
var dbParms = _params.Concat(_paramsSource).ToArray();
|
|
||||||
var before = new Aop.CurdBeforeEventArgs(_table.Type, _table, Aop.CurdType.Update, sql, dbParms);
|
|
||||||
_orm.Aop.CurdBeforeHandler?.Invoke(this, before);
|
|
||||||
var ret = new List<T1>();
|
var ret = new List<T1>();
|
||||||
Exception exception = null;
|
DbParameter[] dbParms = null;
|
||||||
try
|
StringBuilder sbret = null;
|
||||||
|
ToSqlFetch(sb =>
|
||||||
{
|
{
|
||||||
ret = _orm.Ado.Query<T1>(_table.TypeLazy ?? _table.Type, _connection, _transaction, CommandType.Text, sql, _commandTimeout, dbParms);
|
if (dbParms == null)
|
||||||
ValidateVersionAndThrow(ret.Count, sql, dbParms);
|
{
|
||||||
}
|
dbParms = _params.Concat(_paramsSource).ToArray();
|
||||||
catch (Exception ex)
|
sbret = new StringBuilder();
|
||||||
{
|
sbret.Append(" RETURNING ");
|
||||||
exception = ex;
|
|
||||||
throw ex;
|
var colidx = 0;
|
||||||
}
|
foreach (var col in _table.Columns.Values)
|
||||||
finally
|
{
|
||||||
{
|
if (colidx > 0) sbret.Append(", ");
|
||||||
var after = new Aop.CurdAfterEventArgs(before, exception, ret);
|
sbret.Append(_commonUtils.RereadColumn(col, _commonUtils.QuoteSqlName(col.Attribute.Name))).Append(" as ").Append(_commonUtils.QuoteSqlName(col.CsName));
|
||||||
_orm.Aop.CurdAfterHandler?.Invoke(this, after);
|
++colidx;
|
||||||
}
|
}
|
||||||
|
}
|
||||||
|
var sql = sb.Append(sbret).ToString();
|
||||||
|
var before = new Aop.CurdBeforeEventArgs(_table.Type, _table, Aop.CurdType.Update, sql, dbParms);
|
||||||
|
_orm.Aop.CurdBeforeHandler?.Invoke(this, before);
|
||||||
|
|
||||||
|
Exception exception = null;
|
||||||
|
try
|
||||||
|
{
|
||||||
|
var rettmp = _orm.Ado.Query<T1>(_table.TypeLazy ?? _table.Type, _connection, _transaction, CommandType.Text, sql, _commandTimeout, dbParms);
|
||||||
|
ValidateVersionAndThrow(rettmp.Count, sql, dbParms);
|
||||||
|
ret.AddRange(rettmp);
|
||||||
|
}
|
||||||
|
catch (Exception ex)
|
||||||
|
{
|
||||||
|
exception = ex;
|
||||||
|
throw;
|
||||||
|
}
|
||||||
|
finally
|
||||||
|
{
|
||||||
|
var after = new Aop.CurdAfterEventArgs(before, exception, ret);
|
||||||
|
_orm.Aop.CurdAfterHandler?.Invoke(this, after);
|
||||||
|
}
|
||||||
|
});
|
||||||
|
sbret?.Clear();
|
||||||
return ret;
|
return ret;
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -130,40 +139,48 @@ namespace FreeSql.ShenTong.Curd
|
|||||||
|
|
||||||
async protected override Task<List<T1>> RawExecuteUpdatedAsync(CancellationToken cancellationToken = default)
|
async protected override Task<List<T1>> RawExecuteUpdatedAsync(CancellationToken cancellationToken = default)
|
||||||
{
|
{
|
||||||
var sql = this.ToSql();
|
|
||||||
if (string.IsNullOrEmpty(sql)) return new List<T1>();
|
|
||||||
|
|
||||||
var sb = new StringBuilder();
|
|
||||||
sb.Append(sql).Append(" RETURNING ");
|
|
||||||
|
|
||||||
var colidx = 0;
|
|
||||||
foreach (var col in _table.Columns.Values)
|
|
||||||
{
|
|
||||||
if (colidx > 0) sb.Append(", ");
|
|
||||||
sb.Append(_commonUtils.RereadColumn(col, _commonUtils.QuoteSqlName(col.Attribute.Name))).Append(" as ").Append(_commonUtils.QuoteSqlName(col.CsName));
|
|
||||||
++colidx;
|
|
||||||
}
|
|
||||||
sql = sb.ToString();
|
|
||||||
var dbParms = _params.Concat(_paramsSource).ToArray();
|
|
||||||
var before = new Aop.CurdBeforeEventArgs(_table.Type, _table, Aop.CurdType.Update, sql, dbParms);
|
|
||||||
_orm.Aop.CurdBeforeHandler?.Invoke(this, before);
|
|
||||||
var ret = new List<T1>();
|
var ret = new List<T1>();
|
||||||
Exception exception = null;
|
DbParameter[] dbParms = null;
|
||||||
try
|
StringBuilder sbret = null;
|
||||||
|
await ToSqlFetchAsync(async sb =>
|
||||||
{
|
{
|
||||||
ret = await _orm.Ado.QueryAsync<T1>(_table.TypeLazy ?? _table.Type, _connection, _transaction, CommandType.Text, sql, _commandTimeout, dbParms, cancellationToken);
|
if (dbParms == null)
|
||||||
ValidateVersionAndThrow(ret.Count, sql, dbParms);
|
{
|
||||||
}
|
dbParms = _params.Concat(_paramsSource).ToArray();
|
||||||
catch (Exception ex)
|
sbret = new StringBuilder();
|
||||||
{
|
sbret.Append(" RETURNING ");
|
||||||
exception = ex;
|
|
||||||
throw ex;
|
var colidx = 0;
|
||||||
}
|
foreach (var col in _table.Columns.Values)
|
||||||
finally
|
{
|
||||||
{
|
if (colidx > 0) sbret.Append(", ");
|
||||||
var after = new Aop.CurdAfterEventArgs(before, exception, ret);
|
sbret.Append(_commonUtils.RereadColumn(col, _commonUtils.QuoteSqlName(col.Attribute.Name))).Append(" as ").Append(_commonUtils.QuoteSqlName(col.CsName));
|
||||||
_orm.Aop.CurdAfterHandler?.Invoke(this, after);
|
++colidx;
|
||||||
}
|
}
|
||||||
|
}
|
||||||
|
var sql = sb.Append(sbret).ToString();
|
||||||
|
var before = new Aop.CurdBeforeEventArgs(_table.Type, _table, Aop.CurdType.Update, sql, dbParms);
|
||||||
|
_orm.Aop.CurdBeforeHandler?.Invoke(this, before);
|
||||||
|
|
||||||
|
Exception exception = null;
|
||||||
|
try
|
||||||
|
{
|
||||||
|
var rettmp = await _orm.Ado.QueryAsync<T1>(_table.TypeLazy ?? _table.Type, _connection, _transaction, CommandType.Text, sql, _commandTimeout, dbParms, cancellationToken);
|
||||||
|
ValidateVersionAndThrow(rettmp.Count, sql, dbParms);
|
||||||
|
ret.AddRange(rettmp);
|
||||||
|
}
|
||||||
|
catch (Exception ex)
|
||||||
|
{
|
||||||
|
exception = ex;
|
||||||
|
throw;
|
||||||
|
}
|
||||||
|
finally
|
||||||
|
{
|
||||||
|
var after = new Aop.CurdAfterEventArgs(before, exception, ret);
|
||||||
|
_orm.Aop.CurdAfterHandler?.Invoke(this, after);
|
||||||
|
}
|
||||||
|
});
|
||||||
|
sbret?.Clear();
|
||||||
return ret;
|
return ret;
|
||||||
}
|
}
|
||||||
#endif
|
#endif
|
||||||
|
@ -3,6 +3,7 @@ using FreeSql.Internal.Model;
|
|||||||
using System;
|
using System;
|
||||||
using System.Collections.Generic;
|
using System.Collections.Generic;
|
||||||
using System.Data;
|
using System.Data;
|
||||||
|
using System.Data.Common;
|
||||||
using System.Linq;
|
using System.Linq;
|
||||||
using System.Text;
|
using System.Text;
|
||||||
using System.Threading;
|
using System.Threading;
|
||||||
@ -25,45 +26,54 @@ namespace FreeSql.SqlServer.Curd
|
|||||||
|
|
||||||
protected override List<T1> RawExecuteUpdated()
|
protected override List<T1> RawExecuteUpdated()
|
||||||
{
|
{
|
||||||
var sql = this.ToSql();
|
|
||||||
if (string.IsNullOrEmpty(sql)) return new List<T1>();
|
|
||||||
|
|
||||||
var sb = new StringBuilder();
|
|
||||||
sb.Append(" OUTPUT ");
|
|
||||||
var colidx = 0;
|
|
||||||
foreach (var col in _table.Columns.Values)
|
|
||||||
{
|
|
||||||
if (colidx > 0) sb.Append(", ");
|
|
||||||
sb.Append(_commonUtils.RereadColumn(col, $"INSERTED.{_commonUtils.QuoteSqlName(col.Attribute.Name)}")).Append(" as ").Append(_commonUtils.QuoteSqlName(col.CsName));
|
|
||||||
++colidx;
|
|
||||||
}
|
|
||||||
|
|
||||||
var validx = sql.IndexOf(" \r\nWHERE ");
|
|
||||||
if (validx == -1) throw new ArgumentException("找不到 WHERE ");
|
|
||||||
sb.Insert(0, sql.Substring(0, validx));
|
|
||||||
sb.Append(sql.Substring(validx));
|
|
||||||
|
|
||||||
sql = sb.ToString();
|
|
||||||
var dbParms = _params.Concat(_paramsSource).ToArray();
|
|
||||||
var before = new Aop.CurdBeforeEventArgs(_table.Type, _table, Aop.CurdType.Update, sql, dbParms);
|
|
||||||
_orm.Aop.CurdBeforeHandler?.Invoke(this, before);
|
|
||||||
var ret = new List<T1>();
|
var ret = new List<T1>();
|
||||||
Exception exception = null;
|
DbParameter[] dbParms = null;
|
||||||
try
|
StringBuilder sbret = null;
|
||||||
|
ToSqlFetch(sb =>
|
||||||
{
|
{
|
||||||
ret = _orm.Ado.Query<T1>(_table.TypeLazy ?? _table.Type, _connection, _transaction, CommandType.Text, sql, _commandTimeout, dbParms);
|
if (dbParms == null)
|
||||||
ValidateVersionAndThrow(ret.Count, sql, dbParms);
|
{
|
||||||
}
|
dbParms = _params.Concat(_paramsSource).ToArray();
|
||||||
catch (Exception ex)
|
sbret = new StringBuilder();
|
||||||
{
|
sbret.Append(" OUTPUT ");
|
||||||
exception = ex;
|
|
||||||
throw;
|
var colidx = 0;
|
||||||
}
|
foreach (var col in _table.Columns.Values)
|
||||||
finally
|
{
|
||||||
{
|
if (colidx > 0) sbret.Append(", ");
|
||||||
var after = new Aop.CurdAfterEventArgs(before, exception, ret);
|
sbret.Append(_commonUtils.RereadColumn(col, $"INSERTED.{_commonUtils.QuoteSqlName(col.Attribute.Name)}")).Append(" as ").Append(_commonUtils.QuoteSqlName(col.CsName));
|
||||||
_orm.Aop.CurdAfterHandler?.Invoke(this, after);
|
++colidx;
|
||||||
}
|
}
|
||||||
|
}
|
||||||
|
var sql = sb.ToString();
|
||||||
|
var validx = sql.IndexOf(" WHERE ");
|
||||||
|
if (validx == -1) throw new ArgumentException("找不到 WHERE ");
|
||||||
|
sb.Clear().Append(sql.Substring(0, validx))
|
||||||
|
.Append(sbret)
|
||||||
|
.Append(sql.Substring(validx));
|
||||||
|
|
||||||
|
var before = new Aop.CurdBeforeEventArgs(_table.Type, _table, Aop.CurdType.Update, sql, dbParms);
|
||||||
|
_orm.Aop.CurdBeforeHandler?.Invoke(this, before);
|
||||||
|
|
||||||
|
Exception exception = null;
|
||||||
|
try
|
||||||
|
{
|
||||||
|
var rettmp = _orm.Ado.Query<T1>(_table.TypeLazy ?? _table.Type, _connection, _transaction, CommandType.Text, sql, _commandTimeout, dbParms);
|
||||||
|
ValidateVersionAndThrow(rettmp.Count, sql, dbParms);
|
||||||
|
ret.AddRange(rettmp);
|
||||||
|
}
|
||||||
|
catch (Exception ex)
|
||||||
|
{
|
||||||
|
exception = ex;
|
||||||
|
throw ex;
|
||||||
|
}
|
||||||
|
finally
|
||||||
|
{
|
||||||
|
var after = new Aop.CurdAfterEventArgs(before, exception, ret);
|
||||||
|
_orm.Aop.CurdAfterHandler?.Invoke(this, after);
|
||||||
|
}
|
||||||
|
});
|
||||||
|
sbret?.Clear();
|
||||||
return ret;
|
return ret;
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -109,45 +119,54 @@ namespace FreeSql.SqlServer.Curd
|
|||||||
|
|
||||||
async protected override Task<List<T1>> RawExecuteUpdatedAsync(CancellationToken cancellationToken = default)
|
async protected override Task<List<T1>> RawExecuteUpdatedAsync(CancellationToken cancellationToken = default)
|
||||||
{
|
{
|
||||||
var sql = this.ToSql();
|
|
||||||
if (string.IsNullOrEmpty(sql)) return new List<T1>();
|
|
||||||
|
|
||||||
var sb = new StringBuilder();
|
|
||||||
sb.Append(" OUTPUT ");
|
|
||||||
var colidx = 0;
|
|
||||||
foreach (var col in _table.Columns.Values)
|
|
||||||
{
|
|
||||||
if (colidx > 0) sb.Append(", ");
|
|
||||||
sb.Append(_commonUtils.RereadColumn(col, $"INSERTED.{_commonUtils.QuoteSqlName(col.Attribute.Name)}")).Append(" as ").Append(_commonUtils.QuoteSqlName(col.CsName));
|
|
||||||
++colidx;
|
|
||||||
}
|
|
||||||
|
|
||||||
var validx = sql.IndexOf(" \r\nWHERE ");
|
|
||||||
if (validx == -1) throw new ArgumentException("找不到 WHERE ");
|
|
||||||
sb.Insert(0, sql.Substring(0, validx));
|
|
||||||
sb.Append(sql.Substring(validx));
|
|
||||||
|
|
||||||
sql = sb.ToString();
|
|
||||||
var dbParms = _params.Concat(_paramsSource).ToArray();
|
|
||||||
var before = new Aop.CurdBeforeEventArgs(_table.Type, _table, Aop.CurdType.Update, sql, dbParms);
|
|
||||||
_orm.Aop.CurdBeforeHandler?.Invoke(this, before);
|
|
||||||
var ret = new List<T1>();
|
var ret = new List<T1>();
|
||||||
Exception exception = null;
|
DbParameter[] dbParms = null;
|
||||||
try
|
StringBuilder sbret = null;
|
||||||
|
await ToSqlFetchAsync(async sb =>
|
||||||
{
|
{
|
||||||
ret = await _orm.Ado.QueryAsync<T1>(_table.TypeLazy ?? _table.Type, _connection, _transaction, CommandType.Text, sql, _commandTimeout, dbParms, cancellationToken);
|
if (dbParms == null)
|
||||||
ValidateVersionAndThrow(ret.Count, sql, dbParms);
|
{
|
||||||
}
|
dbParms = _params.Concat(_paramsSource).ToArray();
|
||||||
catch (Exception ex)
|
sbret = new StringBuilder();
|
||||||
{
|
sbret.Append(" OUTPUT ");
|
||||||
exception = ex;
|
|
||||||
throw;
|
var colidx = 0;
|
||||||
}
|
foreach (var col in _table.Columns.Values)
|
||||||
finally
|
{
|
||||||
{
|
if (colidx > 0) sbret.Append(", ");
|
||||||
var after = new Aop.CurdAfterEventArgs(before, exception, ret);
|
sbret.Append(_commonUtils.RereadColumn(col, $"INSERTED.{_commonUtils.QuoteSqlName(col.Attribute.Name)}")).Append(" as ").Append(_commonUtils.QuoteSqlName(col.CsName));
|
||||||
_orm.Aop.CurdAfterHandler?.Invoke(this, after);
|
++colidx;
|
||||||
}
|
}
|
||||||
|
}
|
||||||
|
var sql = sb.ToString();
|
||||||
|
var validx = sql.IndexOf(" WHERE ");
|
||||||
|
if (validx == -1) throw new ArgumentException("找不到 WHERE ");
|
||||||
|
sb.Clear().Append(sql.Substring(0, validx))
|
||||||
|
.Append(sbret)
|
||||||
|
.Append(sql.Substring(validx));
|
||||||
|
|
||||||
|
var before = new Aop.CurdBeforeEventArgs(_table.Type, _table, Aop.CurdType.Update, sql, dbParms);
|
||||||
|
_orm.Aop.CurdBeforeHandler?.Invoke(this, before);
|
||||||
|
|
||||||
|
Exception exception = null;
|
||||||
|
try
|
||||||
|
{
|
||||||
|
var rettmp = await _orm.Ado.QueryAsync<T1>(_table.TypeLazy ?? _table.Type, _connection, _transaction, CommandType.Text, sql, _commandTimeout, dbParms, cancellationToken);
|
||||||
|
ValidateVersionAndThrow(rettmp.Count, sql, dbParms);
|
||||||
|
ret.AddRange(rettmp);
|
||||||
|
}
|
||||||
|
catch (Exception ex)
|
||||||
|
{
|
||||||
|
exception = ex;
|
||||||
|
throw ex;
|
||||||
|
}
|
||||||
|
finally
|
||||||
|
{
|
||||||
|
var after = new Aop.CurdAfterEventArgs(before, exception, ret);
|
||||||
|
_orm.Aop.CurdAfterHandler?.Invoke(this, after);
|
||||||
|
}
|
||||||
|
});
|
||||||
|
sbret?.Clear();
|
||||||
return ret;
|
return ret;
|
||||||
}
|
}
|
||||||
#endif
|
#endif
|
||||||
|
@ -22,11 +22,7 @@ namespace FreeSql.Sqlite.Curd
|
|||||||
public override int ExecuteAffrows() => base.SplitExecuteAffrows(_batchRowsLimit > 0 ? _batchRowsLimit : 200, _batchParameterLimit > 0 ? _batchParameterLimit : 999);
|
public override int ExecuteAffrows() => base.SplitExecuteAffrows(_batchRowsLimit > 0 ? _batchRowsLimit : 200, _batchParameterLimit > 0 ? _batchParameterLimit : 999);
|
||||||
public override List<T1> ExecuteUpdated() => base.SplitExecuteUpdated(_batchRowsLimit > 0 ? _batchRowsLimit : 200, _batchParameterLimit > 0 ? _batchParameterLimit : 999);
|
public override List<T1> ExecuteUpdated() => base.SplitExecuteUpdated(_batchRowsLimit > 0 ? _batchRowsLimit : 200, _batchParameterLimit > 0 ? _batchParameterLimit : 999);
|
||||||
|
|
||||||
|
protected override List<T1> RawExecuteUpdated() => throw new NotImplementedException("FreeSql.Provider.Sqlite 未实现该功能");
|
||||||
protected override List<T1> RawExecuteUpdated()
|
|
||||||
{
|
|
||||||
throw new NotImplementedException();
|
|
||||||
}
|
|
||||||
|
|
||||||
protected override void ToSqlCase(StringBuilder caseWhen, ColumnInfo[] primarys)
|
protected override void ToSqlCase(StringBuilder caseWhen, ColumnInfo[] primarys)
|
||||||
{
|
{
|
||||||
@ -70,10 +66,7 @@ namespace FreeSql.Sqlite.Curd
|
|||||||
public override Task<int> ExecuteAffrowsAsync(CancellationToken cancellationToken = default) => base.SplitExecuteAffrowsAsync(_batchRowsLimit > 0 ? _batchRowsLimit : 200, _batchParameterLimit > 0 ? _batchParameterLimit : 999, cancellationToken);
|
public override Task<int> ExecuteAffrowsAsync(CancellationToken cancellationToken = default) => base.SplitExecuteAffrowsAsync(_batchRowsLimit > 0 ? _batchRowsLimit : 200, _batchParameterLimit > 0 ? _batchParameterLimit : 999, cancellationToken);
|
||||||
public override Task<List<T1>> ExecuteUpdatedAsync(CancellationToken cancellationToken = default) => base.SplitExecuteUpdatedAsync(_batchRowsLimit > 0 ? _batchRowsLimit : 200, _batchParameterLimit > 0 ? _batchParameterLimit : 999, cancellationToken);
|
public override Task<List<T1>> ExecuteUpdatedAsync(CancellationToken cancellationToken = default) => base.SplitExecuteUpdatedAsync(_batchRowsLimit > 0 ? _batchRowsLimit : 200, _batchParameterLimit > 0 ? _batchParameterLimit : 999, cancellationToken);
|
||||||
|
|
||||||
protected override Task<List<T1>> RawExecuteUpdatedAsync(CancellationToken cancellationToken = default)
|
protected override Task<List<T1>> RawExecuteUpdatedAsync(CancellationToken cancellationToken = default) => throw new NotImplementedException("FreeSql.Provider.Sqlite 未实现该功能");
|
||||||
{
|
|
||||||
throw new NotImplementedException();
|
|
||||||
}
|
|
||||||
#endif
|
#endif
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
Loading…
x
Reference in New Issue
Block a user