/* * 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("usr") .Join(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("usr") .Join(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("usr", noLock: true) .Join(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("usr") .Join(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("usr") .Join(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("usr") .Join(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("usr") .Join(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()); } } }