Extend typed SQL DSL with pattern helpers and typed subqueries

This commit is contained in:
root
2026-02-27 08:36:47 +01:00
parent 97ab4c1e15
commit f293bd95c6
5 changed files with 200 additions and 6 deletions

View File

@@ -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()
{