mirror of
https://github.com/nsnail/FreeSql.git
synced 2025-04-22 10:42:52 +08:00
- 增加 IFreeSql.GlobalFilter 全局过滤器;
- 移除 TableAttribute.SelectFilter 功能;
This commit is contained in:
parent
5b0b678c27
commit
b97156b482
@ -256,7 +256,7 @@
|
||||
<param name="that"></param>
|
||||
<param name="options"></param>
|
||||
</member>
|
||||
<member name="M:FreeSqlRepositoryExtenssions.GetRepository``2(IFreeSql,System.Linq.Expressions.Expression{System.Func{``0,System.Boolean}})">
|
||||
<member name="M:FreeSqlRepositoryExtensions.GetRepository``2(IFreeSql,System.Linq.Expressions.Expression{System.Func{``0,System.Boolean}})">
|
||||
<summary>
|
||||
返回默认仓库类
|
||||
</summary>
|
||||
@ -266,7 +266,7 @@
|
||||
<param name="filter">数据过滤 + 验证</param>
|
||||
<returns></returns>
|
||||
</member>
|
||||
<member name="M:FreeSqlRepositoryExtenssions.GetRepository``1(IFreeSql,System.Linq.Expressions.Expression{System.Func{``0,System.Boolean}})">
|
||||
<member name="M:FreeSqlRepositoryExtensions.GetRepository``1(IFreeSql,System.Linq.Expressions.Expression{System.Func{``0,System.Boolean}})">
|
||||
<summary>
|
||||
返回默认仓库类,适用联合主键的仓储类
|
||||
</summary>
|
||||
@ -275,7 +275,7 @@
|
||||
<param name="filter">数据过滤 + 验证</param>
|
||||
<returns></returns>
|
||||
</member>
|
||||
<member name="M:FreeSqlRepositoryExtenssions.GetGuidRepository``1(IFreeSql,System.Linq.Expressions.Expression{System.Func{``0,System.Boolean}},System.Func{System.String,System.String})">
|
||||
<member name="M:FreeSqlRepositoryExtensions.GetGuidRepository``1(IFreeSql,System.Linq.Expressions.Expression{System.Func{``0,System.Boolean}},System.Func{System.String,System.String})">
|
||||
<summary>
|
||||
返回仓库类
|
||||
</summary>
|
||||
@ -285,7 +285,7 @@
|
||||
<param name="asTable">分表规则,参数:旧表名;返回:新表名 https://github.com/2881099/FreeSql/wiki/Repository</param>
|
||||
<returns></returns>
|
||||
</member>
|
||||
<member name="M:FreeSqlRepositoryExtenssions.CreateUnitOfWork(IFreeSql)">
|
||||
<member name="M:FreeSqlRepositoryExtensions.CreateUnitOfWork(IFreeSql)">
|
||||
<summary>
|
||||
创建基于仓储功能的工作单元,务必使用 using 包含使用
|
||||
</summary>
|
||||
|
@ -3,7 +3,7 @@ using System;
|
||||
using System.Linq.Expressions;
|
||||
using System.Linq;
|
||||
|
||||
public static class FreeSqlRepositoryExtenssions
|
||||
public static class FreeSqlRepositoryExtensions
|
||||
{
|
||||
|
||||
/// <summary>
|
@ -87,7 +87,7 @@ namespace FreeSql.Tests.MySqlConnector
|
||||
public virtual ICollection<Tag> Tags { get; set; }
|
||||
}
|
||||
|
||||
[Table(Name = "TestInfoT1", SelectFilter = " a.id > 0")]
|
||||
[Table(Name = "TestInfoT1")]
|
||||
class TestInfo
|
||||
{
|
||||
[Column(IsIdentity = true, IsPrimary = true)]
|
||||
|
@ -1003,7 +1003,7 @@ WHERE ROWNUM < 11";
|
||||
}
|
||||
|
||||
|
||||
[Table(Name = "TestInfoT1", SelectFilter = " a.id > 0")]
|
||||
[Table(Name = "TestInfoT1")]
|
||||
class TestInfo
|
||||
{
|
||||
[Column(IsIdentity = true, IsPrimary = true)]
|
||||
|
@ -68,21 +68,21 @@ namespace FreeSql.Tests.DataAnnotations
|
||||
{
|
||||
g.mysql.CodeFirst
|
||||
//.ConfigEntity<TestFluenttb1>(a => {
|
||||
// a.Name("xxdkdkdk1").SelectFilter("a.Id22 > 0");
|
||||
// a.Name("xxdkdkdk1");
|
||||
// a.Property(b => b.Id).Name("Id22").IsIdentity(true);
|
||||
// a.Property(b => b.name).DbType("varchar(100)").IsNullable(true);
|
||||
//})
|
||||
|
||||
.ConfigEntity(typeof(TestFluenttb1), a =>
|
||||
{
|
||||
a.Name("xxdkdkdk1222").SelectFilter("a.Id22dd > 1");
|
||||
a.Name("xxdkdkdk1222");
|
||||
a.Property("Id").Name("Id22dd").IsIdentity(true);
|
||||
a.Property("Name").DbType("varchar(101)").IsNullable(true);
|
||||
})
|
||||
|
||||
.ConfigEntity<TestFluenttb2>(a =>
|
||||
{
|
||||
a.Name("xxdkdkdk2").SelectFilter("a.Idx > 0");
|
||||
a.Name("xxdkdkdk2");
|
||||
a.Property(b => b.Id).Name("Id22").IsIdentity(true);
|
||||
a.Property(b => b.name).DbType("varchar(100)").IsNullable(true);
|
||||
})
|
||||
|
@ -41,21 +41,21 @@ namespace FreeSql.Tests.DataAnnotations
|
||||
{
|
||||
_sqlserverFixture.SqlServer.CodeFirst
|
||||
//.ConfigEntity<TestFluenttb1>(a => {
|
||||
// a.Name("xxdkdkdk1").SelectFilter("a.Id22 > 0");
|
||||
// a.Name("xxdkdkdk1");
|
||||
// a.Property(b => b.Id).Name("Id22").IsIdentity(true);
|
||||
// a.Property(b => b.name).DbType("varchar(100)").IsNullable(true);
|
||||
//})
|
||||
|
||||
.ConfigEntity(typeof(TestFluenttb1), a =>
|
||||
{
|
||||
a.Name("xxdkdkdk1222").SelectFilter("a.Id22dd > 1");
|
||||
a.Name("xxdkdkdk1222");
|
||||
a.Property("Id").Name("Id22dd").IsIdentity(true);
|
||||
a.Property("Name").DbType("varchar(101)").IsNullable(true);
|
||||
})
|
||||
|
||||
.ConfigEntity<TestFluenttb2>(a =>
|
||||
{
|
||||
a.Name("xxdkdkdk2").SelectFilter("a.Idx > 0");
|
||||
a.Name("xxdkdkdk2");
|
||||
a.Property(b => b.Id).Name("Id22").IsIdentity(true);
|
||||
a.Property(b => b.name).DbType("varchar(100)").IsNullable(true);
|
||||
})
|
||||
|
@ -1106,7 +1106,6 @@ namespace FreeSql.Tests.Sqlite
|
||||
[Fact]
|
||||
public void Include_ManyToMany()
|
||||
{
|
||||
|
||||
var tag1 = new Tag
|
||||
{
|
||||
Ddd = DateTime.Now.Second,
|
||||
|
@ -15,6 +15,7 @@ using Zeus;
|
||||
using Zeus.Domain.Enum;
|
||||
using System.ComponentModel.DataAnnotations;
|
||||
using System.Reflection;
|
||||
using System.Threading;
|
||||
|
||||
namespace FreeSql.Tests
|
||||
{
|
||||
@ -415,10 +416,27 @@ namespace FreeSql.Tests
|
||||
}
|
||||
public enum TestAddEnumType { 中国人, 日本人 }
|
||||
|
||||
public static AsyncLocal<Guid> TenrantId { get; set; } = new AsyncLocal<Guid>();
|
||||
[Fact]
|
||||
public void Test1()
|
||||
{
|
||||
//g.mysql.GlobalFilter
|
||||
// .Apply<TestAddEnum>("test1", a => a.Id == TenrantId.Value)
|
||||
// .Apply<AuthorTest>("test2", a => a.Id == 111)
|
||||
// .Apply<AuthorTest>("test3", a => a.Name == "11");
|
||||
|
||||
TenrantId.Value = Guid.NewGuid();
|
||||
g.mysql.Select<TestAddEnum>().ToList();
|
||||
g.mysql.Select<TestAddEnum>().DisableGlobalFilter("test1").ToList();
|
||||
g.mysql.Select<TestAddEnum>().DisableGlobalFilter().ToList();
|
||||
|
||||
g.mysql.Delete<TestAddEnum>().Where(a => a.Id == Guid.Empty).ExecuteAffrows();
|
||||
g.mysql.Delete<TestAddEnum>().DisableGlobalFilter("test1").Where(a => a.Id == Guid.Empty).ExecuteAffrows();
|
||||
g.mysql.Delete<TestAddEnum>().DisableGlobalFilter().Where(a => a.Id == Guid.Empty).ExecuteAffrows();
|
||||
|
||||
g.mysql.Update<TestAddEnum>().SetSource(new TestAddEnum { Id = Guid.Empty }).ExecuteAffrows();
|
||||
g.mysql.Update<TestAddEnum>().DisableGlobalFilter("test1").SetSource(new TestAddEnum { Id = Guid.Empty }).ExecuteAffrows();
|
||||
g.mysql.Update<TestAddEnum>().DisableGlobalFilter().SetSource(new TestAddEnum { Id = Guid.Empty }).ExecuteAffrows();
|
||||
|
||||
g.sqlite.Insert(new TestGuidId { xxx = "111" }).ExecuteAffrows();
|
||||
g.sqlite.Insert(new TestGuidId { xxx = "222" }).ExecuteAffrows();
|
||||
@ -1217,7 +1235,7 @@ namespace FreeSql.Tests
|
||||
}
|
||||
|
||||
|
||||
[Table(Name = "TestInfoT1", SelectFilter = " a.id > 0")]
|
||||
[Table(Name = "TestInfoT1")]
|
||||
class TestInfo
|
||||
{
|
||||
[Column(IsIdentity = true, IsPrimary = true)]
|
||||
|
@ -16,10 +16,6 @@ namespace FreeSql.DataAnnotations
|
||||
/// 指定数据库旧的表名,修改实体命名时,同时设置此参数为修改之前的值,CodeFirst才可以正确修改数据库表;否则将视为【创建新表】
|
||||
/// </summary>
|
||||
public string OldName { get; set; }
|
||||
/// <summary>
|
||||
/// 查询过滤SQL,实现类似 a.IsDeleted = 1 功能
|
||||
/// </summary>
|
||||
public string SelectFilter { get; set; }
|
||||
|
||||
internal bool? _DisableSyncStructure;
|
||||
/// <summary>
|
||||
|
@ -35,14 +35,6 @@ namespace FreeSql.DataAnnotations
|
||||
_table.OldName = value;
|
||||
return this;
|
||||
}
|
||||
/// <summary>
|
||||
/// 查询过滤SQL,实现类似 a.IsDeleted = 1 功能
|
||||
/// </summary>
|
||||
public TableFluent SelectFilter(string value)
|
||||
{
|
||||
_table.SelectFilter = value;
|
||||
return this;
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// 禁用 CodeFirst 同步结构迁移
|
||||
@ -100,14 +92,6 @@ namespace FreeSql.DataAnnotations
|
||||
_table.OldName = value;
|
||||
return this;
|
||||
}
|
||||
/// <summary>
|
||||
/// 查询过滤SQL,实现类似 a.IsDeleted = 1 功能
|
||||
/// </summary>
|
||||
public TableFluent<T> SelectFilter(string value)
|
||||
{
|
||||
_table.SelectFilter = value;
|
||||
return this;
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// 禁用 CodeFirst 同步结构迁移
|
||||
|
@ -192,11 +192,6 @@
|
||||
指定数据库旧的表名,修改实体命名时,同时设置此参数为修改之前的值,CodeFirst才可以正确修改数据库表;否则将视为【创建新表】
|
||||
</summary>
|
||||
</member>
|
||||
<member name="P:FreeSql.DataAnnotations.TableAttribute.SelectFilter">
|
||||
<summary>
|
||||
查询过滤SQL,实现类似 a.IsDeleted = 1 功能
|
||||
</summary>
|
||||
</member>
|
||||
<member name="P:FreeSql.DataAnnotations.TableAttribute.DisableSyncStructure">
|
||||
<summary>
|
||||
禁用 CodeFirst 同步结构迁移
|
||||
@ -212,11 +207,6 @@
|
||||
指定数据库旧的表名,修改实体命名时,同时设置此参数为修改之前的值,CodeFirst才可以正确修改数据库表;否则将视为【创建新表】
|
||||
</summary>
|
||||
</member>
|
||||
<member name="M:FreeSql.DataAnnotations.TableFluent.SelectFilter(System.String)">
|
||||
<summary>
|
||||
查询过滤SQL,实现类似 a.IsDeleted = 1 功能
|
||||
</summary>
|
||||
</member>
|
||||
<member name="M:FreeSql.DataAnnotations.TableFluent.DisableSyncStructure(System.Boolean)">
|
||||
<summary>
|
||||
禁用 CodeFirst 同步结构迁移
|
||||
@ -241,11 +231,6 @@
|
||||
指定数据库旧的表名,修改实体命名时,同时设置此参数为修改之前的值,CodeFirst才可以正确修改数据库表;否则将视为【创建新表】
|
||||
</summary>
|
||||
</member>
|
||||
<member name="M:FreeSql.DataAnnotations.TableFluent`1.SelectFilter(System.String)">
|
||||
<summary>
|
||||
查询过滤SQL,实现类似 a.IsDeleted = 1 功能
|
||||
</summary>
|
||||
</member>
|
||||
<member name="M:FreeSql.DataAnnotations.TableFluent`1.DisableSyncStructure(System.Boolean)">
|
||||
<summary>
|
||||
禁用 CodeFirst 同步结构迁移
|
||||
@ -669,6 +654,13 @@
|
||||
<param name="dywhere">主键值、主键值集合、实体、实体集合、匿名对象、匿名对象集合</param>
|
||||
<returns></returns>
|
||||
</member>
|
||||
<member name="M:FreeSql.IDelete`1.DisableGlobalFilter(System.String[])">
|
||||
<summary>
|
||||
禁用全局过滤功能,不传参数时将禁用所有
|
||||
</summary>
|
||||
<param name="name">零个或多个过滤器名字</param>
|
||||
<returns></returns>
|
||||
</member>
|
||||
<member name="M:FreeSql.IDelete`1.AsTable(System.Func{System.String,System.String})">
|
||||
<summary>
|
||||
设置表名规则,可用于分库/分表,参数1:默认表名;返回值:新表名;
|
||||
@ -1025,6 +1017,13 @@
|
||||
<param name="parms">参数</param>
|
||||
<returns></returns>
|
||||
</member>
|
||||
<member name="M:FreeSql.ISelect0`2.DisableGlobalFilter(System.String[])">
|
||||
<summary>
|
||||
禁用全局过滤功能,不传参数时将禁用所有
|
||||
</summary>
|
||||
<param name="name">零个或多个过滤器名字</param>
|
||||
<returns></returns>
|
||||
</member>
|
||||
<member name="M:FreeSql.ISelect0`2.GroupBy(System.String,System.Object)">
|
||||
<summary>
|
||||
按原生sql语法分组,GroupBy("concat(name, ?cc)", new { cc = 1 })
|
||||
@ -1763,6 +1762,13 @@
|
||||
<param name="dywhere">主键值、主键值集合、实体、实体集合、匿名对象、匿名对象集合</param>
|
||||
<returns></returns>
|
||||
</member>
|
||||
<member name="M:FreeSql.IUpdate`1.DisableGlobalFilter(System.String[])">
|
||||
<summary>
|
||||
禁用全局过滤功能,不传参数时将禁用所有
|
||||
</summary>
|
||||
<param name="name">零个或多个过滤器名字</param>
|
||||
<returns></returns>
|
||||
</member>
|
||||
<member name="M:FreeSql.IUpdate`1.AsTable(System.Func{System.String,System.String})">
|
||||
<summary>
|
||||
设置表名规则,可用于分库/分表,参数1:默认表名;返回值:新表名;
|
||||
@ -2147,7 +2153,7 @@
|
||||
</member>
|
||||
<member name="P:FreeSql.IAop.AuditValue">
|
||||
<summary>
|
||||
Insert/Update自动值处理, e.Column.SetMapValue(
|
||||
Insert/Update自动值处理
|
||||
</summary>
|
||||
</member>
|
||||
<member name="P:FreeSql.Aop.ToListEventArgs.List">
|
||||
@ -2495,6 +2501,15 @@
|
||||
<param name="type"></param>
|
||||
<returns>Dict:key=属性名,value=注释</returns>
|
||||
</member>
|
||||
<member name="M:FreeSql.Internal.GlobalFilter.Apply``1(System.String,System.Linq.Expressions.Expression{System.Func{``0,System.Boolean}})">
|
||||
<summary>
|
||||
创建一个过滤器
|
||||
</summary>
|
||||
<typeparam name="TEntity"></typeparam>
|
||||
<param name="name">名字</param>
|
||||
<param name="where">表达式</param>
|
||||
<returns></returns>
|
||||
</member>
|
||||
<member name="P:FreeSql.Internal.Model.TableRef.RefMiddleEntityType">
|
||||
<summary>
|
||||
中间表,多对多
|
||||
@ -2797,5 +2812,10 @@
|
||||
DbFirst 模式开发相关方法
|
||||
</summary>
|
||||
</member>
|
||||
<member name="P:IFreeSql.GlobalFilter">
|
||||
<summary>
|
||||
全局过滤设置,可默认附加为 Select/Update/Delete 条件
|
||||
</summary>
|
||||
</member>
|
||||
</members>
|
||||
</doc>
|
||||
|
@ -62,6 +62,13 @@ namespace FreeSql
|
||||
/// <returns></returns>
|
||||
IDelete<T1> WhereDynamic(object dywhere);
|
||||
|
||||
/// <summary>
|
||||
/// 禁用全局过滤功能,不传参数时将禁用所有
|
||||
/// </summary>
|
||||
/// <param name="name">零个或多个过滤器名字</param>
|
||||
/// <returns></returns>
|
||||
IDelete<T1> DisableGlobalFilter(params string[] name);
|
||||
|
||||
/// <summary>
|
||||
/// 设置表名规则,可用于分库/分表,参数1:默认表名;返回值:新表名;
|
||||
/// </summary>
|
||||
|
@ -208,6 +208,13 @@ namespace FreeSql
|
||||
/// <returns></returns>
|
||||
TSelect WhereIf(bool condition, string sql, object parms = null);
|
||||
|
||||
/// <summary>
|
||||
/// 禁用全局过滤功能,不传参数时将禁用所有
|
||||
/// </summary>
|
||||
/// <param name="name">零个或多个过滤器名字</param>
|
||||
/// <returns></returns>
|
||||
TSelect DisableGlobalFilter(params string[] name);
|
||||
|
||||
/// <summary>
|
||||
/// 按原生sql语法分组,GroupBy("concat(name, ?cc)", new { cc = 1 })
|
||||
/// </summary>
|
||||
|
@ -131,6 +131,13 @@ namespace FreeSql
|
||||
/// <returns></returns>
|
||||
IUpdate<T1> WhereDynamic(object dywhere);
|
||||
|
||||
/// <summary>
|
||||
/// 禁用全局过滤功能,不传参数时将禁用所有
|
||||
/// </summary>
|
||||
/// <param name="name">零个或多个过滤器名字</param>
|
||||
/// <returns></returns>
|
||||
IUpdate<T1> DisableGlobalFilter(params string[] name);
|
||||
|
||||
/// <summary>
|
||||
/// 设置表名规则,可用于分库/分表,参数1:默认表名;返回值:新表名;
|
||||
/// </summary>
|
||||
|
@ -56,7 +56,7 @@ namespace FreeSql
|
||||
EventHandler<Aop.SyncStructureAfterEventArgs> SyncStructureAfter { get; set; }
|
||||
|
||||
/// <summary>
|
||||
/// Insert/Update自动值处理, e.Column.SetMapValue(
|
||||
/// Insert/Update自动值处理
|
||||
/// </summary>
|
||||
EventHandler<Aop.AuditValueEventArgs> AuditValue { get; set; }
|
||||
}
|
||||
|
@ -1,6 +1,8 @@
|
||||
using FreeSql;
|
||||
using FreeSql.Internal;
|
||||
using System;
|
||||
using System.Collections.Generic;
|
||||
using System.Linq.Expressions;
|
||||
|
||||
public interface IFreeSql<TMark> : IFreeSql { }
|
||||
|
||||
@ -112,4 +114,9 @@ public interface IFreeSql : IDisposable
|
||||
/// DbFirst 模式开发相关方法
|
||||
/// </summary>
|
||||
IDbFirst DbFirst { get; }
|
||||
|
||||
/// <summary>
|
||||
/// 全局过滤设置,可默认附加为 Select/Update/Delete 条件
|
||||
/// </summary>
|
||||
GlobalFilter GlobalFilter { get; }
|
||||
}
|
@ -1205,10 +1205,14 @@ namespace FreeSql.Internal
|
||||
var errorKey = FreeUtil.Sha1($"{tb.Table.Type.FullName},{fl.ToString()}");
|
||||
if (_dicGetWhereCascadeSqlError.ContainsKey(errorKey)) continue;
|
||||
|
||||
var visitor = new NewExpressionVisitor(newParameter, fl.Parameters.FirstOrDefault());
|
||||
var visitor = new ReplaceVisitor();
|
||||
try
|
||||
{
|
||||
var expExp = visitor.Replace(fl.Body);
|
||||
var expExp = Expression.Lambda(
|
||||
typeof(Func<,>).MakeGenericType(tb.Table.Type, typeof(bool)),
|
||||
new ReplaceVisitor().Modify(fl.Body, newParameter),
|
||||
newParameter
|
||||
);
|
||||
var whereSql = ExpressionLambdaToSql(expExp, new ExpTSC { _tables = null, _selectColumnMap = null, getSelectGroupingMapString = null, tbtype = SelectTableInfoType.From, isQuoteName = true, isDisableDiyParse = false, style = ExpressionStyle.Where, currentTable = tb.Table, alias001 = tb.Alias });
|
||||
if (isEmpty == false)
|
||||
sb.Append(" AND ");
|
||||
@ -1228,10 +1232,22 @@ namespace FreeSql.Internal
|
||||
}
|
||||
return null;
|
||||
}
|
||||
|
||||
public string formatSql(object obj, Type mapType)
|
||||
class ReplaceVisitor : ExpressionVisitor
|
||||
{
|
||||
return string.Concat(_ado.AddslashesProcessParam(obj, mapType));
|
||||
private ParameterExpression parameter;
|
||||
public Expression Modify(Expression expression, ParameterExpression parameter)
|
||||
{
|
||||
this.parameter = parameter;
|
||||
return Visit(expression);
|
||||
}
|
||||
protected override Expression VisitMember(MemberExpression node)
|
||||
{
|
||||
if (node.Expression?.NodeType == ExpressionType.Parameter)
|
||||
return Expression.Property(parameter, node.Member.Name);
|
||||
return base.VisitMember(node);
|
||||
}
|
||||
}
|
||||
|
||||
public string formatSql(object obj, Type mapType) => string.Concat(_ado.AddslashesProcessParam(obj, mapType));
|
||||
}
|
||||
}
|
||||
|
@ -3,6 +3,7 @@ using System;
|
||||
using System.Collections.Generic;
|
||||
using System.Data;
|
||||
using System.Data.Common;
|
||||
using System.Linq;
|
||||
using System.Linq.Expressions;
|
||||
using System.Text;
|
||||
using System.Threading.Tasks;
|
||||
@ -19,6 +20,7 @@ namespace FreeSql.Internal.CommonProvider
|
||||
protected Func<string, string> _tableRule;
|
||||
protected StringBuilder _where = new StringBuilder();
|
||||
protected int _whereTimes = 0;
|
||||
protected List<GlobalFilter.Item> _whereGlobalFilter;
|
||||
protected List<DbParameter> _params = new List<DbParameter>();
|
||||
protected DbTransaction _transaction;
|
||||
protected DbConnection _connection;
|
||||
@ -31,6 +33,7 @@ namespace FreeSql.Internal.CommonProvider
|
||||
_table = _commonUtils.GetTableByEntity(typeof(T1));
|
||||
this.Where(_commonUtils.WhereObject(_table, "", dywhere));
|
||||
if (_orm.CodeFirst.IsAutoSyncStructure && typeof(T1) != typeof(object)) _orm.CodeFirst.SyncStructure<T1>();
|
||||
_whereGlobalFilter = _orm.GlobalFilter.GetFilters();
|
||||
}
|
||||
|
||||
protected void ClearData()
|
||||
@ -38,6 +41,7 @@ namespace FreeSql.Internal.CommonProvider
|
||||
_where.Clear();
|
||||
_whereTimes = 0;
|
||||
_params.Clear();
|
||||
_whereGlobalFilter = _orm.GlobalFilter.GetFilters();
|
||||
}
|
||||
|
||||
public IDelete<T1> WithTransaction(DbTransaction transaction)
|
||||
@ -99,6 +103,24 @@ namespace FreeSql.Internal.CommonProvider
|
||||
public IDelete<T1> WhereExists<TEntity2>(ISelect<TEntity2> select, bool notExists = false) where TEntity2 : class => this.Where($"{(notExists ? "NOT " : "")}EXISTS({select.ToSql("1")})");
|
||||
public IDelete<T1> WhereDynamic(object dywhere) => this.Where(_commonUtils.WhereObject(_table, "", dywhere));
|
||||
|
||||
public IDelete<T1> DisableGlobalFilter(params string[] name)
|
||||
{
|
||||
if (_whereGlobalFilter.Any() == false) return this;
|
||||
if (name?.Any() != true)
|
||||
{
|
||||
_whereGlobalFilter.Clear();
|
||||
return this;
|
||||
}
|
||||
foreach (var n in name)
|
||||
{
|
||||
if (n == null) continue;
|
||||
var idx = _whereGlobalFilter.FindIndex(a => string.Compare(a.Name, n, true) == 0);
|
||||
if (idx == -1) continue;
|
||||
_whereGlobalFilter.RemoveAt(idx);
|
||||
}
|
||||
return this;
|
||||
}
|
||||
|
||||
protected string TableRuleInvoke()
|
||||
{
|
||||
if (_tableRule == null) return _table.DbName;
|
||||
@ -123,6 +145,18 @@ namespace FreeSql.Internal.CommonProvider
|
||||
return this;
|
||||
}
|
||||
|
||||
public string ToSql() => _whereTimes <= 0 ? null : new StringBuilder().Append("DELETE FROM ").Append(_commonUtils.QuoteSqlName(TableRuleInvoke())).Append(" WHERE ").Append(_where).ToString();
|
||||
public string ToSql()
|
||||
{
|
||||
if (_whereTimes <= 0) return null;
|
||||
var sb = new StringBuilder().Append("DELETE FROM ").Append(_commonUtils.QuoteSqlName(TableRuleInvoke())).Append(" WHERE ").Append(_where);
|
||||
|
||||
if (_whereGlobalFilter.Any())
|
||||
{
|
||||
var globalFilterCondi = _commonExpression.GetWhereCascadeSql(new SelectTableInfo { Table = _table }, _whereGlobalFilter.Select(a => a.Where).ToList());
|
||||
if (string.IsNullOrEmpty(globalFilterCondi) == false)
|
||||
sb.Append(" AND ").Append(globalFilterCondi);
|
||||
}
|
||||
return sb.ToString();
|
||||
}
|
||||
}
|
||||
}
|
||||
|
@ -35,6 +35,7 @@ namespace FreeSql.Internal.CommonProvider
|
||||
protected bool _distinct;
|
||||
protected Expression _selectExpression;
|
||||
protected List<LambdaExpression> _whereCascadeExpression = new List<LambdaExpression>();
|
||||
protected List<GlobalFilter.Item> _whereGlobalFilter;
|
||||
|
||||
bool _isDisponse = false;
|
||||
~Select0Provider()
|
||||
@ -50,6 +51,8 @@ namespace FreeSql.Internal.CommonProvider
|
||||
_includeToList.Clear();
|
||||
_selectExpression = null;
|
||||
_whereCascadeExpression.Clear();
|
||||
_whereGlobalFilter = _orm.GlobalFilter.GetFilters();
|
||||
_whereCascadeExpression.AddRange(_whereGlobalFilter.Select(a => a.Where));
|
||||
}
|
||||
public static void CopyData(Select0Provider<TSelect, T1> from, object to, ReadOnlyCollection<ParameterExpression> lambParms)
|
||||
{
|
||||
@ -93,7 +96,8 @@ namespace FreeSql.Internal.CommonProvider
|
||||
toType.GetField("_includeToList", BindingFlags.Instance | BindingFlags.NonPublic)?.SetValue(to, from._includeToList);
|
||||
toType.GetField("_distinct", BindingFlags.Instance | BindingFlags.NonPublic)?.SetValue(to, from._distinct);
|
||||
toType.GetField("_selectExpression", BindingFlags.Instance | BindingFlags.NonPublic)?.SetValue(to, from._selectExpression);
|
||||
toType.GetField("_whereMultiExpression", BindingFlags.Instance | BindingFlags.NonPublic)?.SetValue(to, from._whereCascadeExpression);
|
||||
toType.GetField("_whereCascadeExpression", BindingFlags.Instance | BindingFlags.NonPublic)?.SetValue(to, from._whereCascadeExpression);
|
||||
toType.GetField("_whereGlobalFilter", BindingFlags.Instance | BindingFlags.NonPublic)?.SetValue(to, from._whereGlobalFilter);
|
||||
}
|
||||
|
||||
public Select0Provider(IFreeSql orm, CommonUtils commonUtils, CommonExpression commonExpression, object dywhere)
|
||||
@ -884,6 +888,25 @@ namespace FreeSql.Internal.CommonProvider
|
||||
if (parms != null) _params.AddRange(_commonUtils.GetDbParamtersByObject(sql, parms));
|
||||
return this as TSelect;
|
||||
}
|
||||
public TSelect DisableGlobalFilter(params string[] name)
|
||||
{
|
||||
if (_whereGlobalFilter.Any() == false) return this as TSelect;
|
||||
if (name?.Any() != true)
|
||||
{
|
||||
_whereCascadeExpression.RemoveRange(0, _whereGlobalFilter.Count);
|
||||
_whereGlobalFilter.Clear();
|
||||
return this as TSelect;
|
||||
}
|
||||
foreach (var n in name)
|
||||
{
|
||||
if (n == null) continue;
|
||||
var idx = _whereGlobalFilter.FindIndex(a => string.Compare(a.Name, n, true) == 0);
|
||||
if (idx == -1) continue;
|
||||
_whereCascadeExpression.RemoveAt(idx);
|
||||
_whereGlobalFilter.RemoveAt(idx);
|
||||
}
|
||||
return this as TSelect;
|
||||
}
|
||||
#region common
|
||||
|
||||
protected TMember InternalAvg<TMember>(Expression exp) => this.ToList<TMember>($"avg({_commonExpression.ExpressionSelectColumn_MemberAccess(_tables, null, SelectTableInfoType.From, exp, true, null)})").FirstOrDefault();
|
||||
|
@ -22,7 +22,8 @@ namespace FreeSql.Internal.CommonProvider
|
||||
{
|
||||
public Select1Provider(IFreeSql orm, CommonUtils commonUtils, CommonExpression commonExpression, object dywhere) : base(orm, commonUtils, commonExpression, dywhere)
|
||||
{
|
||||
|
||||
_whereGlobalFilter = _orm.GlobalFilter.GetFilters();
|
||||
_whereCascadeExpression.AddRange(_whereGlobalFilter.Select(a => a.Where));
|
||||
}
|
||||
|
||||
protected ISelect<T1> InternalFrom(LambdaExpression lambdaExp)
|
||||
@ -575,7 +576,7 @@ namespace FreeSql.Internal.CommonProvider
|
||||
foreach (var item in list)
|
||||
setListValue(item, null);
|
||||
|
||||
var subSelect = _orm.Select<TNavigate>().WithConnection(_connection).WithTransaction(_transaction).TrackToList(_trackToList) as Select1Provider<TNavigate>;
|
||||
var subSelect = _orm.Select<TNavigate>().DisableGlobalFilter().WithConnection(_connection).WithTransaction(_transaction).TrackToList(_trackToList) as Select1Provider<TNavigate>;
|
||||
if (_tableRules?.Any() == true)
|
||||
foreach (var tr in _tableRules) subSelect.AsTable(tr);
|
||||
|
||||
|
@ -23,6 +23,7 @@ namespace FreeSql.Internal.CommonProvider
|
||||
protected TableInfo _table;
|
||||
protected Func<string, string> _tableRule;
|
||||
protected StringBuilder _where = new StringBuilder();
|
||||
protected List<GlobalFilter.Item> _whereGlobalFilter;
|
||||
protected StringBuilder _set = new StringBuilder();
|
||||
protected StringBuilder _setIncr = new StringBuilder();
|
||||
protected List<DbParameter> _params = new List<DbParameter>();
|
||||
@ -41,6 +42,7 @@ namespace FreeSql.Internal.CommonProvider
|
||||
this.Where(_commonUtils.WhereObject(_table, "", dywhere));
|
||||
if (_orm.CodeFirst.IsAutoSyncStructure && typeof(T1) != typeof(object)) _orm.CodeFirst.SyncStructure<T1>();
|
||||
IgnoreCanUpdate();
|
||||
_whereGlobalFilter = _orm.GlobalFilter.GetFilters();
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
@ -63,6 +65,7 @@ namespace FreeSql.Internal.CommonProvider
|
||||
_params.Clear();
|
||||
_paramsSource.Clear();
|
||||
IgnoreCanUpdate();
|
||||
_whereGlobalFilter = _orm.GlobalFilter.GetFilters();
|
||||
}
|
||||
|
||||
public IUpdate<T1> WithTransaction(DbTransaction transaction)
|
||||
@ -428,6 +431,24 @@ namespace FreeSql.Internal.CommonProvider
|
||||
public IUpdate<T1> WhereExists<TEntity2>(ISelect<TEntity2> select, bool notExists = false) where TEntity2 : class => this.Where($"{(notExists ? "NOT " : "")}EXISTS({select.ToSql("1")})");
|
||||
public IUpdate<T1> WhereDynamic(object dywhere) => this.Where(_commonUtils.WhereObject(_table, "", dywhere));
|
||||
|
||||
public IUpdate<T1> DisableGlobalFilter(params string[] name)
|
||||
{
|
||||
if (_whereGlobalFilter.Any() == false) return this;
|
||||
if (name?.Any() != true)
|
||||
{
|
||||
_whereGlobalFilter.Clear();
|
||||
return this;
|
||||
}
|
||||
foreach (var n in name)
|
||||
{
|
||||
if (n == null) continue;
|
||||
var idx = _whereGlobalFilter.FindIndex(a => string.Compare(a.Name, n, true) == 0);
|
||||
if (idx == -1) continue;
|
||||
_whereGlobalFilter.RemoveAt(idx);
|
||||
}
|
||||
return this;
|
||||
}
|
||||
|
||||
protected string WhereCaseSource(string CsName, Func<string, string> thenValue)
|
||||
{
|
||||
if (_source.Any() == false) return null;
|
||||
@ -611,6 +632,13 @@ namespace FreeSql.Internal.CommonProvider
|
||||
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.Select(a => a.Where).ToList());
|
||||
if (string.IsNullOrEmpty(globalFilterCondi) == false)
|
||||
sb.Append(" AND ").Append(globalFilterCondi);
|
||||
}
|
||||
|
||||
if (_table.VersionColumn != null)
|
||||
{
|
||||
var versionCondi = WhereCaseSource(_table.VersionColumn.CsName, sqlval => sqlval);
|
||||
|
@ -85,7 +85,6 @@ namespace FreeSql.Internal
|
||||
{
|
||||
if (!string.IsNullOrEmpty(trytb.Name)) attr.Name = trytb.Name;
|
||||
if (!string.IsNullOrEmpty(trytb.OldName)) attr.OldName = trytb.OldName;
|
||||
if (!string.IsNullOrEmpty(trytb.SelectFilter)) attr.SelectFilter = trytb.SelectFilter;
|
||||
if (trytb._DisableSyncStructure != null) attr._DisableSyncStructure = trytb.DisableSyncStructure;
|
||||
}
|
||||
var attrs = type.GetCustomAttributes(typeof(TableAttribute), false);
|
||||
@ -95,12 +94,10 @@ namespace FreeSql.Internal
|
||||
if (tryattr == null) continue;
|
||||
if (!string.IsNullOrEmpty(tryattr.Name)) attr.Name = tryattr.Name;
|
||||
if (!string.IsNullOrEmpty(tryattr.OldName)) attr.OldName = tryattr.OldName;
|
||||
if (!string.IsNullOrEmpty(tryattr.SelectFilter)) attr.SelectFilter = tryattr.SelectFilter;
|
||||
if (tryattr._DisableSyncStructure != null) attr._DisableSyncStructure = tryattr.DisableSyncStructure;
|
||||
}
|
||||
if (!string.IsNullOrEmpty(attr.Name)) return attr;
|
||||
if (!string.IsNullOrEmpty(attr.OldName)) return attr;
|
||||
if (!string.IsNullOrEmpty(attr.SelectFilter)) return attr;
|
||||
if (attr._DisableSyncStructure != null) return attr;
|
||||
return null;
|
||||
}
|
||||
|
43
FreeSql/Internal/GlobalFilter.cs
Normal file
43
FreeSql/Internal/GlobalFilter.cs
Normal file
@ -0,0 +1,43 @@
|
||||
using System;
|
||||
using System.Collections.Concurrent;
|
||||
using System.Collections.Generic;
|
||||
using System.Linq;
|
||||
using System.Linq.Expressions;
|
||||
using System.Text;
|
||||
|
||||
namespace FreeSql.Internal
|
||||
{
|
||||
public class GlobalFilter
|
||||
{
|
||||
ConcurrentDictionary<string, Item> _filters = new ConcurrentDictionary<string, Item>(StringComparer.CurrentCultureIgnoreCase);
|
||||
int _id = 0;
|
||||
|
||||
public class Item
|
||||
{
|
||||
public int Id { get; internal set; }
|
||||
public string Name { get; internal set; }
|
||||
public LambdaExpression Where { get; internal set; }
|
||||
}
|
||||
/// <summary>
|
||||
/// 创建一个过滤器
|
||||
/// </summary>
|
||||
/// <typeparam name="TEntity"></typeparam>
|
||||
/// <param name="name">名字</param>
|
||||
/// <param name="where">表达式</param>
|
||||
/// <returns></returns>
|
||||
public GlobalFilter Apply<TEntity>(string name, Expression<Func<TEntity, bool>> where)
|
||||
{
|
||||
if (name == null) throw new ArgumentNullException(nameof(name));
|
||||
if (where == null) return this;
|
||||
|
||||
_filters.TryGetValue(name, out var item);
|
||||
if (item == null) item = new Item { Id = ++_id, Name = name };
|
||||
item.Where = where;
|
||||
_filters.AddOrUpdate(name, item, (_, __) => item);
|
||||
return this;
|
||||
}
|
||||
public void Remove(string name) => _filters.TryRemove(name ?? throw new ArgumentNullException(nameof(name)), out var _);
|
||||
|
||||
public List<Item> GetFilters() => _filters.Values.OrderBy(a => a.Id).ToList();
|
||||
}
|
||||
}
|
@ -21,7 +21,6 @@ namespace FreeSql.Internal.Model
|
||||
public string CsName { get; set; }
|
||||
public string DbName { get; set; }
|
||||
public string DbOldName { get; set; }
|
||||
public string SelectFilter { get; set; }
|
||||
public bool DisableSyncStructure { get; set; }
|
||||
|
||||
public ColumnInfo VersionColumn { get; set; }
|
||||
|
@ -65,7 +65,6 @@ namespace FreeSql.Internal
|
||||
trytb.DbName = trytb.DbName.ToUpper();
|
||||
trytb.DbOldName = trytb.DbOldName?.ToUpper();
|
||||
}
|
||||
trytb.SelectFilter = tbattr?.SelectFilter;
|
||||
if (tbattr != null) trytb.DisableSyncStructure = tbattr.DisableSyncStructure;
|
||||
var propsLazy = new List<(PropertyInfo, bool, bool)>();
|
||||
var propsNavObjs = new List<PropertyInfo>();
|
||||
|
@ -87,12 +87,6 @@ namespace FreeSql.MySql.Curd
|
||||
if (!string.IsNullOrEmpty(_tables[0].Cascade))
|
||||
sbnav.Append(" AND (").Append(_tables[0].Cascade).Append(")");
|
||||
|
||||
foreach (var tb in _tables)
|
||||
{
|
||||
if (tb.Type == SelectTableInfoType.Parent) continue;
|
||||
if (string.IsNullOrEmpty(tb.Table.SelectFilter) == false)
|
||||
sbnav.Append(" AND (").Append(tb.Table.SelectFilter.Replace("a.", $"{tb.Alias}.")).Append(")");
|
||||
}
|
||||
if (sbnav.Length > 0)
|
||||
{
|
||||
sb.Append(" \r\nWHERE ").Append(sbnav.Remove(0, 5));
|
||||
|
@ -69,9 +69,10 @@ namespace FreeSql.MySql
|
||||
internal CommonExpression InternalCommonExpression { get; }
|
||||
|
||||
public void Transaction(Action handler) => Ado.Transaction(handler);
|
||||
|
||||
public void Transaction(Action handler, TimeSpan timeout) => Ado.Transaction(handler, timeout);
|
||||
|
||||
public GlobalFilter GlobalFilter { get; } = new GlobalFilter();
|
||||
|
||||
~MySqlProvider()
|
||||
{
|
||||
this.Dispose();
|
||||
|
@ -101,12 +101,6 @@ namespace FreeSql.Odbc.Default
|
||||
if (!string.IsNullOrEmpty(_tables[0].Cascade))
|
||||
sbnav.Append(" AND (").Append(_tables[0].Cascade).Append(")");
|
||||
|
||||
foreach (var tb in _tables)
|
||||
{
|
||||
if (tb.Type == SelectTableInfoType.Parent) continue;
|
||||
if (string.IsNullOrEmpty(tb.Table.SelectFilter) == false)
|
||||
sbnav.Append(" AND (").Append(tb.Table.SelectFilter.Replace("a.", $"{tb.Alias}.")).Append(")");
|
||||
}
|
||||
if (sbnav.Length > 0)
|
||||
{
|
||||
sb.Append(" \r\nWHERE ").Append(sbnav.Remove(0, 5));
|
||||
|
@ -82,9 +82,10 @@ namespace FreeSql.Odbc.Default
|
||||
internal CommonExpression InternalCommonExpression { get; }
|
||||
|
||||
public void Transaction(Action handler) => Ado.Transaction(handler);
|
||||
|
||||
public void Transaction(Action handler, TimeSpan timeout) => Ado.Transaction(handler, timeout);
|
||||
|
||||
public GlobalFilter GlobalFilter { get; } = new GlobalFilter();
|
||||
|
||||
~OdbcProvider()
|
||||
{
|
||||
this.Dispose();
|
||||
|
@ -87,12 +87,6 @@ namespace FreeSql.Odbc.MySql
|
||||
if (!string.IsNullOrEmpty(_tables[0].Cascade))
|
||||
sbnav.Append(" AND (").Append(_tables[0].Cascade).Append(")");
|
||||
|
||||
foreach (var tb in _tables)
|
||||
{
|
||||
if (tb.Type == SelectTableInfoType.Parent) continue;
|
||||
if (string.IsNullOrEmpty(tb.Table.SelectFilter) == false)
|
||||
sbnav.Append(" AND (").Append(tb.Table.SelectFilter.Replace("a.", $"{tb.Alias}.")).Append(")");
|
||||
}
|
||||
if (sbnav.Length > 0)
|
||||
{
|
||||
sb.Append(" \r\nWHERE ").Append(sbnav.Remove(0, 5));
|
||||
|
@ -47,9 +47,10 @@ namespace FreeSql.Odbc.MySql
|
||||
internal CommonExpression InternalCommonExpression { get; }
|
||||
|
||||
public void Transaction(Action handler) => Ado.Transaction(handler);
|
||||
|
||||
public void Transaction(Action handler, TimeSpan timeout) => Ado.Transaction(handler, timeout);
|
||||
|
||||
public GlobalFilter GlobalFilter { get; } = new GlobalFilter();
|
||||
|
||||
~OdbcMySqlProvider()
|
||||
{
|
||||
this.Dispose();
|
||||
|
@ -89,12 +89,6 @@ namespace FreeSql.Odbc.Oracle
|
||||
if (!string.IsNullOrEmpty(_tables[0].Cascade))
|
||||
sbnav.Append(" AND (").Append(_tables[0].Cascade).Append(")");
|
||||
|
||||
foreach (var tb in _tables)
|
||||
{
|
||||
if (tb.Type == SelectTableInfoType.Parent) continue;
|
||||
if (string.IsNullOrEmpty(tb.Table.SelectFilter) == false)
|
||||
sbnav.Append(" AND (").Append(tb.Table.SelectFilter.Replace("a.", $"{tb.Alias}.")).Append(")");
|
||||
}
|
||||
if (string.IsNullOrEmpty(_orderby) && (_skip > 0 || _limit > 0))
|
||||
sbnav.Append(" AND ROWNUM < ").Append(_skip + _limit + 1);
|
||||
if (sbnav.Length > 0)
|
||||
|
@ -48,9 +48,10 @@ namespace FreeSql.Odbc.Oracle
|
||||
internal CommonExpression InternalCommonExpression { get; }
|
||||
|
||||
public void Transaction(Action handler) => Ado.Transaction(handler);
|
||||
|
||||
public void Transaction(Action handler, TimeSpan timeout) => Ado.Transaction(handler, timeout);
|
||||
|
||||
public GlobalFilter GlobalFilter { get; } = new GlobalFilter();
|
||||
|
||||
~OdbcOracleProvider()
|
||||
{
|
||||
this.Dispose();
|
||||
|
@ -87,12 +87,6 @@ namespace FreeSql.Odbc.PostgreSQL
|
||||
if (!string.IsNullOrEmpty(_tables[0].Cascade))
|
||||
sbnav.Append(" AND (").Append(_tables[0].Cascade).Append(")");
|
||||
|
||||
foreach (var tb in _tables)
|
||||
{
|
||||
if (tb.Type == SelectTableInfoType.Parent) continue;
|
||||
if (string.IsNullOrEmpty(tb.Table.SelectFilter) == false)
|
||||
sbnav.Append(" AND (").Append(tb.Table.SelectFilter.Replace("a.", $"{tb.Alias}.")).Append(")");
|
||||
}
|
||||
if (sbnav.Length > 0)
|
||||
{
|
||||
sb.Append(" \r\nWHERE ").Append(sbnav.Remove(0, 5));
|
||||
|
@ -45,9 +45,10 @@ namespace FreeSql.Odbc.PostgreSQL
|
||||
internal CommonExpression InternalCommonExpression { get; }
|
||||
|
||||
public void Transaction(Action handler) => Ado.Transaction(handler);
|
||||
|
||||
public void Transaction(Action handler, TimeSpan timeout) => Ado.Transaction(handler, timeout);
|
||||
|
||||
public GlobalFilter GlobalFilter { get; } = new GlobalFilter();
|
||||
|
||||
~OdbcPostgreSQLProvider()
|
||||
{
|
||||
this.Dispose();
|
||||
|
@ -105,12 +105,6 @@ namespace FreeSql.Odbc.SqlServer
|
||||
if (!string.IsNullOrEmpty(_tables[0].Cascade))
|
||||
sbnav.Append(" AND (").Append(_tables[0].Cascade).Append(")");
|
||||
|
||||
foreach (var tb in _tables)
|
||||
{
|
||||
if (tb.Type == SelectTableInfoType.Parent) continue;
|
||||
if (string.IsNullOrEmpty(tb.Table.SelectFilter) == false)
|
||||
sbnav.Append(" AND (").Append(tb.Table.SelectFilter.Replace("a.", $"{tb.Alias}.")).Append(")");
|
||||
}
|
||||
if (sbnav.Length > 0)
|
||||
{
|
||||
sb.Append(" \r\nWHERE ").Append(sbnav.Remove(0, 5));
|
||||
@ -211,12 +205,6 @@ namespace FreeSql.Odbc.SqlServer
|
||||
if (!string.IsNullOrEmpty(_tables[0].Cascade))
|
||||
sbnav.Append(" AND (").Append(_tables[0].Cascade).Append(")");
|
||||
|
||||
foreach (var tb in _tables)
|
||||
{
|
||||
if (tb.Type == SelectTableInfoType.Parent) continue;
|
||||
if (string.IsNullOrEmpty(tb.Table.SelectFilter) == false)
|
||||
sbnav.Append(" AND (").Append(tb.Table.SelectFilter.Replace("a.", $"{tb.Alias}.")).Append(")");
|
||||
}
|
||||
if (sbnav.Length > 0)
|
||||
{
|
||||
sb.Append(" \r\nWHERE ").Append(sbnav.Remove(0, 5));
|
||||
|
@ -53,9 +53,10 @@ namespace FreeSql.Odbc.SqlServer
|
||||
internal CommonExpression InternalCommonExpression { get; }
|
||||
|
||||
public void Transaction(Action handler) => Ado.Transaction(handler);
|
||||
|
||||
public void Transaction(Action handler, TimeSpan timeout) => Ado.Transaction(handler, timeout);
|
||||
|
||||
public GlobalFilter GlobalFilter { get; } = new GlobalFilter();
|
||||
|
||||
~OdbcSqlServerProvider()
|
||||
{
|
||||
this.Dispose();
|
||||
|
@ -89,12 +89,6 @@ namespace FreeSql.Oracle.Curd
|
||||
if (!string.IsNullOrEmpty(_tables[0].Cascade))
|
||||
sbnav.Append(" AND (").Append(_tables[0].Cascade).Append(")");
|
||||
|
||||
foreach (var tb in _tables)
|
||||
{
|
||||
if (tb.Type == SelectTableInfoType.Parent) continue;
|
||||
if (string.IsNullOrEmpty(tb.Table.SelectFilter) == false)
|
||||
sbnav.Append(" AND (").Append(tb.Table.SelectFilter.Replace("a.", $"{tb.Alias}.")).Append(")");
|
||||
}
|
||||
if (string.IsNullOrEmpty(_orderby) && (_skip > 0 || _limit > 0))
|
||||
sbnav.Append(" AND ROWNUM < ").Append(_skip + _limit + 1);
|
||||
if (sbnav.Length > 0)
|
||||
|
@ -43,9 +43,10 @@ namespace FreeSql.Oracle
|
||||
internal CommonExpression InternalCommonExpression { get; }
|
||||
|
||||
public void Transaction(Action handler) => Ado.Transaction(handler);
|
||||
|
||||
public void Transaction(Action handler, TimeSpan timeout) => Ado.Transaction(handler, timeout);
|
||||
|
||||
public GlobalFilter GlobalFilter { get; } = new GlobalFilter();
|
||||
|
||||
~OracleProvider()
|
||||
{
|
||||
this.Dispose();
|
||||
|
@ -87,12 +87,6 @@ namespace FreeSql.PostgreSQL.Curd
|
||||
if (!string.IsNullOrEmpty(_tables[0].Cascade))
|
||||
sbnav.Append(" AND (").Append(_tables[0].Cascade).Append(")");
|
||||
|
||||
foreach (var tb in _tables)
|
||||
{
|
||||
if (tb.Type == SelectTableInfoType.Parent) continue;
|
||||
if (string.IsNullOrEmpty(tb.Table.SelectFilter) == false)
|
||||
sbnav.Append(" AND (").Append(tb.Table.SelectFilter.Replace("a.", $"{tb.Alias}.")).Append(")");
|
||||
}
|
||||
if (sbnav.Length > 0)
|
||||
{
|
||||
sb.Append(" \r\nWHERE ").Append(sbnav.Remove(0, 5));
|
||||
|
@ -96,9 +96,10 @@ namespace FreeSql.PostgreSQL
|
||||
internal CommonExpression InternalCommonExpression { get; }
|
||||
|
||||
public void Transaction(Action handler) => Ado.Transaction(handler);
|
||||
|
||||
public void Transaction(Action handler, TimeSpan timeout) => Ado.Transaction(handler, timeout);
|
||||
|
||||
public GlobalFilter GlobalFilter { get; } = new GlobalFilter();
|
||||
|
||||
~PostgreSQLProvider()
|
||||
{
|
||||
this.Dispose();
|
||||
|
@ -105,12 +105,6 @@ namespace FreeSql.SqlServer.Curd
|
||||
if (!string.IsNullOrEmpty(_tables[0].Cascade))
|
||||
sbnav.Append(" AND (").Append(_tables[0].Cascade).Append(")");
|
||||
|
||||
foreach (var tb in _tables)
|
||||
{
|
||||
if (tb.Type == SelectTableInfoType.Parent) continue;
|
||||
if (string.IsNullOrEmpty(tb.Table.SelectFilter) == false)
|
||||
sbnav.Append(" AND (").Append(tb.Table.SelectFilter.Replace("a.", $"{tb.Alias}.")).Append(")");
|
||||
}
|
||||
if (sbnav.Length > 0)
|
||||
{
|
||||
sb.Append(" \r\nWHERE ").Append(sbnav.Remove(0, 5));
|
||||
@ -211,12 +205,6 @@ namespace FreeSql.SqlServer.Curd
|
||||
if (!string.IsNullOrEmpty(_tables[0].Cascade))
|
||||
sbnav.Append(" AND (").Append(_tables[0].Cascade).Append(")");
|
||||
|
||||
foreach (var tb in _tables)
|
||||
{
|
||||
if (tb.Type == SelectTableInfoType.Parent) continue;
|
||||
if (string.IsNullOrEmpty(tb.Table.SelectFilter) == false)
|
||||
sbnav.Append(" AND (").Append(tb.Table.SelectFilter.Replace("a.", $"{tb.Alias}.")).Append(")");
|
||||
}
|
||||
if (sbnav.Length > 0)
|
||||
{
|
||||
sb.Append(" \r\nWHERE ").Append(sbnav.Remove(0, 5));
|
||||
|
@ -54,9 +54,10 @@ namespace FreeSql.SqlServer
|
||||
internal CommonExpression InternalCommonExpression { get; }
|
||||
|
||||
public void Transaction(Action handler) => Ado.Transaction(handler);
|
||||
|
||||
public void Transaction(Action handler, TimeSpan timeout) => Ado.Transaction(handler, timeout);
|
||||
|
||||
public GlobalFilter GlobalFilter { get; } = new GlobalFilter();
|
||||
|
||||
~SqlServerProvider()
|
||||
{
|
||||
this.Dispose();
|
||||
|
@ -87,12 +87,6 @@ namespace FreeSql.Sqlite.Curd
|
||||
if (!string.IsNullOrEmpty(_tables[0].Cascade))
|
||||
sbnav.Append(" AND (").Append(_tables[0].Cascade).Append(")");
|
||||
|
||||
foreach (var tb in _tables)
|
||||
{
|
||||
if (tb.Type == SelectTableInfoType.Parent) continue;
|
||||
if (string.IsNullOrEmpty(tb.Table.SelectFilter) == false)
|
||||
sbnav.Append(" AND (").Append(tb.Table.SelectFilter.Replace("a.", $"{tb.Alias}.")).Append(")");
|
||||
}
|
||||
if (sbnav.Length > 0)
|
||||
{
|
||||
sb.Append(" \r\nWHERE ").Append(sbnav.Remove(0, 5));
|
||||
|
@ -42,9 +42,10 @@ namespace FreeSql.Sqlite
|
||||
internal CommonExpression InternalCommonExpression { get; }
|
||||
|
||||
public void Transaction(Action handler) => Ado.Transaction(handler);
|
||||
|
||||
public void Transaction(Action handler, TimeSpan timeout) => Ado.Transaction(handler, timeout);
|
||||
|
||||
public GlobalFilter GlobalFilter { get; } = new GlobalFilter();
|
||||
|
||||
~SqliteProvider()
|
||||
{
|
||||
this.Dispose();
|
||||
|
Loading…
x
Reference in New Issue
Block a user