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

Commit 56b3114

Browse files
committed
Add new sub expression with custom sql expression test
1 parent ffe988c commit 56b3114

File tree

1 file changed

+41
-0
lines changed

1 file changed

+41
-0
lines changed

tests/ServiceStack.OrmLite.Tests/Issues/SqlExpressionSubSqlExpressionIssue.cs

Lines changed: 41 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1,9 +1,11 @@
11
using System;
22
using System.Data;
33
using System.Linq;
4+
using System.Linq.Expressions;
45
using NUnit.Framework;
56
using ServiceStack.DataAnnotations;
67
using ServiceStack.Logging;
8+
using ServiceStack.OrmLite.SqlServer;
79
using ServiceStack.Text;
810

911
namespace ServiceStack.OrmLite.Tests.Issues
@@ -238,6 +240,45 @@ public void SubExpressions_TestMethod3()
238240
w.TestMethod3();
239241
}
240242
}
243+
244+
[Test]
245+
public void SubExpressions_with_CustomSqlExpression_and_merging_multiple_predicates()
246+
{
247+
var db = new OrmLiteConnection(new OrmLiteConnectionFactory("test", new CustomSqlServerDialectProvider()));
248+
249+
var q = db.From<MarginItem>().Where(s => Sql.In(s.Identity,
250+
db.From<WaybillItem>()
251+
.Where(w => Sql.In(w.WaybillId,
252+
db.From<Waybill>()
253+
.Where(bb => bb.Identity == null)
254+
.And(bb => bb.Name == "test")
255+
.Select(ww => ww.Identity))
256+
)
257+
.Select(b => b.MarginItemId)));
258+
259+
Assert.That(q.ToSelectStatement().NormalizeSql(), Is.StringContaining("@"));
260+
}
261+
}
262+
263+
class CustomSqlExpression<T> : SqlServerExpression<T>
264+
{
265+
private Expression<Func<T, bool>> _whereExpression;
266+
267+
public CustomSqlExpression(IOrmLiteDialectProvider dialectProvider) : base(dialectProvider) {}
268+
269+
public override SqlExpression<T> And(Expression<Func<T, bool>> predicate)
270+
{
271+
_whereExpression = _whereExpression == null ? predicate : predicate.And(_whereExpression);
272+
return base.And(predicate);
273+
}
274+
}
275+
276+
class CustomSqlServerDialectProvider : SqlServerOrmLiteDialectProvider
277+
{
278+
public override SqlExpression<T> SqlExpression<T>()
279+
{
280+
return new CustomSqlExpression<T>(this);
281+
}
241282
}
242283

243284
public class WaybillItem : BaseObject

0 commit comments

Comments
 (0)