针对唯一索引,生成多个前缀查询

This commit is contained in:
大石头 2024-07-14 10:11:08 +08:00
parent 51076a05ea
commit 1c0a974d70
14 changed files with 106 additions and 25 deletions

View File

@ -1561,12 +1561,23 @@ public class EntityBuilder : ClassBuilder
} }
// 只有整数和字符串能生成查询函数 // 只有整数和字符串能生成查询函数
if (cs.Any(e => !IsIntOrString(e))) continue; if (cs.Any(e => !CanSearch(e))) continue;
// 返回类型 // 唯一索引
if (di.Unique) if (di.Unique)
{ {
if (BuildExtendFind(cs, methods)) methods++; if (BuildExtendFind(cs, methods)) methods++;
// 生成多个前缀查询
for (var i = 1; i < cs.Length; i++)
{
// 如果当前字段不可查询,则终止
if (!CanSearch(cs[i - 1])) break;
var cs2 = cs.Take(i).ToArray();
if (BuildExtendFindAll(cs2, methods)) methods++;
}
} }
else else
{ {
@ -1644,8 +1655,10 @@ public class EntityBuilder : ClassBuilder
WriteLine("if ({0} < 0) return null;", dc.CamelName()); WriteLine("if ({0} < 0) return null;", dc.CamelName());
else if (dc.DataType == typeof(String)) else if (dc.DataType == typeof(String))
WriteLine("if ({0}.IsNullOrEmpty()) return null;", dc.CamelName()); WriteLine("if ({0}.IsNullOrEmpty()) return null;", dc.CamelName());
else if (dc.DataType == typeof(DateTime) && dc.ItemType.EqualIgnoreCase("date"))
WriteLine("if ({0}.Year < 2000) return null;", dc.CamelName());
header |= IsIntOrString(dc); header |= CanSearch(dc);
} }
var exp = new StringBuilder(); var exp = new StringBuilder();
@ -1750,8 +1763,10 @@ public class EntityBuilder : ClassBuilder
WriteLine("if ({0} < 0) return [];", dc.CamelName(), ClassName); WriteLine("if ({0} < 0) return [];", dc.CamelName(), ClassName);
else if (dc.DataType == typeof(String)) else if (dc.DataType == typeof(String))
WriteLine("if ({0}.IsNullOrEmpty()) return [];", dc.CamelName(), ClassName); WriteLine("if ({0}.IsNullOrEmpty()) return [];", dc.CamelName(), ClassName);
else if (dc.DataType == typeof(DateTime) && dc.ItemType.EqualIgnoreCase("date"))
WriteLine("if ({0}.Year < 2000) return [];", dc.CamelName());
header |= IsIntOrString(dc); header |= CanSearch(dc);
} }
var exp = new StringBuilder(); var exp = new StringBuilder();
@ -1972,6 +1987,18 @@ public class EntityBuilder : ClassBuilder
#endregion #endregion
#region #region
private Boolean IsIntOrString(IDataColumn column) => column.DataType != null && (column.DataType.IsInt() || column.DataType == typeof(String)); /// <summary>该列是否能够搜索。整型、字符串以及日期类型可以搜索</summary>
/// <param name="column"></param>
/// <returns></returns>
private Boolean CanSearch(IDataColumn column)
{
if (column.DataType == null) return false;
if (column.DataType.IsInt()) return true;
if (column.DataType == typeof(String)) return true;
if (column.DataType == typeof(DateTime) && column.ItemType.EqualIgnoreCase("date")) return true;
return false;
}
#endregion #endregion
} }

View File

