/* * DynamORM - Dynamic Object-Relational Mapping library. * Copyright (c) 2012-2026, Grzegorz Russek (grzegorz.russek@gmail.com) * All rights reserved. * * Redistribution and use in source and binary forms, with or without * modification, are permitted provided that the following conditions are met: * * Redistributions of source code must retain the above copyright notice, * this list of conditions and the following disclaimer. * * Redistributions in binary form must reproduce the above copyright notice, * this list of conditions and the following disclaimer in the documentation * and/or other materials provided with the distribution. * * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" * AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE * ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE * LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR * CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF * SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS * INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF * THE POSSIBILITY OF SUCH DAMAGE. */ using System.Linq; using DynamORM.Builders; using DynamORM.Tests.Helpers; using NUnit.Framework; namespace DynamORM.Tests.Select { [TestFixture] public class TypedFluentBuilderTests : TestsBase { [SetUp] public void SetUp() { CreateTestDatabase(); CreateDynamicDatabase( DynamicDatabaseOptions.SingleConnection | DynamicDatabaseOptions.SingleTransaction | DynamicDatabaseOptions.SupportLimitOffset); } [TearDown] public void TearDown() { DestroyDynamicDatabase(); DestroyTestDatabase(); } [Test] public void TestTypedWhereAndSelectUsesPropertyMap() { var cmd = Database.From("u") .Where(u => u.Id == 1) .SelectTyped(u => u.Code.As("CodeAlias")) .OrderByTyped(u => u.Code.Desc()); Assert.AreEqual( string.Format("SELECT u.\"user_code\" AS \"CodeAlias\" FROM \"sample_users\" AS u WHERE (u.\"id_user\" = [${0}]) ORDER BY u.\"user_code\" DESC", cmd.Parameters.Keys.First()), cmd.CommandText()); } [Test] public void TestTypedWhereSupportsContains() { var ids = new[] { 1L, 2L, 3L }.ToList(); var cmd = Database.From("u") .Where(u => ids.Contains(u.Id)) .SelectTyped(u => u.Id); Assert.AreEqual( string.Format("SELECT u.\"id_user\" FROM \"sample_users\" AS u WHERE (u.\"id_user\" IN([${0}], [${1}], [${2}]))", cmd.Parameters.Keys.ElementAt(0), cmd.Parameters.Keys.ElementAt(1), cmd.Parameters.Keys.ElementAt(2)), cmd.CommandText()); } [Test] public void TestTypedGroupByHavingOrderBy() { var cmd = Database.From("u") .SelectTyped(u => u.Code) .GroupByTyped(u => u.Code) .Having(u => u.Code != null) .OrderByTyped(u => u.Code.Asc()); Assert.AreEqual("SELECT u.\"user_code\" FROM \"sample_users\" AS u GROUP BY u.\"user_code\" HAVING (u.\"user_code\" IS NOT NULL) ORDER BY u.\"user_code\" ASC", cmd.CommandText()); } [Test] public void TestTypedJoin() { var cmd = Database.From("u") .Join((l, r) => l.Id == r.Id, "x") .SelectTyped(u => u.Id); Assert.AreEqual("SELECT u.\"id_user\" FROM \"sample_users\" AS u INNER JOIN \"sample_users\" AS x ON (u.\"id_user\" = x.\"id_user\")", cmd.CommandText()); } [Test] public void TestTypedLeftJoin() { var cmd = Database.From("u") .LeftJoin((l, r) => l.Id == r.Id, "x") .SelectTyped(u => u.Id); Assert.AreEqual("SELECT u.\"id_user\" FROM \"sample_users\" AS u LEFT JOIN \"sample_users\" AS x ON (u.\"id_user\" = x.\"id_user\")", cmd.CommandText()); } [Test] public void TestTypedRightJoin() { var cmd = Database.From("u") .RightJoin((l, r) => l.Id == r.Id, "x") .SelectTyped(u => u.Id); Assert.AreEqual("SELECT u.\"id_user\" FROM \"sample_users\" AS u RIGHT JOIN \"sample_users\" AS x ON (u.\"id_user\" = x.\"id_user\")", cmd.CommandText()); } [Test] public void TestTypedFullJoin() { var cmd = Database.From("u") .FullJoin((l, r) => l.Id == r.Id, "x") .SelectTyped(u => u.Id); Assert.AreEqual("SELECT u.\"id_user\" FROM \"sample_users\" AS u FULL JOIN \"sample_users\" AS x ON (u.\"id_user\" = x.\"id_user\")", cmd.CommandText()); } } }