125 lines
5.2 KiB
C#
125 lines
5.2 KiB
C#
/*
|
|
* DynamORM - Dynamic Object-Relational Mapping library.
|
|
* Copyright (c) 2012, 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.Implementation;
|
|
using NUnit.Framework;
|
|
|
|
namespace DynamORM.Tests.Modify
|
|
{
|
|
/// <summary>New parser tests.</summary>
|
|
[TestFixture]
|
|
public class ParserTests : TestsBase
|
|
{
|
|
/// <summary>Setup test parameters.</summary>
|
|
[TestFixtureSetUp]
|
|
public virtual void SetUp()
|
|
{
|
|
CreateTestDatabase();
|
|
CreateDynamicDatabase(
|
|
DynamicDatabaseOptions.SingleConnection |
|
|
DynamicDatabaseOptions.SingleTransaction |
|
|
DynamicDatabaseOptions.SupportLimitOffset);
|
|
}
|
|
|
|
/// <summary>Tear down test objects.</summary>
|
|
[TestFixtureTearDown]
|
|
public virtual void TearDown()
|
|
{
|
|
DestroyDynamicDatabase();
|
|
DestroyTestDatabase();
|
|
}
|
|
|
|
/// <summary>
|
|
/// Tests the basic insert.
|
|
/// </summary>
|
|
[Test]
|
|
public void TestBasicInsert()
|
|
{
|
|
var cmd = new DynamicInsertQueryBuilder(Database, "Users");
|
|
|
|
cmd.Insert(x => x.Users.Code = "001", x => x.Users.Name = "Admin", x => x.Users.IsAdmin = 1);
|
|
|
|
Assert.AreEqual(string.Format(@"INSERT INTO ""Users"" (""Code"", ""Name"", ""IsAdmin"") VALUES ({0})",
|
|
string.Join(", ", cmd.Parameters.Keys.Select(p => string.Format("[${0}]", p)))), cmd.CommandText());
|
|
}
|
|
|
|
/// <summary>
|
|
/// Tests the insert with sub query.
|
|
/// </summary>
|
|
[Test]
|
|
public void TestInsertSubQuery()
|
|
{
|
|
var cmd = new DynamicInsertQueryBuilder(Database, "Users");
|
|
|
|
cmd.Insert(x => x.Code = "001", x => x.Name = "Admin", x => x.IsAdmin = x(cmd
|
|
.SubQuery(a => a.AccessRights.As(a.a))
|
|
.Select(a => a.IsAdmin)
|
|
.Where(a => a.User_Id == "001")));
|
|
|
|
Assert.AreEqual(string.Format(@"INSERT INTO ""Users"" (""Code"", ""Name"", ""IsAdmin"") VALUES ({0}, (SELECT a.""IsAdmin"" FROM ""AccessRights"" AS a WHERE (a.""User_Id"" = [${1}])))",
|
|
string.Join(", ", cmd.Parameters.Keys.Take(2).Select(p => string.Format("[${0}]", p))), cmd.Parameters.Keys.Last()), cmd.CommandText());
|
|
}
|
|
|
|
/// <summary>
|
|
/// Tests the basic insert using object.
|
|
/// </summary>
|
|
[Test]
|
|
public void TestBasicInsertObject()
|
|
{
|
|
var cmd = new DynamicInsertQueryBuilder(Database, "Users");
|
|
|
|
cmd.Insert(x => new { Code = "001", Name = "Admin", IsAdmin = 1 });
|
|
|
|
Assert.AreEqual(string.Format(@"INSERT INTO ""Users"" (""Code"", ""Name"", ""IsAdmin"") VALUES ({0})",
|
|
string.Join(", ", cmd.Parameters.Keys.Select(p => string.Format("[${0}]", p)))), cmd.CommandText());
|
|
}
|
|
|
|
/// <summary>
|
|
/// Tests the insert using object with sub query.
|
|
/// </summary>
|
|
[Test]
|
|
public void TestInsertSubQueryObject()
|
|
{
|
|
var cmd = new DynamicInsertQueryBuilder(Database, "Users");
|
|
|
|
cmd.Insert(x => new
|
|
{
|
|
Code = "001",
|
|
Name = "Admin",
|
|
IsAdmin = x(cmd
|
|
.SubQuery(a => a.AccessRights.As(a.a))
|
|
.Select(a => a.IsAdmin)
|
|
.Where(a => a.User_Id == "001"))
|
|
});
|
|
|
|
Assert.AreEqual(string.Format(@"INSERT INTO ""Users"" (""Code"", ""Name"", ""IsAdmin"") VALUES ({0}, (SELECT a.""IsAdmin"" FROM ""AccessRights"" AS a WHERE (a.""User_Id"" = [${1}])))",
|
|
string.Join(", ", cmd.Parameters.Keys.Take(2).Select(p => string.Format("[${0}]", p))), cmd.Parameters.Keys.Last()), cmd.CommandText());
|
|
}
|
|
}
|
|
} |