- 修复 3.2.696 自动分表 bug;#1527 e79860164d5d12e4f7df747f0e29503dff301cb7

This commit is contained in:
2881099 2023-06-06 11:23:25 +08:00
parent 3c47aaf8fe
commit 6ab7766d74
4 changed files with 203 additions and 98 deletions

View File

@ -601,113 +601,21 @@ namespace base_entity
BaseEntity.Initialization(fsql, () => _asyncUow.Value); BaseEntity.Initialization(fsql, () => _asyncUow.Value);
#endregion #endregion
var iouSetSql01 = fsql.InsertOrUpdate<User1>()
.SetSource(Enumerable.Range(0, 5).Select(a => new User1 { Id = Guid.NewGuid(), Nickname = $"nickname{a}", Username = $"username{a}", Description = $"desc{a}" }).ToArray())
.UpdateSet((a, b) => a.Sort == b.Sort + 10)
.UpdateSet((a, b) => a.Nickname == "xxx")
.ToSql();
var sqlastable1 = fsql.Select<CurrentDetail>(101).AsTable((t, o) => "current_detail_230501").ToSql(); var sqlastable1 = fsql.Select<CurrentDetail>(101).AsTable((t, o) => "current_detail_230501").ToSql();
var sqlastable2 = fsql.Update<CurrentDetail>(101).AsTable("current_detail_230501").Set(t => t.StatuId, 1).ToSql(); var sqlastable2 = fsql.Update<CurrentDetail>(101).AsTable("current_detail_230501").Set(t => t.StatuId, 1).ToSql();
var sqlastable3 = fsql.Delete<CurrentDetail>(101).AsTable("current_detail_230501").ToSql(); var sqlastable3 = fsql.Delete<CurrentDetail>(101).AsTable("current_detail_230501").ToSql();
fsql.Delete<OracleLongRaw1>().Where("1=1").ExecuteAffrows();
var longRawData = Encoding.UTF8.GetBytes(string.Join(",", Enumerable.Range(1, 2000).Select(a => "中国人")));
fsql.Insert(new OracleLongRaw1 { data = longRawData }).NoneParameter(false).ExecuteAffrows();
fsql.Insert(new OracleLongRaw1 { data = longRawData }).NoneParameter(true).ExecuteAffrows();
var longRaw1 = fsql.Select<OracleLongRaw1>().ToList();
MarketingRestrictions restrictions = new MarketingRestrictions();
if (restrictions.Id == Guid.Empty)
{
restrictions.CreatedBy = 100;
}
else
{
restrictions.UpdatedBy = 100;
restrictions.UpdatedTime = DateTime.Now;
}
int ret = fsql.InsertOrUpdate<MarketingRestrictions>()
.SetSource(restrictions)
.UpdateColumns(r => new {
r.Describe,
r.IsLimitUsePoints,
r.Status,
r.StartTime,
r.EndTime,
r.UpdatedBy,
r.UpdatedTime
})
.ExecuteAffrows();
var query2222 = fsql.Select<Student2222>()
.AsTable((t, o) => string.Format(o, "hash2"))
.Where(p => p.Name.Contains("search"))
.GroupBy(a => new { a.ClassId })
.WithTempQuery(a => a.Key);
var sql11111 = fsql.Select<Class1111>()
.AsTable((t, o) => string.Format(o, "hash1"))
.Where(s => query2222
.ToList(p => p.ClassId)
.Contains(s.Id))
.ToSql(s => new
{
s.Id,
s.Name,
});
var isusers01 = fsql.Select<Achievement>()
.Where(e => e.Property("项目执行情况") == "结题")
.GroupBy(e => new { ProjectLevel = e.Property("项目级别") })
.ToSql(e => new
{
e.Key.ProjectLevel,
Test = e.Value.Group.Property("批准经费总额(万元)"),
});
isusers01 = fsql.Select<Achievement>()
.Where(e => e.Property("项目执行情况") == "结题")
.GroupBy(e => new { ProjectLevel = e.Property("项目级别") })
.WithTempQuery(e => new
{
e.Key.ProjectLevel,
Test = e.Value.Group.Property("批准经费总额(万元)"),
})
.ToSql();
var bulkUsers = new[] {
new IdentityUser1 { Nickname = "nickname11", Username = "username11" },
new IdentityUser1 { Nickname = "nickname12", Username = "username12" },
new IdentityUser1 { Nickname = "nickname13", Username = "username13" },
new IdentityUser1 { Nickname = "nickname21", Username = "username21" },
new IdentityUser1 { Nickname = "nickname22", Username = "username22" },
new IdentityUser1 { Nickname = "nickname23", Username = "username23" }
};
fsql.Insert(bulkUsers).NoneParameter().ExecuteAffrows();
fsql.Insert(bulkUsers).IgnoreInsertValueSql(a => a.Nickname).NoneParameter().ExecuteAffrows();
bulkUsers = fsql.Select<IdentityUser1>().OrderByDescending(a => a.Id).Limit(3).ToList().ToArray();
bulkUsers[0].Nickname += "_bulkupdate";
bulkUsers[1].Nickname += "_bulkupdate";
bulkUsers[2].Nickname += "_bulkupdate";
fsql.Update<IdentityUser1>().SetSource(bulkUsers).ExecuteSqlBulkCopy();
var objtsql1 = fsql.Select<object>().WithSql("select * from user1").ToList();
var objtsql2 = fsql.Select<object>().WithSql("select * from user1").ToList<User1>();
var astsql = fsql.Select<AsTableLog, Sys_owner>() var astsql = fsql.Select<AsTableLog, Sys_owner>()
.InnerJoin((a, b) => a.id == b.Id) .InnerJoin((a, b) => a.id == b.Id)
.OrderBy((a,b) => a.createtime) .OrderBy((a, b) => a.createtime)
.ToSql(); .ToSql();
//var table = fsql.CodeFirst.GetTableByEntity(typeof(AsTableLog)); //var table = fsql.CodeFirst.GetTableByEntity(typeof(AsTableLog));
//table.SetAsTable(new ModAsTableImpl(fsql), table.ColumnsByCs[nameof(AsTableLog.click)]); //table.SetAsTable(new ModAsTableImpl(fsql), table.ColumnsByCs[nameof(AsTableLog.click)]);
var testitems = new[] var testitems = new[]
{ {
new AsTableLog{ msg = "msg01", createtime = DateTime.Parse("2022-1-1 13:00:11"), click = 1 }, new AsTableLog{ msg = "msg01", createtime = DateTime.Parse("2022-1-1 13:00:11"), click = 1 },
@ -725,6 +633,10 @@ var sql11111 = fsql.Select<Class1111>()
var sqlat = sqlatb.ToSql(); var sqlat = sqlatb.ToSql();
var sqlatr = sqlatb.ExecuteAffrows(); var sqlatr = sqlatb.ExecuteAffrows();
//var sqlatc1 = fsql.Delete<AsTableLog>().Where(a => a.click < 0);
//var sqlatca1 = sqlatc1.ToSql();
//var sqlatcr1 = sqlatc1.ExecuteAffrows();
var sqlatc1 = fsql.Delete<AsTableLog>().Where(a => a.id == Guid.NewGuid() && a.createtime == DateTime.Parse("2022-3-8 15:00:13")); var sqlatc1 = fsql.Delete<AsTableLog>().Where(a => a.id == Guid.NewGuid() && a.createtime == DateTime.Parse("2022-3-8 15:00:13"));
var sqlatca1 = sqlatc1.ToSql(); var sqlatca1 = sqlatc1.ToSql();
var sqlatcr1 = sqlatc1.ExecuteAffrows(); var sqlatcr1 = sqlatc1.ExecuteAffrows();
@ -815,6 +727,101 @@ var sql11111 = fsql.Select<Class1111>()
}); });
var iouSetSql01 = fsql.InsertOrUpdate<User1>()
.SetSource(Enumerable.Range(0, 5).Select(a => new User1 { Id = Guid.NewGuid(), Nickname = $"nickname{a}", Username = $"username{a}", Description = $"desc{a}" }).ToArray())
.UpdateSet((a, b) => a.Sort == b.Sort + 10)
.UpdateSet((a, b) => a.Nickname == "xxx")
.ToSql();
fsql.Delete<OracleLongRaw1>().Where("1=1").ExecuteAffrows();
var longRawData = Encoding.UTF8.GetBytes(string.Join(",", Enumerable.Range(1, 2000).Select(a => "中国人")));
fsql.Insert(new OracleLongRaw1 { data = longRawData }).NoneParameter(false).ExecuteAffrows();
fsql.Insert(new OracleLongRaw1 { data = longRawData }).NoneParameter(true).ExecuteAffrows();
var longRaw1 = fsql.Select<OracleLongRaw1>().ToList();
MarketingRestrictions restrictions = new MarketingRestrictions();
if (restrictions.Id == Guid.Empty)
{
restrictions.CreatedBy = 100;
}
else
{
restrictions.UpdatedBy = 100;
restrictions.UpdatedTime = DateTime.Now;
}
int ret = fsql.InsertOrUpdate<MarketingRestrictions>()
.SetSource(restrictions)
.UpdateColumns(r => new {
r.Describe,
r.IsLimitUsePoints,
r.Status,
r.StartTime,
r.EndTime,
r.UpdatedBy,
r.UpdatedTime
})
.ExecuteAffrows();
var query2222 = fsql.Select<Student2222>()
.AsTable((t, o) => string.Format(o, "hash2"))
.Where(p => p.Name.Contains("search"))
.GroupBy(a => new { a.ClassId })
.WithTempQuery(a => a.Key);
var sql11111 = fsql.Select<Class1111>()
.AsTable((t, o) => string.Format(o, "hash1"))
.Where(s => query2222
.ToList(p => p.ClassId)
.Contains(s.Id))
.ToSql(s => new
{
s.Id,
s.Name,
});
var isusers01 = fsql.Select<Achievement>()
.Where(e => e.Property("项目执行情况") == "结题")
.GroupBy(e => new { ProjectLevel = e.Property("项目级别") })
.ToSql(e => new
{
e.Key.ProjectLevel,
Test = e.Value.Group.Property("批准经费总额(万元)"),
});
isusers01 = fsql.Select<Achievement>()
.Where(e => e.Property("项目执行情况") == "结题")
.GroupBy(e => new { ProjectLevel = e.Property("项目级别") })
.WithTempQuery(e => new
{
e.Key.ProjectLevel,
Test = e.Value.Group.Property("批准经费总额(万元)"),
})
.ToSql();
var bulkUsers = new[] {
new IdentityUser1 { Nickname = "nickname11", Username = "username11" },
new IdentityUser1 { Nickname = "nickname12", Username = "username12" },
new IdentityUser1 { Nickname = "nickname13", Username = "username13" },
new IdentityUser1 { Nickname = "nickname21", Username = "username21" },
new IdentityUser1 { Nickname = "nickname22", Username = "username22" },
new IdentityUser1 { Nickname = "nickname23", Username = "username23" }
};
fsql.Insert(bulkUsers).NoneParameter().ExecuteAffrows();
fsql.Insert(bulkUsers).IgnoreInsertValueSql(a => a.Nickname).NoneParameter().ExecuteAffrows();
bulkUsers = fsql.Select<IdentityUser1>().OrderByDescending(a => a.Id).Limit(3).ToList().ToArray();
bulkUsers[0].Nickname += "_bulkupdate";
bulkUsers[1].Nickname += "_bulkupdate";
bulkUsers[2].Nickname += "_bulkupdate";
fsql.Update<IdentityUser1>().SetSource(bulkUsers).ExecuteSqlBulkCopy();
var objtsql1 = fsql.Select<object>().WithSql("select * from user1").ToList();
var objtsql2 = fsql.Select<object>().WithSql("select * from user1").ToList<User1>();
var usergroupRepository = fsql.GetAggregateRootRepository<UserGroup>(); var usergroupRepository = fsql.GetAggregateRootRepository<UserGroup>();
usergroupRepository.Delete(a => true); usergroupRepository.Delete(a => true);
usergroupRepository.Insert(new[]{ usergroupRepository.Insert(new[]{

View File

@ -1073,6 +1073,82 @@
</summary> </summary>
<returns></returns> <returns></returns>
</member> </member>
<member name="T:FreeSql.Extensions.DynamicEntity.DynamicCompileBuilder">
<summary>
动态创建实体类型
</summary>
</member>
<member name="M:FreeSql.Extensions.DynamicEntity.DynamicCompileBuilder.#ctor(IFreeSql,System.String,System.Attribute[])">
<summary>
配置Class
</summary>
<param name="className">类名</param>
<param name="attributes">类标记的特性[Table(Name = "xxx")] [Index(xxxx)]</param>
<returns></returns>
</member>
<member name="M:FreeSql.Extensions.DynamicEntity.DynamicCompileBuilder.Property(System.String,System.Type,System.Attribute[])">
<summary>
配置属性
</summary>
<param name="propertyName">属性名称</param>
<param name="propertyType">属性类型</param>
<param name="attributes">属性标记的特性-支持多个</param>
<returns></returns>
</member>
<member name="M:FreeSql.Extensions.DynamicEntity.DynamicCompileBuilder.Property(System.String,System.Type,System.Boolean,System.Attribute[])">
<summary>
配置属性
</summary>
<param name="propertyName">属性名称</param>
<param name="propertyType">属性类型</param>
<param name="isOverride">该属性是否重写父类属性</param>
<param name="attributes">属性标记的特性-支持多个</param>
<returns></returns>
</member>
<member name="M:FreeSql.Extensions.DynamicEntity.DynamicCompileBuilder.Property(System.String,System.Type,System.Boolean,System.Object,System.Attribute[])">
<summary>
配置属性
</summary>
<param name="propertyName">属性名称</param>
<param name="propertyType">属性类型</param>
<param name="isOverride">该属性是否重写父类属性</param>
<param name="defaultValue">属性默认值</param>
<param name="attributes">属性标记的特性-支持多个</param>
<returns></returns>
</member>
<member name="M:FreeSql.Extensions.DynamicEntity.DynamicCompileBuilder.Extend(System.Type)">
<summary>
配置父类
</summary>
<param name="superClass">父类类型</param>
<returns></returns>
</member>
<member name="M:FreeSql.Extensions.DynamicEntity.DynamicCompileBuilder.OverrideProperty(System.Reflection.Emit.TypeBuilder@,System.Reflection.Emit.MethodBuilder,FreeSql.Extensions.DynamicEntity.DynamicCompileBuilder.PropertyMethodEnum,System.String)">
<summary>
Override属性
</summary>
<param name="typeBuilder"></param>
</member>
<member name="M:FreeSql.Extensions.DynamicEntity.DynamicCompileBuilder.Build">
<summary>
Emit动态创建出Class - Type
</summary>
<returns></returns>
</member>
<member name="M:FreeSql.Extensions.DynamicEntity.DynamicCompileBuilder.FirstCharToLower(System.String)">
<summary>
首字母小写
</summary>
<param name="input"></param>
<returns></returns>
</member>
<member name="M:FreeSql.Extensions.DynamicEntity.DynamicCompileBuilder.FirstCharToUpper(System.String)">
<summary>
首字母大写
</summary>
<param name="input"></param>
<returns></returns>
</member>
<member name="M:FreeSql.Extensions.EntityUtil.EntityUtilExtensions.GetEntityKeyString(IFreeSql,System.Type,System.Object,System.Boolean,System.String)"> <member name="M:FreeSql.Extensions.EntityUtil.EntityUtilExtensions.GetEntityKeyString(IFreeSql,System.Type,System.Object,System.Boolean,System.String)">
<summary> <summary>
获取实体的主键值,以 "*|_,[,_|*" 分割,当任意一个主键属性无值时,返回 null 获取实体的主键值,以 "*|_,[,_|*" 分割,当任意一个主键属性无值时,返回 null
@ -5710,6 +5786,28 @@
请使用 fsql.InsertDict(dict) 方法插入字典数据 请使用 fsql.InsertDict(dict) 方法插入字典数据
</summary> </summary>
</member> </member>
<member name="M:FreeSqlGlobalDynamicEntityExtensions.DynamicEntity(FreeSql.ICodeFirst,System.String,System.Attribute[])">
<summary>
动态构建Class Type
</summary>
<returns></returns>
</member>
<member name="M:FreeSqlGlobalDynamicEntityExtensions.CreateInstance(FreeSql.Internal.Model.TableInfo,System.Collections.Generic.Dictionary{System.String,System.Object})">
<summary>
根据字典,创建 table 对应的实体对象
</summary>
<param name="table"></param>
<param name="dict"></param>
<returns></returns>
</member>
<member name="M:FreeSqlGlobalDynamicEntityExtensions.CreateDictionary(FreeSql.Internal.Model.TableInfo,System.Object)">
<summary>
根据实体对象,创建 table 对应的字典
</summary>
<param name="table"></param>
<param name="instance"></param>
<returns></returns>
</member>
<member name="M:FreeSqlGlobalExpressionCallExtensions.Between(System.DateTime,System.DateTime,System.DateTime)"> <member name="M:FreeSqlGlobalExpressionCallExtensions.Between(System.DateTime,System.DateTime,System.DateTime)">
<summary> <summary>
C# that >= between &amp;&amp; that &lt;= and<para></para> C# that >= between &amp;&amp; that &lt;= and<para></para>

View File

@ -196,7 +196,7 @@ namespace FreeSql.Internal.CommonProvider
} }
var sb = new StringBuilder(); var sb = new StringBuilder();
if (_table.AsTableImpl != null && _tableRule != null && string.IsNullOrWhiteSpace(_tableRule(_table.DbName)) == true) if (_table.AsTableImpl != null && string.IsNullOrWhiteSpace(_tableRule?.Invoke(_table.DbName)) == true)
{ {
var oldTableRule = _tableRule; var oldTableRule = _tableRule;
var names = _table.AsTableImpl.GetTableNamesBySqlWhere(newwhere.ToString(), _params, new SelectTableInfo { Table = _table }, _commonUtils); var names = _table.AsTableImpl.GetTableNamesBySqlWhere(newwhere.ToString(), _params, new SelectTableInfo { Table = _table }, _commonUtils);
@ -231,7 +231,7 @@ namespace FreeSql.Internal.CommonProvider
} }
var sb = new StringBuilder(); var sb = new StringBuilder();
if (_table.AsTableImpl != null && _tableRule != null && string.IsNullOrWhiteSpace(_tableRule(_table.DbName)) == true) if (_table.AsTableImpl != null && string.IsNullOrWhiteSpace(_tableRule?.Invoke(_table.DbName)) == true)
{ {
var oldTableRule = _tableRule; var oldTableRule = _tableRule;
var names = _table.AsTableImpl.GetTableNamesBySqlWhere(newwhere.ToString(), _params, new SelectTableInfo { Table = _table }, _commonUtils); var names = _table.AsTableImpl.GetTableNamesBySqlWhere(newwhere.ToString(), _params, new SelectTableInfo { Table = _table }, _commonUtils);

View File

@ -1008,7 +1008,7 @@ namespace FreeSql.Internal.CommonProvider
ToSqlWhere(newwhere); ToSqlWhere(newwhere);
var sb = new StringBuilder(); var sb = new StringBuilder();
if (_table.AsTableImpl != null && _tableRule != null && string.IsNullOrWhiteSpace(_tableRule(_table.DbName)) == true) if (_table.AsTableImpl != null && string.IsNullOrWhiteSpace(_tableRule?.Invoke(_table.DbName)) == true)
{ {
var oldTableRule = _tableRule; var oldTableRule = _tableRule;
var names = _table.AsTableImpl.GetTableNamesBySqlWhere(newwhere.ToString(), _params, new SelectTableInfo { Table = _table }, _commonUtils); var names = _table.AsTableImpl.GetTableNamesBySqlWhere(newwhere.ToString(), _params, new SelectTableInfo { Table = _table }, _commonUtils);
@ -1042,7 +1042,7 @@ namespace FreeSql.Internal.CommonProvider
ToSqlWhere(newwhere); ToSqlWhere(newwhere);
var sb = new StringBuilder(); var sb = new StringBuilder();
if (_table.AsTableImpl != null && _tableRule != null && string.IsNullOrWhiteSpace(_tableRule(_table.DbName)) == true) if (_table.AsTableImpl != null && string.IsNullOrWhiteSpace(_tableRule?.Invoke(_table.DbName)) == true)
{ {
var oldTableRule = _tableRule; var oldTableRule = _tableRule;
var names = _table.AsTableImpl.GetTableNamesBySqlWhere(newwhere.ToString(), _params, new SelectTableInfo { Table = _table }, _commonUtils); var names = _table.AsTableImpl.GetTableNamesBySqlWhere(newwhere.ToString(), _params, new SelectTableInfo { Table = _table }, _commonUtils);