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

Commit 7896092

Browse files
committed
When interface matches base table use base table def
1 parent b176031 commit 7896092

File tree

2 files changed

+47
-0
lines changed

2 files changed

+47
-0
lines changed

src/ServiceStack.OrmLite/Expressions/SqlExpression.cs

Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1980,6 +1980,11 @@ protected virtual string GetQuotedColumnName(ModelDefinition tableDef, string me
19801980
? fd.FieldName
19811981
: memberName;
19821982

1983+
if (tableDef.ModelType.IsInterface() && this.ModelDef.ModelType.HasInterface(tableDef.ModelType))
1984+
{
1985+
tableDef = this.ModelDef;
1986+
}
1987+
19831988
var includePrefix = PrefixFieldWithTableName && fd?.CustomSelect == null && !tableDef.ModelType.IsInterface();
19841989
return includePrefix
19851990
? DialectProvider.GetQuotedColumnName(tableDef, fieldName)

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

Lines changed: 42 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -17,6 +17,14 @@ public class ModelWithSoftDelete : ISoftDelete
1717
public bool IsDeleted { get; set; }
1818
}
1919

20+
public class ModelWithSoftDeleteJoin : ISoftDelete
21+
{
22+
[AutoIncrement]
23+
public int Id { get; set; }
24+
public string Name { get; set; }
25+
public bool IsDeleted { get; set; }
26+
}
27+
2028
public static class SqlExpressionExtensions
2129
{
2230
public static SqlExpression<T> OnlyActive<T>(this SqlExpression<T> q)
@@ -132,5 +140,39 @@ public void Can_add_generic_soft_delete_filter_to_SqlExpression_using_SqlExpress
132140
OrmLiteConfig.SqlExpressionSelectFilter = null;
133141
}
134142
}
143+
144+
[Test]
145+
public void Can_use_interface_condition_on_table_with_join()
146+
{
147+
using (var db = OpenDbConnection())
148+
{
149+
OrmLiteConfig.SqlExpressionSelectFilter = q =>
150+
{
151+
if (q.ModelDef.ModelType.HasInterface(typeof(ISoftDelete)))
152+
{
153+
q.Where<ISoftDelete>(x => x.IsDeleted != true);
154+
}
155+
};
156+
157+
db.DropAndCreateTable<ModelWithSoftDelete>();
158+
db.Insert(new ModelWithSoftDelete { Name = "foo" });
159+
db.Insert(new ModelWithSoftDelete { Name = "bar", IsDeleted = true });
160+
db.DropAndCreateTable<ModelWithSoftDeleteJoin>();
161+
db.Insert(new ModelWithSoftDeleteJoin { Name = "foo" });
162+
db.Insert(new ModelWithSoftDeleteJoin { Name = "bar", IsDeleted = true });
163+
164+
var result = db.Single(db.From<ModelWithSoftDelete>()
165+
.Join<ModelWithSoftDeleteJoin>((m, j) => m.Name == j.Name)
166+
.Where(x => x.Name == "foo"));
167+
Assert.That(result.Name, Is.EqualTo("foo"));
168+
169+
result = db.Single(db.From<ModelWithSoftDelete>()
170+
.Join<ModelWithSoftDeleteJoin>((m, j) => m.Name == j.Name)
171+
.Where(x => x.Name == "bar"));
172+
Assert.That(result, Is.Null);
173+
174+
OrmLiteConfig.SqlExpressionSelectFilter = null;
175+
}
176+
}
135177
}
136178
}

0 commit comments

Comments
 (0)