Expand typed join syntax with no lock, outer and custom join types
This commit is contained in:
102
DynamORM.Tests/Select/TypedFluentJoinSyntaxTests.cs
Normal file
102
DynamORM.Tests/Select/TypedFluentJoinSyntaxTests.cs
Normal file
@@ -0,0 +1,102 @@
|
||||
/*
|
||||
* DynamORM - Dynamic Object-Relational Mapping library.
|
||||
* Copyright (c) 2012-2026, Grzegorz Russek (grzegorz.russek@gmail.com)
|
||||
* All rights reserved.
|
||||
*/
|
||||
|
||||
using System.Linq;
|
||||
using DynamORM.Tests.Helpers;
|
||||
using NUnit.Framework;
|
||||
|
||||
namespace DynamORM.Tests.Select
|
||||
{
|
||||
[TestFixture]
|
||||
public class TypedFluentJoinSyntaxTests : TestsBase
|
||||
{
|
||||
[SetUp]
|
||||
public void SetUp()
|
||||
{
|
||||
CreateTestDatabase();
|
||||
CreateDynamicDatabase(
|
||||
DynamicDatabaseOptions.SingleConnection |
|
||||
DynamicDatabaseOptions.SingleTransaction |
|
||||
DynamicDatabaseOptions.SupportNoLock);
|
||||
}
|
||||
|
||||
[TearDown]
|
||||
public void TearDown()
|
||||
{
|
||||
DestroyDynamicDatabase();
|
||||
DestroyTestDatabase();
|
||||
}
|
||||
|
||||
[Test]
|
||||
public void TestTypedJoinDefaultJoinKeyword()
|
||||
{
|
||||
var cmd = Database.From<TypedJoinUser>("usr")
|
||||
.Join<TypedJoinUserClient>(j => j.As("uc").On((u, c) => u.IdUser == c.UserId));
|
||||
|
||||
Assert.AreEqual("SELECT * FROM \"dbo\".\"Users\" AS usr JOIN \"dbo\".\"UserClients\" AS uc ON (usr.\"Id_User\" = uc.\"User_Id\")", cmd.CommandText());
|
||||
}
|
||||
|
||||
[Test]
|
||||
public void TestTypedInnerJoinWithAndNull()
|
||||
{
|
||||
var cmd = Database.From<TypedJoinUser>("usr")
|
||||
.Join<TypedJoinUserClient>(j => j.Inner().As("uc").On((u, c) => u.IdUser == c.UserId && c.Users != null))
|
||||
.Select(u => u.IdUser);
|
||||
|
||||
Assert.AreEqual("SELECT usr.\"Id_User\" FROM \"dbo\".\"Users\" AS usr INNER JOIN \"dbo\".\"UserClients\" AS uc ON ((usr.\"Id_User\" = uc.\"User_Id\") AND (uc.\"Users\" IS NOT NULL))", cmd.CommandText());
|
||||
}
|
||||
|
||||
[Test]
|
||||
public void TestTypedJoinWithNoLock()
|
||||
{
|
||||
var cmd = Database.From<TypedJoinUser>("usr", noLock: true)
|
||||
.Join<TypedJoinUserClient>(j => j.Inner().As("uc").NoLock().On((u, c) => u.IdUser == c.UserId));
|
||||
|
||||
Assert.AreEqual("SELECT * FROM \"dbo\".\"Users\" AS usr WITH(NOLOCK) INNER JOIN \"dbo\".\"UserClients\" AS uc WITH(NOLOCK) ON (usr.\"Id_User\" = uc.\"User_Id\")", cmd.CommandText());
|
||||
}
|
||||
|
||||
[Test]
|
||||
public void TestTypedLeftOuterJoin()
|
||||
{
|
||||
var cmd = Database.From<TypedJoinUser>("usr")
|
||||
.Join<TypedJoinUserClient>(j => j.LeftOuter().As("uc").On((u, c) => u.IdUser == c.UserId));
|
||||
|
||||
Assert.AreEqual("SELECT * FROM \"dbo\".\"Users\" AS usr LEFT OUTER JOIN \"dbo\".\"UserClients\" AS uc ON (usr.\"Id_User\" = uc.\"User_Id\")", cmd.CommandText());
|
||||
}
|
||||
|
||||
[Test]
|
||||
public void TestTypedRightOuterJoin()
|
||||
{
|
||||
var cmd = Database.From<TypedJoinUser>("usr")
|
||||
.Join<TypedJoinUserClient>(j => j.RightOuter().As("uc").On((u, c) => u.IdUser == c.UserId));
|
||||
|
||||
Assert.AreEqual("SELECT * FROM \"dbo\".\"Users\" AS usr RIGHT OUTER JOIN \"dbo\".\"UserClients\" AS uc ON (usr.\"Id_User\" = uc.\"User_Id\")", cmd.CommandText());
|
||||
}
|
||||
|
||||
[Test]
|
||||
public void TestTypedCustomJoinTypeCrossApply()
|
||||
{
|
||||
var cmd = Database.From<TypedJoinUser>("usr")
|
||||
.Join<TypedJoinUserClient>(j => j.Type("CROSS APPLY").As("uc"));
|
||||
|
||||
Assert.AreEqual("SELECT * FROM \"dbo\".\"Users\" AS usr CROSS APPLY \"dbo\".\"UserClients\" AS uc", cmd.CommandText());
|
||||
}
|
||||
|
||||
[Test]
|
||||
public void TestTypedJoinAndWhereParameterOrder()
|
||||
{
|
||||
var cmd = Database.From<TypedJoinUser>("usr")
|
||||
.Join<TypedJoinUserClient>(j => j.As("uc").On((u, c) => u.IdUser == c.UserId && c.Deleted == 0))
|
||||
.Where(u => u.Active == 1);
|
||||
|
||||
Assert.AreEqual(
|
||||
string.Format("SELECT * FROM \"dbo\".\"Users\" AS usr JOIN \"dbo\".\"UserClients\" AS uc ON ((usr.\"Id_User\" = uc.\"User_Id\") AND (uc.\"Deleted\" = [${0}])) WHERE (usr.\"Active\" = [${1}])",
|
||||
cmd.Parameters.Keys.ElementAt(0),
|
||||
cmd.Parameters.Keys.ElementAt(1)),
|
||||
cmd.CommandText());
|
||||
}
|
||||
}
|
||||
}
|
||||
Reference in New Issue
Block a user