103 lines
4.0 KiB
C#
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.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());
|
|
}
|
|
}
|
|
}
|