Skip to content
This repository was archived by the owner on Dec 24, 2022. It is now read-only.

Commit 5bb5533

Browse files
committed
Add different Soft Delete examples
1 parent db43c91 commit 5bb5533

File tree

3 files changed

+65
-0
lines changed

3 files changed

+65
-0
lines changed

src/ServiceStack.OrmLite/Expressions/SqlExpression.cs

Lines changed: 7 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -44,6 +44,7 @@ public abstract partial class SqlExpression<T> : ISqlExpression, IHasUntypedSqlE
4444
public IOrmLiteDialectProvider DialectProvider { get; set; }
4545
public List<IDbDataParameter> Params { get; set; }
4646
public Func<string,string> SqlFilter { get; set; }
47+
public static Action<SqlExpression<T>> SelectFilter { get; set; }
4748

4849
protected string Sep => sep;
4950

@@ -1070,6 +1071,9 @@ public virtual void PrepareUpdateStatement(IDbCommand dbCmd, T item, bool exclud
10701071

10711072
public virtual string ToSelectStatement()
10721073
{
1074+
SelectFilter?.Invoke(this);
1075+
OrmLiteConfig.SqlExpressionSelectFilter?.Invoke(GetUntyped());
1076+
10731077
var sql = DialectProvider
10741078
.ToSelectStatement(modelDef, SelectExpression, BodyExpression, OrderByExpression, Offset, Rows);
10751079

@@ -1080,6 +1084,9 @@ public virtual string ToSelectStatement()
10801084

10811085
public virtual string ToCountStatement()
10821086
{
1087+
SelectFilter?.Invoke(this);
1088+
OrmLiteConfig.SqlExpressionSelectFilter?.Invoke(GetUntyped());
1089+
10831090
var sql = "SELECT COUNT(*)" + BodyExpression;
10841091

10851092
return SqlFilter != null

src/ServiceStack.OrmLite/OrmLiteConfig.cs

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -180,6 +180,7 @@ public static IOrmLiteExecFilter ExecFilter
180180

181181
public static Action<IDbCommand, object> InsertFilter { get; set; }
182182
public static Action<IDbCommand, object> UpdateFilter { get; set; }
183+
public static Action<IUntypedSqlExpression> SqlExpressionSelectFilter { get; set; }
183184

184185
public static Func<string, string> StringFilter { get; set; }
185186

tests/ServiceStack.OrmLite.Tests/UseCase/SoftDeleteUseCase.cs

Lines changed: 57 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -48,5 +48,62 @@ public void Can_add_generic_soft_delete_filter_to_SqlExpression()
4848
Assert.That(result, Is.Null);
4949
}
5050
}
51+
52+
[Test]
53+
public void Can_add_generic_soft_delete_filter_to_SqlExpression_using_SelectFilter()
54+
{
55+
using (var db = OpenDbConnection())
56+
{
57+
SqlExpression<ModelWithSoftDelete>.SelectFilter = q => q.Where(x => x.IsDeleted != true);
58+
59+
db.DropAndCreateTable<ModelWithSoftDelete>();
60+
61+
db.Insert(new ModelWithSoftDelete { Name = "foo" });
62+
db.Insert(new ModelWithSoftDelete { Name = "bar", IsDeleted = true });
63+
64+
var results = db.Select(db.From<ModelWithSoftDelete>());
65+
66+
Assert.That(results.Count, Is.EqualTo(1));
67+
Assert.That(results[0].Name, Is.EqualTo("foo"));
68+
69+
var result = db.Single(db.From<ModelWithSoftDelete>().Where(x => x.Name == "foo"));
70+
Assert.That(result.Name, Is.EqualTo("foo"));
71+
result = db.Single(db.From<ModelWithSoftDelete>().Where(x => x.Name == "bar"));
72+
Assert.That(result, Is.Null);
73+
74+
SqlExpression<ModelWithSoftDelete>.SelectFilter = null;
75+
}
76+
}
77+
78+
[Test]
79+
public void Can_add_generic_soft_delete_filter_to_SqlExpression_using_SqlExpressionSelectFilter()
80+
{
81+
using (var db = OpenDbConnection())
82+
{
83+
OrmLiteConfig.SqlExpressionSelectFilter = q =>
84+
{
85+
if (q.ModelDef.ModelType.HasInterface(typeof(ISoftDelete)))
86+
{
87+
q.Where<ISoftDelete>(x => x.IsDeleted != true);
88+
}
89+
};
90+
91+
db.DropAndCreateTable<ModelWithSoftDelete>();
92+
db.Insert(new ModelWithSoftDelete { Name = "foo" });
93+
db.Insert(new ModelWithSoftDelete { Name = "bar", IsDeleted = true });
94+
95+
var results = db.Select(db.From<ModelWithSoftDelete>());
96+
97+
Assert.That(results.Count, Is.EqualTo(1));
98+
Assert.That(results[0].Name, Is.EqualTo("foo"));
99+
100+
var result = db.Single(db.From<ModelWithSoftDelete>().Where(x => x.Name == "foo"));
101+
Assert.That(result.Name, Is.EqualTo("foo"));
102+
result = db.Single(db.From<ModelWithSoftDelete>().Where(x => x.Name == "bar"));
103+
Assert.That(result, Is.Null);
104+
105+
OrmLiteConfig.SqlExpressionSelectFilter = null;
106+
}
107+
}
51108
}
52109
}

0 commit comments

Comments
 (0)