- 修复 ISelect.AsTable 后 .ToUpdate/ToDelete 无效的 bug;#815

This commit is contained in:
2881099 2021-07-06 00:26:16 +08:00
parent 0aa389c118
commit def3ebdeff
5 changed files with 74 additions and 0 deletions

View File

@ -1688,6 +1688,9 @@ WHERE (((to_char(a.""ID"")) in (SELECT b.""TITLE""
Assert.Equal(5, g.dameng.Select<ToUpd1Pk>().Count()); Assert.Equal(5, g.dameng.Select<ToUpd1Pk>().Count());
Assert.Equal(5, g.dameng.Select<ToUpd1Pk>().Where(a => a.name.StartsWith("nick")).Count()); Assert.Equal(5, g.dameng.Select<ToUpd1Pk>().Where(a => a.name.StartsWith("nick")).Count());
var toupdateSql1 = g.dameng.Select<ToUpd1Pk>().Where(a => a.name.StartsWith("name")).ToUpdate().Set(a => a.name, "nick?").ToSql();
var toupdateSql2 = g.dameng.Select<ToUpd1Pk>().AsTable((_, old) => "toupd1pk_test").Where(a => a.name.StartsWith("name")).ToUpdate().Set(a => a.name, "nick?").ToSql();
g.dameng.Select<ToUpd2Pk>().ToDelete().ExecuteAffrows(); g.dameng.Select<ToUpd2Pk>().ToDelete().ExecuteAffrows();
Assert.Equal(0, g.dameng.Select<ToUpd2Pk>().Count()); Assert.Equal(0, g.dameng.Select<ToUpd2Pk>().Count());
g.dameng.Insert(new[] { g.dameng.Insert(new[] {

View File

@ -555,6 +555,26 @@
导航属性 导航属性
</summary> </summary>
</member> </member>
<member name="F:FreeSql.Tests.UnitTest5.SystemUserType.Unknow">
<summary>
未知的权限
</summary>
</member>
<member name="F:FreeSql.Tests.UnitTest5.SystemUserType.SuperAdmin">
<summary>
超级管理员
</summary>
</member>
<member name="F:FreeSql.Tests.UnitTest5.SystemUserType.TenantAdmin">
<summary>
机构管理员
</summary>
</member>
<member name="F:FreeSql.Tests.UnitTest5.SystemUserType.StroeAdmin">
<summary>
门店管理员
</summary>
</member>
<member name="P:AME.Helpers.AppSettingII.SettingName"> <member name="P:AME.Helpers.AppSettingII.SettingName">
<summary> <summary>
配置名称 配置名称

View File

@ -172,6 +172,10 @@ namespace FreeSql.Tests.Sqlite
this.name = name; this.name = name;
} }
} }
class TestDto3
{
public string title { get; set; } //这是join表的属性
}
class TestDtoLeftJoin class TestDtoLeftJoin
{ {
[Column(IsPrimary = true)] [Column(IsPrimary = true)]
@ -208,6 +212,8 @@ namespace FreeSql.Tests.Sqlite
var testDto213 = select.Limit(10).ToList(a => new TestDto2 { }); var testDto213 = select.Limit(10).ToList(a => new TestDto2 { });
var testDto214 = select.Limit(10).ToList(a => new TestDto2() { }); var testDto214 = select.Limit(10).ToList(a => new TestDto2() { });
var testDto215 = select.Limit(10).ToList<TestDto2>(); var testDto215 = select.Limit(10).ToList<TestDto2>();
var testDto216 = select.Limit(10).ToList<TestDto3>();
var testDto2211 = select.LeftJoin(a => a.Type.Guid == a.TypeGuid).Limit(10).ToList(a => new TestDto2(a.Id, a.Title)); var testDto2211 = select.LeftJoin(a => a.Type.Guid == a.TypeGuid).Limit(10).ToList(a => new TestDto2(a.Id, a.Title));
var testDto2222 = select.LeftJoin(a => a.Type.Guid == a.TypeGuid).Limit(10).ToList(a => new TestDto2()); var testDto2222 = select.LeftJoin(a => a.Type.Guid == a.TypeGuid).Limit(10).ToList(a => new TestDto2());

View File

@ -2,6 +2,7 @@
using FreeSql.DataAnnotations; using FreeSql.DataAnnotations;
using FreeSql.Internal; using FreeSql.Internal;
using FreeSql.Internal.CommonProvider; using FreeSql.Internal.CommonProvider;
using MySql.Data.MySqlClient;
using System; using System;
using System.Collections.Generic; using System.Collections.Generic;
using System.Diagnostics; using System.Diagnostics;
@ -33,6 +34,46 @@ namespace FreeSql.Tests
.ToSql(); .ToSql();
Assert.Equal(@"UPDATE `ProductStockBak` SET `NotTaxTotalCostPrice` = 47.844297 * `CurrentQty`, `NotTaxCostPrice` = 47.844297 Assert.Equal(@"UPDATE `ProductStockBak` SET `NotTaxTotalCostPrice` = 47.844297 * `CurrentQty`, `NotTaxCostPrice` = 47.844297
WHERE (`ProductId` = '00000000-0000-0000-0000-000000000000' AND `MerchantId` = '00000000-0000-0000-0000-000000000000')", sql); WHERE (`ProductId` = '00000000-0000-0000-0000-000000000000' AND `MerchantId` = '00000000-0000-0000-0000-000000000000')", sql);
//fsql.Aop.CommandBefore += (_, e) =>
//{
// foreach (MySqlParameter cp in e.Command.Parameters)
// if (cp.MySqlDbType == MySqlDbType.Enum) cp.MySqlDbType = MySqlDbType.Int32;
//};
var aaa = fsql.Ado.QuerySingle<string>("select ?et", new Dictionary<string, object>
{
["et"] = SystemUserType.StroeAdmin
});
using (var conn = fsql.Ado.MasterPool.Get())
{
var cmd = conn.Value.CreateCommand();
cmd.CommandText = "select ?et";
cmd.Parameters.Add(new MySqlParameter("et", SystemUserType.StroeAdmin));
var aaa2 = cmd.ExecuteScalar();
}
}
public enum SystemUserType
{
/// <summary>
/// 未知的权限
/// </summary>
Unknow = 0,
/// <summary>
/// 超级管理员
/// </summary>
SuperAdmin = 1,
/// <summary>
/// 机构管理员
/// </summary>
TenantAdmin = 2,
/// <summary>
/// 门店管理员
/// </summary>
StroeAdmin = 3
} }
public partial class ProductStockBak public partial class ProductStockBak
{ {

View File

@ -393,6 +393,8 @@ namespace FreeSql.Internal.CommonProvider
if (_params.Any()) del._params = new List<DbParameter>(_params.ToArray()); if (_params.Any()) del._params = new List<DbParameter>(_params.ToArray());
if (_whereGlobalFilter.Any()) del._whereGlobalFilter = new List<GlobalFilter.Item>(_whereGlobalFilter.ToArray()); if (_whereGlobalFilter.Any()) del._whereGlobalFilter = new List<GlobalFilter.Item>(_whereGlobalFilter.ToArray());
del.WithConnection(_connection).WithTransaction(_transaction).CommandTimeout(_commandTimeout); del.WithConnection(_connection).WithTransaction(_transaction).CommandTimeout(_commandTimeout);
var trytbname = "";
del.AsTable(old => GetTableRuleUnions().FirstOrDefault()?.TryGetValue(_tables[0].Table.Type, out trytbname) == true ? trytbname : null);
switch (_orm.Ado.DataType) switch (_orm.Ado.DataType)
{ {
case DataType.Dameng: case DataType.Dameng:
@ -421,6 +423,8 @@ namespace FreeSql.Internal.CommonProvider
if (_params.Any()) upd._params = new List<DbParameter>(_params.ToArray()); if (_params.Any()) upd._params = new List<DbParameter>(_params.ToArray());
if (_whereGlobalFilter.Any()) upd._whereGlobalFilter = new List<GlobalFilter.Item>(_whereGlobalFilter.ToArray()); if (_whereGlobalFilter.Any()) upd._whereGlobalFilter = new List<GlobalFilter.Item>(_whereGlobalFilter.ToArray());
upd.WithConnection(_connection).WithTransaction(_transaction).CommandTimeout(_commandTimeout); upd.WithConnection(_connection).WithTransaction(_transaction).CommandTimeout(_commandTimeout);
var trytbname = "";
upd.AsTable(old => GetTableRuleUnions().FirstOrDefault()?.TryGetValue(_tables[0].Table.Type, out trytbname) == true ? trytbname : null);
switch (_orm.Ado.DataType) switch (_orm.Ado.DataType)
{ {
case DataType.Dameng: case DataType.Dameng: