Files
DynamORM/DynamORM.Tests/Select/TypedFluentJoinSyntaxTests.cs

103 lines
4.0 KiB
C#

/*
* 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.FromTyped<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.FromTyped<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.FromTyped<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.FromTyped<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.FromTyped<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.FromTyped<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.FromTyped<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());
}
}
}