Extend typed SQL DSL with pattern helpers and typed subqueries
This commit is contained in:
@@ -130,6 +130,44 @@ namespace DynamORM.Tests.TypedSql
|
||||
NormalizeSql(cmd.CommandText()));
|
||||
}
|
||||
|
||||
[Test]
|
||||
public void TestWhereSqlSupportsNotIn()
|
||||
{
|
||||
var cmd = Database.FromTyped<TypedFluentUser>("u")
|
||||
.WhereSql(u => u.Col(x => x.Id).NotIn(1, 2))
|
||||
.SelectSql(u => u.Col(x => x.Id));
|
||||
|
||||
Assert.AreEqual(
|
||||
"SELECT u.\"id_user\" FROM \"sample_users\" AS u WHERE (u.\"id_user\" NOT IN([$0], [$1]))",
|
||||
NormalizeSql(cmd.CommandText()));
|
||||
}
|
||||
|
||||
[Test]
|
||||
public void TestWhereSqlSupportsEmptyNotIn()
|
||||
{
|
||||
var cmd = Database.FromTyped<TypedFluentUser>("u")
|
||||
.WhereSql(u => u.Col(x => x.Id).NotIn(new int[0]))
|
||||
.SelectSql(u => u.Col(x => x.Id));
|
||||
|
||||
Assert.AreEqual(
|
||||
"SELECT u.\"id_user\" FROM \"sample_users\" AS u WHERE (1 = 1)",
|
||||
NormalizeSql(cmd.CommandText()));
|
||||
}
|
||||
|
||||
[Test]
|
||||
public void TestWhereSqlSupportsPatternHelpers()
|
||||
{
|
||||
var cmd = Database.FromTyped<TypedFluentUser>("u")
|
||||
.WhereSql(u => u.Col(x => x.Code).StartsWith("AB")
|
||||
.And(u.Col(x => x.Code).EndsWith("YZ"))
|
||||
.And(u.Col(x => x.Code).Contains("MID")))
|
||||
.SelectSql(u => u.Col(x => x.Id));
|
||||
|
||||
Assert.AreEqual(
|
||||
"SELECT u.\"id_user\" FROM \"sample_users\" AS u WHERE (((u.\"user_code\" LIKE [$0]) AND (u.\"user_code\" LIKE [$1])) AND (u.\"user_code\" LIKE [$2]))",
|
||||
NormalizeSql(cmd.CommandText()));
|
||||
}
|
||||
|
||||
[Test]
|
||||
public void TestWhereSqlSupportsEmptyIn()
|
||||
{
|
||||
@@ -175,6 +213,17 @@ namespace DynamORM.Tests.TypedSql
|
||||
NormalizeSql(cmd.CommandText()));
|
||||
}
|
||||
|
||||
[Test]
|
||||
public void TestSelectSqlSupportsWildcardAll()
|
||||
{
|
||||
var cmd = Database.FromTyped<TypedFluentUser>("u")
|
||||
.SelectSql(u => u.All());
|
||||
|
||||
Assert.AreEqual(
|
||||
"SELECT u.* FROM \"sample_users\" AS u",
|
||||
NormalizeSql(cmd.CommandText()));
|
||||
}
|
||||
|
||||
[Test]
|
||||
public void TestSelectSqlSupportsScalarSubQuery()
|
||||
{
|
||||
@@ -206,6 +255,39 @@ namespace DynamORM.Tests.TypedSql
|
||||
NormalizeSql(cmd.CommandText()));
|
||||
}
|
||||
|
||||
[Test]
|
||||
public void TestSelectSqlSupportsTypedSubQueryHelper()
|
||||
{
|
||||
var cmd = Database.FromTyped<TypedFluentUser>("u")
|
||||
.SelectSql(u => Sql.SubQuery<TypedFluentUser, long>(
|
||||
Database,
|
||||
sq => sq
|
||||
.SelectSql(x => x.Col(a => a.Id))
|
||||
.WhereSql(x => x.Col(a => a.Code).Eq("A")),
|
||||
"x").As("sub_id"));
|
||||
|
||||
Assert.AreEqual(
|
||||
"SELECT (SELECT x.\"id_user\" FROM \"sample_users\" AS x WHERE (x.\"user_code\" = [$0])) AS \"sub_id\" FROM \"sample_users\" AS u",
|
||||
NormalizeSql(cmd.CommandText()));
|
||||
}
|
||||
|
||||
[Test]
|
||||
public void TestWhereSqlSupportsTypedExistsHelper()
|
||||
{
|
||||
var cmd = Database.FromTyped<TypedFluentUser>("u")
|
||||
.WhereSql(u => Sql.Exists<TypedFluentUser>(
|
||||
Database,
|
||||
sq => sq
|
||||
.SelectSql(x => x.Col(a => a.Id))
|
||||
.WhereSql(x => x.Col(a => a.Code).Eq("A")),
|
||||
"x"))
|
||||
.SelectSql(u => u.Col(x => x.Id));
|
||||
|
||||
Assert.AreEqual(
|
||||
"SELECT u.\"id_user\" FROM \"sample_users\" AS u WHERE (EXISTS (SELECT x.\"id_user\" FROM \"sample_users\" AS x WHERE (x.\"user_code\" = [$0])))",
|
||||
NormalizeSql(cmd.CommandText()));
|
||||
}
|
||||
|
||||
[Test]
|
||||
public void TestInsertSqlObjectProjection()
|
||||
{
|
||||
|
||||
Reference in New Issue
Block a user