@ -264,7 +264,7 @@ public partial class Area : IArea, IEntity<IArea>
/// <summary>根据编码查找</summary> /// <summary>根据编码查找</summary>
/// <param name="id">编码</param> /// <param name="id">编码</param>
/// <returns>实体对象</returns> /// <returns>实体对象</returns>
public static Area FindByID(Int32 id) public static Area? FindByID(Int32 id)
{ {
if (id < 0) return null; if (id < 0) return null;

View File

@ -336,7 +336,7 @@ public partial class Parameter : IParameter, IEntity<IParameter>
/// <summary>根据编号查找</summary> /// <summary>根据编号查找</summary>
/// <param name="id">编号</param> /// <param name="id">编号</param>
/// <returns>实体对象</returns> /// <returns>实体对象</returns>
public static Parameter FindByID(Int32 id) public static Parameter? FindByID(Int32 id)
{ {
if (id < 0) return null; if (id < 0) return null;
@ -354,7 +354,7 @@ public partial class Parameter : IParameter, IEntity<IParameter>
/// <param name="category">类别</param> /// <param name="category">类别</param>
/// <param name="name">名称</param> /// <param name="name">名称</param>
/// <returns>实体对象</returns> /// <returns>实体对象</returns>
public static Parameter FindByUserIDAndCategoryAndName(Int32 userId, String category, String name) public static Parameter? FindByUserIDAndCategoryAndName(Int32 userId, String category, String name)
{ {
if (userId < 0) return null; if (userId < 0) return null;
if (category.IsNullOrEmpty()) return null; if (category.IsNullOrEmpty()) return null;
@ -366,6 +366,34 @@ public partial class Parameter : IParameter, IEntity<IParameter>
return Find(_.UserID == userId & _.Category == category & _.Name == name); return Find(_.UserID == userId & _.Category == category & _.Name == name);
} }
/// <summary>根据用户查找</summary>
/// <param name="userId">用户</param>
/// <returns>实体列表</returns>
public static IList<Parameter> FindAllByUserID(Int32 userId)
{
if (userId < 0) return [];
// 实体缓存
if (Meta.Session.Count < 1000) return Meta.Cache.FindAll(e => e.UserID == userId);
return FindAll(_.UserID == userId);
}
/// <summary>根据用户、类别查找</summary>
/// <param name="userId">用户</param>
/// <param name="category">类别</param>
/// <returns>实体列表</returns>
public static IList<Parameter> FindAllByUserIDAndCategory(Int32 userId, String category)
{
if (userId < 0) return [];
if (category.IsNullOrEmpty()) return [];
// 实体缓存
if (Meta.Session.Count < 1000) return Meta.Cache.FindAll(e => e.UserID == userId && e.Category.EqualIgnoreCase(category));
return FindAll(_.UserID == userId & _.Category == category);
}
/// <summary>根据类别、名称查找</summary> /// <summary>根据类别、名称查找</summary>
/// <param name="category">类别</param> /// <param name="category">类别</param>
/// <param name="name">名称</param> /// <param name="name">名称</param>

View File

@ -287,7 +287,7 @@ public partial class MemberLog : IMemberLog, IEntity<IMemberLog>
/// <summary>根据编号查找</summary> /// <summary>根据编号查找</summary>
/// <param name="id">编号</param> /// <param name="id">编号</param>
/// <returns>实体对象</returns> /// <returns>实体对象</returns>
public static MemberLog FindByID(Int64 id) public static MemberLog? FindByID(Int64 id)
{ {
if (id < 0) return null; if (id < 0) return null;

View File

@ -278,7 +278,7 @@ public partial class Log : ILog, IEntity<ILog>
/// <summary>根据编号查找</summary> /// <summary>根据编号查找</summary>
/// <param name="id">编号</param> /// <param name="id">编号</param>
/// <returns>实体对象</returns> /// <returns>实体对象</returns>
public static Log FindByID(Int64 id) public static Log? FindByID(Int64 id)
{ {
if (id < 0) return null; if (id < 0) return null;

View File

@ -473,7 +473,7 @@ public partial class User : IUser, IEntity<IUser>
/// <summary>根据编号查找</summary> /// <summary>根据编号查找</summary>
/// <param name="id">编号</param> /// <param name="id">编号</param>
/// <returns>实体对象</returns> /// <returns>实体对象</returns>
public static User FindByID(Int32 id) public static User? FindByID(Int32 id)
{ {
if (id < 0) return null; if (id < 0) return null;
@ -489,7 +489,7 @@ public partial class User : IUser, IEntity<IUser>
/// <summary>根据名称查找</summary> /// <summary>根据名称查找</summary>
/// <param name="name">名称</param> /// <param name="name">名称</param>
/// <returns>实体对象</returns> /// <returns>实体对象</returns>
public static User FindByName(String name) public static User? FindByName(String name)
{ {
if (name.IsNullOrEmpty()) return null; if (name.IsNullOrEmpty()) return null;

View File

@ -289,7 +289,7 @@ public partial class UserLog : IUserLog, IEntity<IUserLog>
/// <summary>根据编号查找</summary> /// <summary>根据编号查找</summary>
/// <param name="id">编号</param> /// <param name="id">编号</param>
/// <returns>实体对象</returns> /// <returns>实体对象</returns>
public static UserLog FindByID(Int64 id) public static UserLog? FindByID(Int64 id)
{ {
if (id < 0) return null; if (id < 0) return null;

View File

@ -254,7 +254,7 @@ public partial class Tenant : ITenant, IEntity<ITenant>
/// <summary>根据编号查找</summary> /// <summary>根据编号查找</summary>
/// <param name="id">编号</param> /// <param name="id">编号</param>
/// <returns>实体对象</returns> /// <returns>实体对象</returns>
public static Tenant FindById(Int32 id) public static Tenant? FindById(Int32 id)
{ {
if (id < 0) return null; if (id < 0) return null;
@ -270,7 +270,7 @@ public partial class Tenant : ITenant, IEntity<ITenant>
/// <summary>根据编码查找</summary> /// <summary>根据编码查找</summary>
/// <param name="code">编码</param> /// <param name="code">编码</param>
/// <returns>实体对象</returns> /// <returns>实体对象</returns>
public static Tenant FindByCode(String code) public static Tenant? FindByCode(String code)
{ {
if (code.IsNullOrEmpty()) return null; if (code.IsNullOrEmpty()) return null;

View File

@ -227,7 +227,7 @@ public partial class TenantUser : ITenantUser, IEntity<ITenantUser>
/// <summary>根据编号查找</summary> /// <summary>根据编号查找</summary>
/// <param name="id">编号</param> /// <param name="id">编号</param>
/// <returns>实体对象</returns> /// <returns>实体对象</returns>
public static TenantUser FindById(Int32 id) public static TenantUser? FindById(Int32 id)
{ {
if (id < 0) return null; if (id < 0) return null;
@ -244,7 +244,7 @@ public partial class TenantUser : ITenantUser, IEntity<ITenantUser>
/// <param name="tenantId">租户</param> /// <param name="tenantId">租户</param>
/// <param name="userId">用户</param> /// <param name="userId">用户</param>
/// <returns>实体对象</returns> /// <returns>实体对象</returns>
public static TenantUser FindByTenantIdAndUserId(Int32 tenantId, Int32 userId) public static TenantUser? FindByTenantIdAndUserId(Int32 tenantId, Int32 userId)
{ {
if (tenantId < 0) return null; if (tenantId < 0) return null;
if (userId < 0) return null; if (userId < 0) return null;
@ -255,6 +255,19 @@ public partial class TenantUser : ITenantUser, IEntity<ITenantUser>
return Find(_.TenantId == tenantId & _.UserId == userId); return Find(_.TenantId == tenantId & _.UserId == userId);
} }
/// <summary>根据租户查找</summary>
/// <param name="tenantId">租户</param>
/// <returns>实体列表</returns>
public static IList<TenantUser> FindAllByTenantId(Int32 tenantId)
{
if (tenantId < 0) return [];
// 实体缓存
if (Meta.Session.Count < 1000) return Meta.Cache.FindAll(e => e.TenantId == tenantId);
return FindAll(_.TenantId == tenantId);
}
/// <summary>根据用户查找</summary> /// <summary>根据用户查找</summary>
/// <param name="userId">用户</param> /// <param name="userId">用户</param>
/// <returns>实体列表</returns> /// <returns>实体列表</returns>

View File

@ -371,7 +371,7 @@ public partial class Menu : IMenu, IEntity<IMenu>
/// <summary>根据编号查找</summary> /// <summary>根据编号查找</summary>
/// <param name="id">编号</param> /// <param name="id">编号</param>
/// <returns>实体对象</returns> /// <returns>实体对象</returns>
public static Menu FindByID(Int32 id) public static Menu? FindByID(Int32 id)
{ {
if (id < 0) return null; if (id < 0) return null;
@ -401,7 +401,7 @@ public partial class Menu : IMenu, IEntity<IMenu>
/// <param name="parentId">父编号</param> /// <param name="parentId">父编号</param>
/// <param name="name">名称</param> /// <param name="name">名称</param>
/// <returns>实体对象</returns> /// <returns>实体对象</returns>
public static Menu FindByParentIDAndName(Int32 parentId, String name) public static Menu? FindByParentIDAndName(Int32 parentId, String name)
{ {
if (parentId < 0) return null; if (parentId < 0) return null;
if (name.IsNullOrEmpty()) return null; if (name.IsNullOrEmpty()) return null;
@ -411,6 +411,19 @@ public partial class Menu : IMenu, IEntity<IMenu>
return Find(_.ParentID == parentId & _.Name == name); return Find(_.ParentID == parentId & _.Name == name);
} }
/// <summary>根据父编号查找</summary>
/// <param name="parentId">父编号</param>
/// <returns>实体列表</returns>
public static IList<Menu> FindAllByParentID(Int32 parentId)
{
if (parentId < 0) return [];
// 实体缓存
if (Meta.Session.Count < 1000) return Meta.Cache.FindAll(e => e.ParentID == parentId);
return FindAll(_.ParentID == parentId);
}
#endregion #endregion
#region #region

View File

@ -304,7 +304,7 @@ public partial class Role : IRole, IEntity<IRole>
/// <summary>根据编号查找</summary> /// <summary>根据编号查找</summary>
/// <param name="id">编号</param> /// <param name="id">编号</param>
/// <returns>实体对象</returns> /// <returns>实体对象</returns>
public static Role FindByID(Int32 id) public static Role? FindByID(Int32 id)
{ {
if (id < 0) return null; if (id < 0) return null;
@ -320,7 +320,7 @@ public partial class Role : IRole, IEntity<IRole>
/// <summary>根据名称查找</summary> /// <summary>根据名称查找</summary>
/// <param name="name">名称</param> /// <param name="name">名称</param>
/// <returns>实体对象</returns> /// <returns>实体对象</returns>
public static Role FindByName(String name) public static Role? FindByName(String name)
{ {
if (name.IsNullOrEmpty()) return null; if (name.IsNullOrEmpty()) return null;

View File

@ -379,7 +379,7 @@ public partial class Department : IDepartment, IEntity<IDepartment>
/// <summary>根据编号查找</summary> /// <summary>根据编号查找</summary>
/// <param name="id">编号</param> /// <param name="id">编号</param>
/// <returns>实体对象</returns> /// <returns>实体对象</returns>
public static Department FindByID(Int32 id) public static Department? FindByID(Int32 id)
{ {
if (id < 0) return null; if (id < 0) return null;

View File

@ -246,7 +246,7 @@ public partial class Log
/// <summary>根据编号查找</summary> /// <summary>根据编号查找</summary>
/// <param name="id">编号</param> /// <param name="id">编号</param>
/// <returns>实体对象</returns> /// <returns>实体对象</returns>
public static Log FindByID(Int64 id) public static Log? FindByID(Int64 id)
{ {
if (id < 0) return null; if (id < 0) return null;

View File

@ -445,7 +445,7 @@ public partial class User
/// <summary>根据编号查找</summary> /// <summary>根据编号查找</summary>
/// <param name="id">编号</param> /// <param name="id">编号</param>
/// <returns>实体对象</returns> /// <returns>实体对象</returns>
public static User FindByID(Int32 id) public static User? FindByID(Int32 id)
{ {
if (id < 0) return null; if (id < 0) return null;
@ -461,7 +461,7 @@ public partial class User
/// <summary>根据名称查找</summary> /// <summary>根据名称查找</summary>
/// <param name="name">名称</param> /// <param name="name">名称</param>
/// <returns>实体对象</returns> /// <returns>实体对象</returns>
public static User FindByName(String name) public static User? FindByName(String name)
{ {
if (name.IsNullOrEmpty()) return null; if (name.IsNullOrEmpty()) return null;