New version alpha
This commit is contained in:
@@ -13,11 +13,16 @@
|
||||
<TargetFrameworkVersion>v4.0</TargetFrameworkVersion>
|
||||
<FileAlignment>512</FileAlignment>
|
||||
<TargetFrameworkProfile />
|
||||
<NoWin32Manifest>False</NoWin32Manifest>
|
||||
<AllowUnsafeBlocks>False</AllowUnsafeBlocks>
|
||||
<NoStdLib>False</NoStdLib>
|
||||
<TreatWarningsAsErrors>False</TreatWarningsAsErrors>
|
||||
<IntermediateOutputPath>obj\$(Configuration)\</IntermediateOutputPath>
|
||||
</PropertyGroup>
|
||||
<PropertyGroup Condition=" '$(Configuration)|$(Platform)' == 'Debug|AnyCPU' ">
|
||||
<DebugSymbols>true</DebugSymbols>
|
||||
<DebugType>full</DebugType>
|
||||
<Optimize>false</Optimize>
|
||||
<DebugType>Full</DebugType>
|
||||
<Optimize>False</Optimize>
|
||||
<OutputPath>bin\Debug\</OutputPath>
|
||||
<DefineConstants>DEBUG;TRACE</DefineConstants>
|
||||
<ErrorReport>prompt</ErrorReport>
|
||||
@@ -31,6 +36,17 @@
|
||||
<ErrorReport>prompt</ErrorReport>
|
||||
<WarningLevel>4</WarningLevel>
|
||||
</PropertyGroup>
|
||||
<PropertyGroup Condition=" '$(Configuration)' == 'Debug' ">
|
||||
<CheckForOverflowUnderflow>False</CheckForOverflowUnderflow>
|
||||
<BaseIntermediateOutputPath>obj\</BaseIntermediateOutputPath>
|
||||
</PropertyGroup>
|
||||
<PropertyGroup Condition=" '$(Platform)' == 'AnyCPU' ">
|
||||
<BaseAddress>4194304</BaseAddress>
|
||||
<PlatformTarget>AnyCPU</PlatformTarget>
|
||||
<RegisterForComInterop>False</RegisterForComInterop>
|
||||
<GenerateSerializationAssemblies>Auto</GenerateSerializationAssemblies>
|
||||
<Prefer32Bit>False</Prefer32Bit>
|
||||
</PropertyGroup>
|
||||
<ItemGroup>
|
||||
<Reference Include="Microsoft.CSharp" />
|
||||
<Reference Include="nunit.framework, Version=2.5.10.11092, Culture=neutral, PublicKeyToken=96d09a1eb7f44a77, processorArchitecture=MSIL" />
|
||||
@@ -45,10 +61,12 @@
|
||||
<Reference Include="System.Xml" />
|
||||
</ItemGroup>
|
||||
<ItemGroup>
|
||||
<Compile Include="Helpers\Dynamic\DynamicParserTests.cs" />
|
||||
<Compile Include="Helpers\PoolingTests.cs" />
|
||||
<Compile Include="Modify\DynamicModificationTests.cs" />
|
||||
<Compile Include="Modify\DynamicNoSchemaModificationTests.cs" />
|
||||
<Compile Include="Modify\DynamicTypeSchemaModificationTests.cs" />
|
||||
<Compile Include="Modify\ParserTests.cs" />
|
||||
<Compile Include="Select\DynamicNoSchemaAccessTests.cs" />
|
||||
<Compile Include="Select\DynamicTypeSchemaAccessTests.cs" />
|
||||
<Compile Include="Helpers\AttachToDebugger.cs" />
|
||||
@@ -61,7 +79,9 @@
|
||||
<DesignTime>True</DesignTime>
|
||||
<DependentUpon>Resources.resx</DependentUpon>
|
||||
</Compile>
|
||||
<Compile Include="Select\LegacyParserTests.cs" />
|
||||
<Compile Include="Select\RenamedTypedAccessTests.cs" />
|
||||
<Compile Include="Select\ParserTests.cs" />
|
||||
<Compile Include="TestsBase.cs" />
|
||||
<Compile Include="Select\TypedAccessTests.cs" />
|
||||
</ItemGroup>
|
||||
|
||||
@@ -45,7 +45,7 @@ namespace DynamORM.Tests.Helpers
|
||||
Debugger.Launch();
|
||||
}
|
||||
|
||||
/// <summary>Test anonymous type compatybility.</summary>
|
||||
/// <summary>Test anonymous type compatibility.</summary>
|
||||
[Test]
|
||||
public void TestAnonType()
|
||||
{
|
||||
@@ -59,14 +59,14 @@ namespace DynamORM.Tests.Helpers
|
||||
[Test]
|
||||
public void TestAnonTypeValue()
|
||||
{
|
||||
var a = new { x = 1, y = "bla bla" };
|
||||
var a = new { x = 1, y = "bla bla" };
|
||||
var b = new { x = 1, y = "bla bla" };
|
||||
|
||||
Assert.AreEqual(a, b);
|
||||
Assert.IsTrue(a.Equals(b));
|
||||
|
||||
|
||||
Dictionary<object, int> dict = new Dictionary<object, int>() { { a, 999 } };
|
||||
|
||||
|
||||
Assert.IsTrue(dict.ContainsKey(b));
|
||||
}
|
||||
}
|
||||
|
||||
121
DynamORM.Tests/Helpers/Dynamic/DynamicParserTests.cs
Normal file
121
DynamORM.Tests/Helpers/Dynamic/DynamicParserTests.cs
Normal file
@@ -0,0 +1,121 @@
|
||||
/*
|
||||
* 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;
|
||||
using DynamORM.Helpers.Dynamics;
|
||||
using NUnit.Framework;
|
||||
|
||||
namespace DynamORM.Tests.Helpers.Dynamic
|
||||
{
|
||||
/// <summary><see cref="DynamicParser"/> tests.</summary>
|
||||
[TestFixture]
|
||||
public class DynamicParserTests
|
||||
{
|
||||
/// <summary>
|
||||
/// Tests the get member.
|
||||
/// </summary>
|
||||
[Test]
|
||||
public void TestGetMember()
|
||||
{
|
||||
Func<dynamic, object> f = x => x.SomePropery;
|
||||
|
||||
var val = DynamicParser.Parse(f).Result as DynamicParser.Node.GetMember;
|
||||
|
||||
Assert.NotNull(val);
|
||||
Assert.AreEqual("SomePropery", val.Name);
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// Tests the set member.
|
||||
/// </summary>
|
||||
[Test]
|
||||
public void TestSetMember()
|
||||
{
|
||||
Func<dynamic, object> f = x => x.SomePropery = "value";
|
||||
|
||||
var val = DynamicParser.Parse(f).Result as DynamicParser.Node.SetMember;
|
||||
|
||||
Assert.NotNull(val);
|
||||
Assert.AreEqual("SomePropery", val.Name);
|
||||
Assert.AreEqual("value", val.Value);
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// Tests the index of the get.
|
||||
/// </summary>
|
||||
[Test]
|
||||
public void TestGetIndex()
|
||||
{
|
||||
Func<dynamic, object> f = x => x.SomePropery[0];
|
||||
|
||||
var val = DynamicParser.Parse(f).Result as DynamicParser.Node.GetIndex;
|
||||
|
||||
Assert.NotNull(val);
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// Tests the index of the set.
|
||||
/// </summary>
|
||||
[Test]
|
||||
public void TestSetIndex()
|
||||
{
|
||||
Func<dynamic, object> f = x => x.SomePropery[0] = "value";
|
||||
|
||||
var val = DynamicParser.Parse(f).Result as DynamicParser.Node.SetIndex;
|
||||
|
||||
Assert.NotNull(val);
|
||||
Assert.AreEqual("value", val.Value);
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// Tests something.
|
||||
/// </summary>
|
||||
[Test]
|
||||
public void TestSomething()
|
||||
{
|
||||
Func<dynamic, object> f = x => x.SomePropery == "value" || x.OtherProperty == -1;
|
||||
|
||||
var p = DynamicParser.Parse(f);
|
||||
var val = p.Result as DynamicParser.Node.Binary;
|
||||
|
||||
Assert.NotNull(val);
|
||||
|
||||
var left = val.Host as DynamicParser.Node.Binary;
|
||||
var right = val.Right as DynamicParser.Node.Binary;
|
||||
|
||||
Assert.NotNull(left);
|
||||
Assert.NotNull(right);
|
||||
|
||||
Assert.IsInstanceOf<DynamicParser.Node.GetMember>(left.Host);
|
||||
Assert.IsInstanceOf<DynamicParser.Node.GetMember>(right.Host);
|
||||
|
||||
Assert.AreEqual("value", left.Right);
|
||||
Assert.AreEqual(-1, right.Right);
|
||||
}
|
||||
}
|
||||
}
|
||||
@@ -46,7 +46,7 @@ namespace DynamORM.Tests.Helpers
|
||||
[Column("login")]
|
||||
public string Login { get; set; }
|
||||
|
||||
/// <summary>Gets or sets first columnvalue.</summary>
|
||||
/// <summary>Gets or sets first column value.</summary>
|
||||
[Column("first")]
|
||||
public string First { get; set; }
|
||||
|
||||
|
||||
@@ -45,7 +45,7 @@ namespace DynamORM.Tests.Helpers
|
||||
/// <summary>Gets or sets login column value.</summary>
|
||||
public string login { get; set; }
|
||||
|
||||
/// <summary>Gets or sets first columnvalue.</summary>
|
||||
/// <summary>Gets or sets first column value.</summary>
|
||||
public string first { get; set; }
|
||||
|
||||
/// <summary>Gets or sets last column value.</summary>
|
||||
|
||||
@@ -65,12 +65,12 @@ namespace DynamORM.Tests.Modify
|
||||
[Test]
|
||||
public void TestInsertByArguments()
|
||||
{
|
||||
Assert.AreEqual(1, GetTestTable().Insert(code: 201, first: null, last: "Gagarin", email: "juri.gagarin@megacorp.com", quote: "bla, bla, bla"));
|
||||
Assert.AreEqual(1, GetTestTable().Insert(code: "201", first: null, last: "Gagarin", email: "juri.gagarin@megacorp.com", quote: "bla, bla, bla"));
|
||||
|
||||
// Verify
|
||||
var o = GetTestTable().Single(code: 201);
|
||||
var o = GetTestTable().Single(code: "201");
|
||||
Assert.Less(200, o.id);
|
||||
Assert.AreEqual("201", o.code);
|
||||
Assert.AreEqual("201", o.code.ToString());
|
||||
Assert.AreEqual(null, o.first);
|
||||
Assert.AreEqual("Gagarin", o.last);
|
||||
Assert.AreEqual("juri.gagarin@megacorp.com", o.email);
|
||||
@@ -82,12 +82,12 @@ namespace DynamORM.Tests.Modify
|
||||
[Test]
|
||||
public void TestInsertByDynamicObjects()
|
||||
{
|
||||
Assert.AreEqual(1, GetTestTable().Insert(values: new { code = 202, first = DBNull.Value, last = "Gagarin", email = "juri.gagarin@megacorp.com", quote = "bla, bla, bla" }));
|
||||
Assert.AreEqual(1, GetTestTable().Insert(values: new { code = "202", first = DBNull.Value, last = "Gagarin", email = "juri.gagarin@megacorp.com", quote = "bla, bla, bla" }));
|
||||
|
||||
// Verify
|
||||
var o = GetTestTable().Single(code: 202);
|
||||
var o = GetTestTable().Single(code: "202");
|
||||
Assert.Less(200, o.id);
|
||||
Assert.AreEqual("202", o.code);
|
||||
Assert.AreEqual("202", o.code.ToString());
|
||||
Assert.AreEqual(null, o.first);
|
||||
Assert.AreEqual("Gagarin", o.last);
|
||||
Assert.AreEqual("juri.gagarin@megacorp.com", o.email);
|
||||
@@ -112,9 +112,9 @@ namespace DynamORM.Tests.Modify
|
||||
}));
|
||||
|
||||
// Verify
|
||||
var o = u.Single(code: 203);
|
||||
var o = u.Single(code: "203");
|
||||
Assert.Less(200, o.id);
|
||||
Assert.AreEqual("203", o.code);
|
||||
Assert.AreEqual("203", o.code.ToString());
|
||||
Assert.AreEqual(null, o.first);
|
||||
Assert.AreEqual("Gagarin", o.last);
|
||||
Assert.AreEqual("juri.gagarin@megacorp.com", o.email);
|
||||
@@ -139,9 +139,9 @@ namespace DynamORM.Tests.Modify
|
||||
}));
|
||||
|
||||
// Verify
|
||||
var o = u.Single(code: 204);
|
||||
var o = u.Single(code: "204");
|
||||
Assert.Less(200, o.id);
|
||||
Assert.AreEqual("204", o.code);
|
||||
Assert.AreEqual("204", o.code.ToString());
|
||||
Assert.AreEqual(null, o.first);
|
||||
Assert.AreEqual("Gagarin", o.last);
|
||||
Assert.AreEqual("juri.gagarin@megacorp.com", o.email);
|
||||
@@ -157,12 +157,12 @@ namespace DynamORM.Tests.Modify
|
||||
[Test]
|
||||
public void TestUpdateByArguments()
|
||||
{
|
||||
Assert.AreEqual(1, GetTestTable().Update(id: 1, code: 201, first: null, last: "Gagarin", email: "juri.gagarin@megacorp.com", quote: "bla, bla, bla"));
|
||||
Assert.AreEqual(1, GetTestTable().Update(id: 1, code: "201", first: null, last: "Gagarin", email: "juri.gagarin@megacorp.com", quote: "bla, bla, bla"));
|
||||
|
||||
// Verify
|
||||
var o = GetTestTable().Single(code: 201);
|
||||
var o = GetTestTable().Single(code: "201");
|
||||
Assert.AreEqual(1, o.id);
|
||||
Assert.AreEqual("201", o.code);
|
||||
Assert.AreEqual("201", o.code.ToString());
|
||||
Assert.AreEqual(null, o.first);
|
||||
Assert.AreEqual("Gagarin", o.last);
|
||||
Assert.AreEqual("juri.gagarin@megacorp.com", o.email);
|
||||
@@ -174,12 +174,12 @@ namespace DynamORM.Tests.Modify
|
||||
[Test]
|
||||
public void TestUpdateByDynamicObject()
|
||||
{
|
||||
Assert.AreEqual(1, GetTestTable().Update(update: new { id = 2, code = 202, first = DBNull.Value, last = "Gagarin", email = "juri.gagarin@megacorp.com", quote = "bla, bla, bla" }));
|
||||
Assert.AreEqual(1, GetTestTable().Update(update: new { id = 2, code = "202", first = DBNull.Value, last = "Gagarin", email = "juri.gagarin@megacorp.com", quote = "bla, bla, bla" }));
|
||||
|
||||
// Verify
|
||||
var o = GetTestTable().Single(code: 202);
|
||||
var o = GetTestTable().Single(code: "202");
|
||||
Assert.AreEqual(2, o.id);
|
||||
Assert.AreEqual("202", o.code);
|
||||
Assert.AreEqual("202", o.code.ToString());
|
||||
Assert.AreEqual(null, o.first);
|
||||
Assert.AreEqual("Gagarin", o.last);
|
||||
Assert.AreEqual("juri.gagarin@megacorp.com", o.email);
|
||||
@@ -204,9 +204,9 @@ namespace DynamORM.Tests.Modify
|
||||
}));
|
||||
|
||||
// Verify
|
||||
var o = u.Single(code: 203);
|
||||
var o = u.Single(code: "203");
|
||||
Assert.AreEqual(3, o.id);
|
||||
Assert.AreEqual("203", o.code);
|
||||
Assert.AreEqual("203", o.code.ToString());
|
||||
Assert.AreEqual(null, o.first);
|
||||
Assert.AreEqual("Gagarin", o.last);
|
||||
Assert.AreEqual("juri.gagarin@megacorp.com", o.email);
|
||||
@@ -231,9 +231,9 @@ namespace DynamORM.Tests.Modify
|
||||
}));
|
||||
|
||||
// Verify
|
||||
var o = u.Single(code: 204);
|
||||
var o = u.Single(code: "204");
|
||||
Assert.AreEqual(4, o.id);
|
||||
Assert.AreEqual("204", o.code);
|
||||
Assert.AreEqual("204", o.code.ToString());
|
||||
Assert.AreEqual(null, o.first);
|
||||
Assert.AreEqual("Gagarin", o.last);
|
||||
Assert.AreEqual("juri.gagarin@megacorp.com", o.email);
|
||||
@@ -245,12 +245,12 @@ namespace DynamORM.Tests.Modify
|
||||
[Test]
|
||||
public void TestUpdateByDynamicObjects()
|
||||
{
|
||||
Assert.AreEqual(1, GetTestTable().Update(values: new { code = 205, first = DBNull.Value, last = "Gagarin", email = "juri.gagarin@megacorp.com", quote = "bla, bla, bla" }, where: new { id = 5 }));
|
||||
Assert.AreEqual(1, GetTestTable().Update(values: new { code = "205", first = DBNull.Value, last = "Gagarin", email = "juri.gagarin@megacorp.com", quote = "bla, bla, bla" }, where: new { id = 5 }));
|
||||
|
||||
// Verify
|
||||
var o = GetTestTable().Single(code: 205);
|
||||
var o = GetTestTable().Single(code: "205");
|
||||
Assert.AreEqual(5, o.id);
|
||||
Assert.AreEqual("205", o.code);
|
||||
Assert.AreEqual("205", o.code.ToString());
|
||||
Assert.AreEqual(null, o.first);
|
||||
Assert.AreEqual("Gagarin", o.last);
|
||||
Assert.AreEqual("juri.gagarin@megacorp.com", o.email);
|
||||
@@ -275,9 +275,9 @@ namespace DynamORM.Tests.Modify
|
||||
}, id: 6));
|
||||
|
||||
// Verify
|
||||
var o = u.Single(code: 206);
|
||||
var o = u.Single(code: "206");
|
||||
Assert.AreEqual(6, o.id);
|
||||
Assert.AreEqual("206", o.code);
|
||||
Assert.AreEqual("206", o.code.ToString());
|
||||
Assert.AreEqual(null, o.first);
|
||||
Assert.AreEqual("Gagarin", o.last);
|
||||
Assert.AreEqual("juri.gagarin@megacorp.com", o.email);
|
||||
@@ -302,9 +302,9 @@ namespace DynamORM.Tests.Modify
|
||||
}, id: 7));
|
||||
|
||||
// Verify
|
||||
var o = u.Single(code: 207);
|
||||
var o = u.Single(code: "207");
|
||||
Assert.AreEqual(7, o.id);
|
||||
Assert.AreEqual("207", o.code);
|
||||
Assert.AreEqual("207", o.code.ToString());
|
||||
Assert.AreEqual(null, o.first);
|
||||
Assert.AreEqual("Gagarin", o.last);
|
||||
Assert.AreEqual("juri.gagarin@megacorp.com", o.email);
|
||||
@@ -320,10 +320,10 @@ namespace DynamORM.Tests.Modify
|
||||
[Test]
|
||||
public void TestDeleteByArguments()
|
||||
{
|
||||
Assert.AreEqual(1, GetTestTable().Delete(code: 10));
|
||||
Assert.AreEqual(1, GetTestTable().Delete(code: "10"));
|
||||
|
||||
// Verify
|
||||
Assert.AreEqual(0, GetTestTable().Count(code: 10));
|
||||
Assert.AreEqual(0, GetTestTable().Count(code: "10"));
|
||||
}
|
||||
|
||||
/// <summary>Test row deleting by dynamic objects (all except ID should be ignored).</summary>
|
||||
@@ -380,7 +380,7 @@ namespace DynamORM.Tests.Modify
|
||||
[Test]
|
||||
public void TestDeleteyDynamicObjectWhere()
|
||||
{
|
||||
Assert.AreEqual(1, GetTestTable().Delete(where: new { id = 14, code = 14 }));
|
||||
Assert.AreEqual(1, GetTestTable().Delete(where: new { id = 14, code = "14" }));
|
||||
|
||||
// Verify
|
||||
Assert.AreEqual(0, GetTestTable().Count(id: 14));
|
||||
|
||||
72
DynamORM.Tests/Modify/ParserTests.cs
Normal file
72
DynamORM.Tests/Modify/ParserTests.cs
Normal file
@@ -0,0 +1,72 @@
|
||||
/*
|
||||
* 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());
|
||||
}
|
||||
}
|
||||
}
|
||||
@@ -29,6 +29,7 @@
|
||||
using System;
|
||||
using System.Collections.Generic;
|
||||
using System.Linq;
|
||||
using DynamORM.Builders;
|
||||
using NUnit.Framework;
|
||||
|
||||
namespace DynamORM.Tests.Select
|
||||
@@ -60,6 +61,13 @@ namespace DynamORM.Tests.Select
|
||||
return Database.Table("users");
|
||||
}
|
||||
|
||||
/// <summary>Create table using specified method.</summary>
|
||||
/// <returns>Dynamic table.</returns>
|
||||
public virtual IDynamicSelectQueryBuilder GetTestBuilder()
|
||||
{
|
||||
return Database.Table("users").Query() as IDynamicSelectQueryBuilder;
|
||||
}
|
||||
|
||||
#region Select
|
||||
|
||||
/// <summary>Test unknown op.</summary>
|
||||
@@ -76,7 +84,14 @@ namespace DynamORM.Tests.Select
|
||||
Assert.AreEqual(200, GetTestTable().Count(columns: "id"));
|
||||
}
|
||||
|
||||
/// <summary>Test count with in steatement.</summary>
|
||||
/// <summary>Test dynamic <c>Count</c> method.</summary>
|
||||
[Test]
|
||||
public void TestCount2()
|
||||
{
|
||||
Assert.AreEqual(200, GetTestBuilder().Select(x => x.Count(x.id)).Scalar());
|
||||
}
|
||||
|
||||
/// <summary>Test count with in statement.</summary>
|
||||
[Test]
|
||||
public void TestSelectInEnumerableCount()
|
||||
{
|
||||
@@ -87,7 +102,17 @@ namespace DynamORM.Tests.Select
|
||||
}));
|
||||
}
|
||||
|
||||
/// <summary>Test count with in steatement.</summary>
|
||||
/// <summary>Test count with in statement.</summary>
|
||||
[Test]
|
||||
public void TestSelectInEnumerableCount2()
|
||||
{
|
||||
Assert.AreEqual(4, GetTestBuilder()
|
||||
.Where(x => x.last.In(new object[] { "Hendricks", "Goodwin", "Freeman" }.Take(3)))
|
||||
.Select(x => x.Count())
|
||||
.Scalar());
|
||||
}
|
||||
|
||||
/// <summary>Test count with in statement.</summary>
|
||||
[Test]
|
||||
public void TestSelectInArrayCount()
|
||||
{
|
||||
@@ -98,6 +123,16 @@ namespace DynamORM.Tests.Select
|
||||
}));
|
||||
}
|
||||
|
||||
/// <summary>Test count with in statement.</summary>
|
||||
[Test]
|
||||
public void TestSelectInArrayCount2()
|
||||
{
|
||||
Assert.AreEqual(4, GetTestBuilder()
|
||||
.Where(x => x.last.In(new object[] { "Hendricks", "Goodwin", "Freeman" }))
|
||||
.Select(x => x.Count())
|
||||
.Scalar());
|
||||
}
|
||||
|
||||
/// <summary>Test dynamic <c>First</c> method.</summary>
|
||||
[Test]
|
||||
public void TestFirst()
|
||||
@@ -105,6 +140,16 @@ namespace DynamORM.Tests.Select
|
||||
Assert.AreEqual(1, GetTestTable().First(columns: "id").id);
|
||||
}
|
||||
|
||||
/// <summary>Test dynamic <c>First</c> method.</summary>
|
||||
[Test]
|
||||
public void TestFirst2()
|
||||
{
|
||||
Assert.AreEqual(1, GetTestBuilder()
|
||||
.Select(x => x.id)
|
||||
.Execute()
|
||||
.First().id);
|
||||
}
|
||||
|
||||
/// <summary>Test dynamic <c>Last</c> method.</summary>
|
||||
[Test]
|
||||
public void TestLast()
|
||||
@@ -112,6 +157,16 @@ namespace DynamORM.Tests.Select
|
||||
Assert.AreEqual(200, GetTestTable().Last(columns: "id").id);
|
||||
}
|
||||
|
||||
/// <summary>Test dynamic <c>Last</c> method.</summary>
|
||||
[Test]
|
||||
public void TestLast2()
|
||||
{
|
||||
Assert.AreEqual(200, GetTestBuilder()
|
||||
.Select(x => x.id)
|
||||
.Execute()
|
||||
.Last().id);
|
||||
}
|
||||
|
||||
/// <summary>Test dynamic <c>Count</c> method.</summary>
|
||||
[Test]
|
||||
public void TestCountSpecificRecord()
|
||||
@@ -119,6 +174,16 @@ namespace DynamORM.Tests.Select
|
||||
Assert.AreEqual(1, GetTestTable().Count(first: "Ori"));
|
||||
}
|
||||
|
||||
/// <summary>Test dynamic <c>Count</c> method.</summary>
|
||||
[Test]
|
||||
public void TestCountSpecificRecord2()
|
||||
{
|
||||
Assert.AreEqual(1, GetTestBuilder()
|
||||
.Where(x => x.first == "Ori")
|
||||
.Select(x => x.Count())
|
||||
.Scalar());
|
||||
}
|
||||
|
||||
/// <summary>Test dynamic <c>Min</c> method.</summary>
|
||||
[Test]
|
||||
public void TestMin()
|
||||
@@ -126,6 +191,15 @@ namespace DynamORM.Tests.Select
|
||||
Assert.AreEqual(1, GetTestTable().Min(columns: "id"));
|
||||
}
|
||||
|
||||
/// <summary>Test dynamic <c>Min</c> method.</summary>
|
||||
[Test]
|
||||
public void TestMin2()
|
||||
{
|
||||
Assert.AreEqual(1, GetTestBuilder()
|
||||
.Select(x => x.Min(x.id))
|
||||
.Scalar());
|
||||
}
|
||||
|
||||
/// <summary>Test dynamic <c>Min</c> method.</summary>
|
||||
[Test]
|
||||
public void TestMax()
|
||||
@@ -133,6 +207,15 @@ namespace DynamORM.Tests.Select
|
||||
Assert.AreEqual(200, GetTestTable().Max(columns: "id"));
|
||||
}
|
||||
|
||||
/// <summary>Test dynamic <c>Min</c> method.</summary>
|
||||
[Test]
|
||||
public void TestMax2()
|
||||
{
|
||||
Assert.AreEqual(200, GetTestBuilder()
|
||||
.Select(x => x.Max(x.id))
|
||||
.Scalar());
|
||||
}
|
||||
|
||||
/// <summary>Test dynamic <c>Min</c> method.</summary>
|
||||
[Test]
|
||||
public void TesttAvg()
|
||||
@@ -140,6 +223,15 @@ namespace DynamORM.Tests.Select
|
||||
Assert.AreEqual(100.5, GetTestTable().Avg(columns: "id"));
|
||||
}
|
||||
|
||||
/// <summary>Test dynamic <c>Min</c> method.</summary>
|
||||
[Test]
|
||||
public void TesttAvg2()
|
||||
{
|
||||
Assert.AreEqual(100.5, GetTestBuilder()
|
||||
.Select(x => x.Avg(x.id))
|
||||
.Scalar());
|
||||
}
|
||||
|
||||
/// <summary>Test dynamic <c>Sum</c> method.</summary>
|
||||
[Test]
|
||||
public void TestSum()
|
||||
@@ -147,6 +239,15 @@ namespace DynamORM.Tests.Select
|
||||
Assert.AreEqual(20100, GetTestTable().Sum(columns: "id"));
|
||||
}
|
||||
|
||||
/// <summary>Test dynamic <c>Sum</c> method.</summary>
|
||||
[Test]
|
||||
public void TestSum2()
|
||||
{
|
||||
Assert.AreEqual(20100, GetTestBuilder()
|
||||
.Select(x => x.Sum(x.id))
|
||||
.Scalar());
|
||||
}
|
||||
|
||||
/// <summary>Test dynamic <c>Scalar</c> method for invalid operation exception.</summary>
|
||||
[Test]
|
||||
public void TestScalarException()
|
||||
@@ -161,6 +262,16 @@ namespace DynamORM.Tests.Select
|
||||
Assert.AreEqual("Ori", GetTestTable().Scalar(columns: "first", id: 19));
|
||||
}
|
||||
|
||||
/// <summary>Test dynamic <c>Scalar</c> method.</summary>
|
||||
[Test]
|
||||
public void TestScalar2()
|
||||
{
|
||||
Assert.AreEqual("Ori", GetTestBuilder()
|
||||
.Where(x => x.id == 19)
|
||||
.Select(x => x.first)
|
||||
.Scalar());
|
||||
}
|
||||
|
||||
/// <summary>Test dynamic <c>Scalar</c> method with SQLite specific aggregate.</summary>
|
||||
[Test]
|
||||
public void TestScalarGroupConcat()
|
||||
@@ -171,6 +282,19 @@ namespace DynamORM.Tests.Select
|
||||
GetTestTable().Scalar(columns: "first:first:group_concat", id: new DynamicColumn { Operator = DynamicColumn.CompareOperator.Lt, Value = 20 }));
|
||||
}
|
||||
|
||||
/// <summary>Test dynamic <c>Scalar</c> method with SQLite specific aggregate.</summary>
|
||||
[Test]
|
||||
public void TestScalarGroupConcat2()
|
||||
{
|
||||
// This test should produce something like this:
|
||||
// select group_concat("first") AS first from "users" where "id" < 20;
|
||||
Assert.AreEqual("Clarke,Marny,Dai,Forrest,Blossom,George,Ivory,Inez,Sigourney,Fulton,Logan,Anne,Alexandra,Adena,Lionel,Aimee,Selma,Lara,Ori",
|
||||
GetTestBuilder()
|
||||
.Where(x => x.id < 20)
|
||||
.Select(x => x.group_concat(x.first).As(x.first))
|
||||
.Scalar());
|
||||
}
|
||||
|
||||
/// <summary>Test dynamic <c>Scalar</c> method with SQLite specific aggregate not using aggregate field.</summary>
|
||||
[Test]
|
||||
public void TestScalarGroupConcatNoAggregateField()
|
||||
@@ -181,6 +305,19 @@ namespace DynamORM.Tests.Select
|
||||
GetTestTable().Scalar(columns: "group_concat(first):first", id: new DynamicColumn { Operator = DynamicColumn.CompareOperator.Lt, Value = 20 }));
|
||||
}
|
||||
|
||||
/// <summary>Test dynamic <c>Scalar</c> method with SQLite specific aggregate not using aggregate field.</summary>
|
||||
[Test]
|
||||
public void TestScalarGroupConcatNoAggregateField2()
|
||||
{
|
||||
// This test should produce something like this:
|
||||
// select group_concat(first) AS first from "users" where "id" < 20;
|
||||
Assert.AreEqual("Clarke,Marny,Dai,Forrest,Blossom,George,Ivory,Inez,Sigourney,Fulton,Logan,Anne,Alexandra,Adena,Lionel,Aimee,Selma,Lara,Ori",
|
||||
GetTestBuilder()
|
||||
.Where(x => x.id < 20)
|
||||
.Select("group_concat(first):first")
|
||||
.Scalar());
|
||||
}
|
||||
|
||||
/// <summary>Test something fancy... like: <code>select "first", count("first") occurs from "users" group by "first" order by 2 desc;</code>.</summary>
|
||||
[Test]
|
||||
public void TestFancyAggregateQuery()
|
||||
@@ -196,6 +333,26 @@ namespace DynamORM.Tests.Select
|
||||
Assert.AreEqual(1, v.Last().occurs);
|
||||
}
|
||||
|
||||
/// <summary>Test something fancy... like: <code>select "first", count("first") occurs from "users" group by "first" order by 2 desc;</code>.</summary>
|
||||
[Test]
|
||||
public void TestFancyAggregateQuery2()
|
||||
{
|
||||
var v = GetTestBuilder()
|
||||
.Select(x => x.first, x => x.Count(x.first).As(x.occurs))
|
||||
.GroupBy(x => x.first)
|
||||
.OrderBy(x => x.Desc(2))
|
||||
.Execute()
|
||||
.ToList();
|
||||
|
||||
Assert.IsNotNull(v);
|
||||
Assert.AreEqual(187, v.Count());
|
||||
Assert.AreEqual(4, v.First().occurs);
|
||||
Assert.AreEqual("Logan", v.First().first);
|
||||
Assert.AreEqual(2, v.Take(10).Last().occurs);
|
||||
Assert.AreEqual(1, v.Take(11).Last().occurs);
|
||||
Assert.AreEqual(1, v.Last().occurs);
|
||||
}
|
||||
|
||||
/// <summary>This time also something fancy... aggregate in aggregate <code>select AVG(LENGTH("login")) len from "users";</code>.</summary>
|
||||
[Test]
|
||||
public void TestAggregateInAggregate()
|
||||
@@ -203,6 +360,15 @@ namespace DynamORM.Tests.Select
|
||||
Assert.AreEqual(12.77, GetTestTable().Scalar(columns: @"length(""login""):len:avg"));
|
||||
}
|
||||
|
||||
/// <summary>This time also something fancy... aggregate in aggregate <code>select AVG(LENGTH("login")) len from "users";</code>.</summary>
|
||||
[Test]
|
||||
public void TestAggregateInAggregate2()
|
||||
{
|
||||
Assert.AreEqual(12.77, GetTestBuilder()
|
||||
.Select(x => x.Avg(x.Length(x.login)).As(x.len))
|
||||
.Scalar());
|
||||
}
|
||||
|
||||
/// <summary>This time also something fancy... aggregate in aggregate <code>select AVG(LENGTH("email")) len from "users";</code>.</summary>
|
||||
[Test]
|
||||
public void TestAggregateInAggregateMark2()
|
||||
@@ -210,6 +376,15 @@ namespace DynamORM.Tests.Select
|
||||
Assert.AreEqual(27.7, GetTestTable().Avg(columns: @"length(""email""):len"));
|
||||
}
|
||||
|
||||
/// <summary>This time also something fancy... aggregate in aggregate <code>select AVG(LENGTH("email")) len from "users";</code>.</summary>
|
||||
[Test]
|
||||
public void TestAggregateInAggregateMark3()
|
||||
{
|
||||
Assert.AreEqual(27.7, GetTestBuilder()
|
||||
.Select(x => "AVG(LENGTH(email)) AS LEN")
|
||||
.Scalar());
|
||||
}
|
||||
|
||||
/// <summary>Test emails longer than 27 chars. <code>select count(*) from "users" where length("email") > 27;</code>.</summary>
|
||||
public void TestFunctionInWhere()
|
||||
{
|
||||
@@ -224,6 +399,15 @@ namespace DynamORM.Tests.Select
|
||||
}));
|
||||
}
|
||||
|
||||
/// <summary>Test emails longer than 27 chars. <code>select count(*) from "users" where length("email") > 27;</code>.</summary>
|
||||
public void TestFunctionInWhere2()
|
||||
{
|
||||
Assert.AreEqual(97, GetTestBuilder()
|
||||
.Where(x => x.Length(x.email) > 27)
|
||||
.Select(x => x.Count())
|
||||
.Scalar());
|
||||
}
|
||||
|
||||
/// <summary>Test dynamic <c>Single</c> multi.</summary>
|
||||
[Test]
|
||||
public void TestSingleObject()
|
||||
@@ -236,6 +420,22 @@ namespace DynamORM.Tests.Select
|
||||
Assert.AreEqual(exp.last, o.last);
|
||||
}
|
||||
|
||||
/// <summary>Test dynamic <c>Single</c> multi.</summary>
|
||||
[Test]
|
||||
public void TestSingleObject2()
|
||||
{
|
||||
var exp = new { id = 19, first = "Ori", last = "Ellis" };
|
||||
var o = GetTestBuilder()
|
||||
.Where(x => x.id == 19)
|
||||
.Select(x => new { id = x.id, first = x.first, last = x.last })
|
||||
.Execute()
|
||||
.First();
|
||||
|
||||
Assert.AreEqual(exp.id, o.id);
|
||||
Assert.AreEqual(exp.first, o.first);
|
||||
Assert.AreEqual(exp.last, o.last);
|
||||
}
|
||||
|
||||
#endregion Select
|
||||
|
||||
#region Where
|
||||
@@ -247,6 +447,14 @@ namespace DynamORM.Tests.Select
|
||||
Assert.AreEqual("hoyt.tran", GetTestTable().Single(where: new DynamicColumn("id").Eq(100)).login);
|
||||
}
|
||||
|
||||
/// <summary>Test dynamic where expression equal.</summary>
|
||||
[Test]
|
||||
public void TestWhereEq2()
|
||||
{
|
||||
Assert.AreEqual("hoyt.tran", GetTestBuilder()
|
||||
.Where(x => x.id == 100).Execute().First().login);
|
||||
}
|
||||
|
||||
/// <summary>Test dynamic where expression not equal.</summary>
|
||||
[Test]
|
||||
public void TestWhereNot()
|
||||
@@ -254,6 +462,16 @@ namespace DynamORM.Tests.Select
|
||||
Assert.AreEqual(199, GetTestTable().Count(where: new DynamicColumn("id").Not(100)));
|
||||
}
|
||||
|
||||
/// <summary>Test dynamic where expression not equal.</summary>
|
||||
[Test]
|
||||
public void TestWhereNot2()
|
||||
{
|
||||
Assert.AreEqual(199, GetTestBuilder()
|
||||
.Where(x => x.id != 100)
|
||||
.Select(x => x.Count())
|
||||
.Scalar());
|
||||
}
|
||||
|
||||
/// <summary>Test dynamic where expression like.</summary>
|
||||
[Test]
|
||||
public void TestWhereLike()
|
||||
@@ -261,6 +479,14 @@ namespace DynamORM.Tests.Select
|
||||
Assert.AreEqual(100, GetTestTable().Single(where: new DynamicColumn("login").Like("Hoyt.%")).id);
|
||||
}
|
||||
|
||||
/// <summary>Test dynamic where expression like.</summary>
|
||||
[Test]
|
||||
public void TestWhereLike2()
|
||||
{
|
||||
Assert.AreEqual(100, GetTestBuilder()
|
||||
.Where(x => x.login.Like("Hoyt.%")).Execute().First().id);
|
||||
}
|
||||
|
||||
/// <summary>Test dynamic where expression not like.</summary>
|
||||
[Test]
|
||||
public void TestWhereNotLike()
|
||||
@@ -268,6 +494,26 @@ namespace DynamORM.Tests.Select
|
||||
Assert.AreEqual(199, GetTestTable().Count(where: new DynamicColumn("login").NotLike("Hoyt.%")));
|
||||
}
|
||||
|
||||
/// <summary>Test dynamic where expression not like.</summary>
|
||||
[Test]
|
||||
public void TestWhereNotLike2()
|
||||
{
|
||||
Assert.AreEqual(199, GetTestBuilder()
|
||||
.Where(x => x.login.NotLike("Hoyt.%"))
|
||||
.Select(x => x.Count())
|
||||
.Scalar());
|
||||
}
|
||||
|
||||
/// <summary>Test dynamic where expression not like.</summary>
|
||||
[Test]
|
||||
public void TestWhereNotLike3()
|
||||
{
|
||||
Assert.AreEqual(199, GetTestBuilder()
|
||||
.Where(x => !x.login.Like("Hoyt.%"))
|
||||
.Select(x => x.Count())
|
||||
.Scalar());
|
||||
}
|
||||
|
||||
/// <summary>Test dynamic where expression greater.</summary>
|
||||
[Test]
|
||||
public void TestWhereGt()
|
||||
@@ -275,6 +521,16 @@ namespace DynamORM.Tests.Select
|
||||
Assert.AreEqual(100, GetTestTable().Count(where: new DynamicColumn("id").Greater(100)));
|
||||
}
|
||||
|
||||
/// <summary>Test dynamic where expression greater.</summary>
|
||||
[Test]
|
||||
public void TestWhereGt2()
|
||||
{
|
||||
Assert.AreEqual(100, GetTestBuilder()
|
||||
.Where(x => x.id > 100)
|
||||
.Select(x => x.Count())
|
||||
.Scalar());
|
||||
}
|
||||
|
||||
/// <summary>Test dynamic where expression greater or equal.</summary>
|
||||
[Test]
|
||||
public void TestWhereGte()
|
||||
@@ -282,6 +538,16 @@ namespace DynamORM.Tests.Select
|
||||
Assert.AreEqual(101, GetTestTable().Count(where: new DynamicColumn("id").GreaterOrEqual(100)));
|
||||
}
|
||||
|
||||
/// <summary>Test dynamic where expression greater or equal.</summary>
|
||||
[Test]
|
||||
public void TestWhereGte2()
|
||||
{
|
||||
Assert.AreEqual(101, GetTestBuilder()
|
||||
.Where(x => x.id >= 100)
|
||||
.Select(x => x.Count())
|
||||
.Scalar());
|
||||
}
|
||||
|
||||
/// <summary>Test dynamic where expression less.</summary>
|
||||
[Test]
|
||||
public void TestWhereLt()
|
||||
@@ -289,6 +555,16 @@ namespace DynamORM.Tests.Select
|
||||
Assert.AreEqual(99, GetTestTable().Count(where: new DynamicColumn("id").Less(100)));
|
||||
}
|
||||
|
||||
/// <summary>Test dynamic where expression less.</summary>
|
||||
[Test]
|
||||
public void TestWhereLt2()
|
||||
{
|
||||
Assert.AreEqual(99, GetTestBuilder()
|
||||
.Where(x => x.id < 100)
|
||||
.Select(x => x.Count())
|
||||
.Scalar());
|
||||
}
|
||||
|
||||
/// <summary>Test dynamic where expression less or equal.</summary>
|
||||
[Test]
|
||||
public void TestWhereLte()
|
||||
@@ -296,6 +572,16 @@ namespace DynamORM.Tests.Select
|
||||
Assert.AreEqual(100, GetTestTable().Count(where: new DynamicColumn("id").LessOrEqual(100)));
|
||||
}
|
||||
|
||||
/// <summary>Test dynamic where expression less or equal.</summary>
|
||||
[Test]
|
||||
public void TestWhereLte2()
|
||||
{
|
||||
Assert.AreEqual(100, GetTestBuilder()
|
||||
.Where(x => x.id <= 100)
|
||||
.Select(x => x.Count())
|
||||
.Scalar());
|
||||
}
|
||||
|
||||
/// <summary>Test dynamic where expression between.</summary>
|
||||
[Test]
|
||||
public void TestWhereBetween()
|
||||
@@ -303,7 +589,17 @@ namespace DynamORM.Tests.Select
|
||||
Assert.AreEqual(26, GetTestTable().Count(where: new DynamicColumn("id").Between(75, 100)));
|
||||
}
|
||||
|
||||
/// <summary>Test dynamic where expression in params.</summary>
|
||||
/// <summary>Test dynamic where expression between.</summary>
|
||||
[Test]
|
||||
public void TestWhereBetween2()
|
||||
{
|
||||
Assert.AreEqual(26, GetTestBuilder()
|
||||
.Where(x => x.id.Between(75, 100))
|
||||
.Select(x => x.Count())
|
||||
.Scalar());
|
||||
}
|
||||
|
||||
/// <summary>Test dynamic where expression in parameters.</summary>
|
||||
[Test]
|
||||
public void TestWhereIn1()
|
||||
{
|
||||
@@ -317,6 +613,26 @@ namespace DynamORM.Tests.Select
|
||||
Assert.AreEqual(3, GetTestTable().Count(where: new DynamicColumn("id").In(new[] { 75, 99, 100 })));
|
||||
}
|
||||
|
||||
/// <summary>Test dynamic where expression in parameters.</summary>
|
||||
[Test]
|
||||
public void TestWhereIn3()
|
||||
{
|
||||
Assert.AreEqual(3, GetTestBuilder()
|
||||
.Where(x => x.id.In(75, 99, 100))
|
||||
.Select(x => x.Count())
|
||||
.Scalar());
|
||||
}
|
||||
|
||||
/// <summary>Test dynamic where expression in parameters.</summary>
|
||||
[Test]
|
||||
public void TestWhereIn4()
|
||||
{
|
||||
Assert.AreEqual(3, GetTestBuilder()
|
||||
.Where(x => x.id.In(new[] { 75, 99, 100 }))
|
||||
.Select(x => x.Count())
|
||||
.Scalar());
|
||||
}
|
||||
|
||||
#endregion Where
|
||||
}
|
||||
}
|
||||
284
DynamORM.Tests/Select/LegacyParserTests.cs
Normal file
284
DynamORM.Tests/Select/LegacyParserTests.cs
Normal file
@@ -0,0 +1,284 @@
|
||||
/*
|
||||
* 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;
|
||||
using DynamORM.Builders.Implementation;
|
||||
using NUnit.Framework;
|
||||
|
||||
namespace DynamORM.Tests.Select
|
||||
{
|
||||
/// <summary>Tests of legacy parser methods.</summary>
|
||||
public class LegacyParserTests : 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 where expression equal.
|
||||
/// </summary>
|
||||
[Test]
|
||||
public void TestWhereEq()
|
||||
{
|
||||
IDynamicSelectQueryBuilder cmd = new DynamicSelectQueryBuilder(Database);
|
||||
|
||||
cmd.From(x => x.dbo.Users.As(x.u))
|
||||
.Where(new DynamicColumn("u.Deleted").Eq(0));
|
||||
|
||||
Assert.AreEqual(string.Format("SELECT * FROM \"dbo\".\"Users\" AS u WHERE (u.\"Deleted\" = [${0}])", cmd.Parameters.Keys.First()), cmd.CommandText());
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// Tests the where expression equal with brackets.
|
||||
/// </summary>
|
||||
[Test]
|
||||
public void TestWhereBracketsEq()
|
||||
{
|
||||
IDynamicSelectQueryBuilder cmd = new DynamicSelectQueryBuilder(Database);
|
||||
|
||||
cmd.From(x => x.dbo.Users.As(x.u))
|
||||
.Where(new DynamicColumn("u.Deleted").Eq(0).SetBeginBlock())
|
||||
.Where(new DynamicColumn("u.IsActive").Eq(1).SetEndBlock());
|
||||
|
||||
Assert.AreEqual(string.Format("SELECT * FROM \"dbo\".\"Users\" AS u WHERE ((u.\"Deleted\" = [${0}]) AND (u.\"IsActive\" = [${1}]))", cmd.Parameters.Keys.First(), cmd.Parameters.Keys.Last()), cmd.CommandText());
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// Tests the where expression equal with brackets and or condition.
|
||||
/// </summary>
|
||||
[Test]
|
||||
public void TestWhereBracketsOrEq()
|
||||
{
|
||||
IDynamicSelectQueryBuilder cmd = new DynamicSelectQueryBuilder(Database);
|
||||
|
||||
cmd.From(x => x.dbo.Users.As(x.u))
|
||||
.Where(new DynamicColumn("u.Deleted").Eq(0).SetBeginBlock())
|
||||
.Where(new DynamicColumn("u.IsActive").Eq(1).SetOr().SetEndBlock());
|
||||
|
||||
Assert.AreEqual(string.Format("SELECT * FROM \"dbo\".\"Users\" AS u WHERE ((u.\"Deleted\" = [${0}]) OR (u.\"IsActive\" = [${1}]))", cmd.Parameters.Keys.First(), cmd.Parameters.Keys.Last()), cmd.CommandText());
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// Tests the where expression not equal.
|
||||
/// </summary>
|
||||
[Test]
|
||||
public void TestWhereNotEq()
|
||||
{
|
||||
IDynamicSelectQueryBuilder cmd = new DynamicSelectQueryBuilder(Database);
|
||||
|
||||
cmd.From(x => x.dbo.Users.As(x.u))
|
||||
.Where(new DynamicColumn("u.Deleted").Not(0));
|
||||
|
||||
Assert.AreEqual(string.Format("SELECT * FROM \"dbo\".\"Users\" AS u WHERE (u.\"Deleted\" <> [${0}])", cmd.Parameters.Keys.First()), cmd.CommandText());
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// Tests the where expression greater.
|
||||
/// </summary>
|
||||
[Test]
|
||||
public void TestWhereGreater()
|
||||
{
|
||||
IDynamicSelectQueryBuilder cmd = new DynamicSelectQueryBuilder(Database);
|
||||
|
||||
cmd.From(x => x.dbo.Users.As(x.u))
|
||||
.Where(new DynamicColumn("u.Deleted").Greater(0));
|
||||
|
||||
Assert.AreEqual(string.Format("SELECT * FROM \"dbo\".\"Users\" AS u WHERE (u.\"Deleted\" > [${0}])", cmd.Parameters.Keys.First()), cmd.CommandText());
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// Tests the where expression greater or equal.
|
||||
/// </summary>
|
||||
[Test]
|
||||
public void TestWhereGreaterOrEqual()
|
||||
{
|
||||
IDynamicSelectQueryBuilder cmd = new DynamicSelectQueryBuilder(Database);
|
||||
|
||||
cmd.From(x => x.dbo.Users.As(x.u))
|
||||
.Where(new DynamicColumn("u.Deleted").GreaterOrEqual(0));
|
||||
|
||||
Assert.AreEqual(string.Format("SELECT * FROM \"dbo\".\"Users\" AS u WHERE (u.\"Deleted\" >= [${0}])", cmd.Parameters.Keys.First()), cmd.CommandText());
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// Tests the where expression less.
|
||||
/// </summary>
|
||||
[Test]
|
||||
public void TestWhereLess()
|
||||
{
|
||||
IDynamicSelectQueryBuilder cmd = new DynamicSelectQueryBuilder(Database);
|
||||
|
||||
cmd.From(x => x.dbo.Users.As(x.u))
|
||||
.Where(new DynamicColumn("u.Deleted").Less(1));
|
||||
|
||||
Assert.AreEqual(string.Format("SELECT * FROM \"dbo\".\"Users\" AS u WHERE (u.\"Deleted\" < [${0}])", cmd.Parameters.Keys.First()), cmd.CommandText());
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// Tests the where expression less or equal.
|
||||
/// </summary>
|
||||
[Test]
|
||||
public void TestWhereLessOrEqual()
|
||||
{
|
||||
IDynamicSelectQueryBuilder cmd = new DynamicSelectQueryBuilder(Database);
|
||||
|
||||
cmd.From(x => x.dbo.Users.As(x.u))
|
||||
.Where(new DynamicColumn("u.Deleted").LessOrEqual(1));
|
||||
|
||||
Assert.AreEqual(string.Format("SELECT * FROM \"dbo\".\"Users\" AS u WHERE (u.\"Deleted\" <= [${0}])", cmd.Parameters.Keys.First()), cmd.CommandText());
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// Tests the where expression like.
|
||||
/// </summary>
|
||||
[Test]
|
||||
public void TestWhereLike()
|
||||
{
|
||||
IDynamicSelectQueryBuilder cmd = new DynamicSelectQueryBuilder(Database);
|
||||
|
||||
cmd.From(x => x.dbo.Users.As(x.u))
|
||||
.Where(new DynamicColumn("u.Deleted").Like("%1"));
|
||||
|
||||
Assert.AreEqual(string.Format("SELECT * FROM \"dbo\".\"Users\" AS u WHERE u.\"Deleted\" LIKE [${0}]", cmd.Parameters.Keys.First()), cmd.CommandText());
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// Tests the where expression not like.
|
||||
/// </summary>
|
||||
[Test]
|
||||
public void TestWhereNotLike()
|
||||
{
|
||||
IDynamicSelectQueryBuilder cmd = new DynamicSelectQueryBuilder(Database);
|
||||
|
||||
cmd.From(x => x.dbo.Users.As(x.u))
|
||||
.Where(new DynamicColumn("u.Deleted").NotLike("%1"));
|
||||
|
||||
Assert.AreEqual(string.Format("SELECT * FROM \"dbo\".\"Users\" AS u WHERE u.\"Deleted\" NOT LIKE [${0}]", cmd.Parameters.Keys.First()), cmd.CommandText());
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// Tests the where expression between.
|
||||
/// </summary>
|
||||
[Test]
|
||||
public void TestWhereBetween()
|
||||
{
|
||||
IDynamicSelectQueryBuilder cmd = new DynamicSelectQueryBuilder(Database);
|
||||
|
||||
cmd.From(x => x.dbo.Users.As(x.u))
|
||||
.Where(new DynamicColumn("u.Deleted").Between(0, 1));
|
||||
|
||||
Assert.AreEqual(string.Format("SELECT * FROM \"dbo\".\"Users\" AS u WHERE u.\"Deleted\" BETWEEN [${0}] AND [${1}]", cmd.Parameters.Keys.First(), cmd.Parameters.Keys.Last()), cmd.CommandText());
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// Tests the where expression in.
|
||||
/// </summary>
|
||||
[Test]
|
||||
public void TestWhereIn()
|
||||
{
|
||||
IDynamicSelectQueryBuilder cmd = new DynamicSelectQueryBuilder(Database);
|
||||
|
||||
cmd.From(x => x.dbo.Users.As(x.u))
|
||||
.Where(new DynamicColumn("u.Deleted").In(0, 1));
|
||||
|
||||
Assert.AreEqual(string.Format("SELECT * FROM \"dbo\".\"Users\" AS u WHERE u.\"Deleted\" IN([${0}], [${1}])", cmd.Parameters.Keys.First(), cmd.Parameters.Keys.Last()), cmd.CommandText());
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// Tests the where expression using anonymous types.
|
||||
/// </summary>
|
||||
[Test]
|
||||
public void TestWhereAnon()
|
||||
{
|
||||
IDynamicSelectQueryBuilder cmd = new DynamicSelectQueryBuilder(Database);
|
||||
|
||||
cmd.From(x => x.dbo.Users.As(x.u))
|
||||
.Where(new { Deleted = 0, IsActive = 1, _table = "u" });
|
||||
|
||||
Assert.AreEqual(string.Format("SELECT * FROM \"dbo\".\"Users\" AS u WHERE (u.\"Deleted\" = [${0}]) AND (u.\"IsActive\" = [${1}])", cmd.Parameters.Keys.First(), cmd.Parameters.Keys.Last()), cmd.CommandText());
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// Tests the order by column.
|
||||
/// </summary>
|
||||
[Test]
|
||||
public void TestOrderByCol()
|
||||
{
|
||||
IDynamicSelectQueryBuilder cmd = new DynamicSelectQueryBuilder(Database);
|
||||
|
||||
cmd.From(x => x.dbo.Users.As(x.u))
|
||||
.OrderBy(new DynamicColumn("u.Name").Desc());
|
||||
|
||||
Assert.AreEqual(string.Format("SELECT * FROM \"dbo\".\"Users\" AS u ORDER BY u.\"Name\" DESC"), cmd.CommandText());
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// Tests the order by column number.
|
||||
/// </summary>
|
||||
[Test]
|
||||
public void TestOrderByNum()
|
||||
{
|
||||
IDynamicSelectQueryBuilder cmd = new DynamicSelectQueryBuilder(Database);
|
||||
|
||||
cmd.From(x => x.dbo.Users.As(x.u))
|
||||
.OrderBy(new DynamicColumn("u.Name").SetAlias("1").Desc());
|
||||
|
||||
Assert.AreEqual(string.Format("SELECT * FROM \"dbo\".\"Users\" AS u ORDER BY 1 DESC"), cmd.CommandText());
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// Tests the group by column.
|
||||
/// </summary>
|
||||
[Test]
|
||||
public void TestGroupByCol()
|
||||
{
|
||||
IDynamicSelectQueryBuilder cmd = new DynamicSelectQueryBuilder(Database);
|
||||
|
||||
cmd.From(x => x.dbo.Users.As(x.u))
|
||||
.GroupBy(new DynamicColumn("u.Name"));
|
||||
|
||||
Assert.AreEqual(string.Format("SELECT * FROM \"dbo\".\"Users\" AS u GROUP BY u.\"Name\""), cmd.CommandText());
|
||||
}
|
||||
}
|
||||
}
|
||||
731
DynamORM.Tests/Select/ParserTests.cs
Normal file
731
DynamORM.Tests/Select/ParserTests.cs
Normal file
@@ -0,0 +1,731 @@
|
||||
/*
|
||||
* 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;
|
||||
using DynamORM.Builders.Implementation;
|
||||
using NUnit.Framework;
|
||||
|
||||
namespace DynamORM.Tests.Select
|
||||
{
|
||||
/// <summary>
|
||||
/// New parser tests.
|
||||
/// </summary>
|
||||
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 from method.
|
||||
/// </summary>
|
||||
[Test]
|
||||
public void TestFromGet()
|
||||
{
|
||||
IDynamicSelectQueryBuilder cmd = new DynamicSelectQueryBuilder(Database);
|
||||
|
||||
cmd.From(u => u.dbo.Users);
|
||||
Assert.AreEqual("SELECT * FROM \"dbo\".\"Users\"", cmd.CommandText());
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// Tests from method with multi tables.
|
||||
/// </summary>
|
||||
[Test]
|
||||
public void TestFromGetMultiKulti()
|
||||
{
|
||||
IDynamicSelectQueryBuilder cmd = new DynamicSelectQueryBuilder(Database);
|
||||
|
||||
cmd.From(u => u.dbo.Users, c => c.Clients);
|
||||
Assert.AreEqual("SELECT * FROM \"dbo\".\"Users\", \"Clients\"", cmd.CommandText());
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// Tests from method with as expression in text.
|
||||
/// </summary>
|
||||
[Test]
|
||||
public void TestFromGetAs1()
|
||||
{
|
||||
IDynamicSelectQueryBuilder cmd = new DynamicSelectQueryBuilder(Database);
|
||||
|
||||
cmd.From(u => u.dbo.Users.As("c"));
|
||||
Assert.AreEqual("SELECT * FROM \"dbo\".\"Users\" AS c", cmd.CommandText());
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// Tests from method with as expression using lambda.
|
||||
/// </summary>
|
||||
[Test]
|
||||
public void TestFromGetAs2()
|
||||
{
|
||||
IDynamicSelectQueryBuilder cmd = new DynamicSelectQueryBuilder(Database);
|
||||
|
||||
cmd.From(u => u.dbo.Users.As(u.c));
|
||||
Assert.AreEqual("SELECT * FROM \"dbo\".\"Users\" AS c", cmd.CommandText());
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// Tests from method using text.
|
||||
/// </summary>
|
||||
[Test]
|
||||
public void TestFromText()
|
||||
{
|
||||
IDynamicSelectQueryBuilder cmd = new DynamicSelectQueryBuilder(Database);
|
||||
|
||||
cmd.From(u => "dbo.Users");
|
||||
Assert.AreEqual("SELECT * FROM \"dbo\".\"Users\"", cmd.CommandText());
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// Tests from method using text with decorators.
|
||||
/// </summary>
|
||||
[Test]
|
||||
public void TestFromDecoratedText()
|
||||
{
|
||||
IDynamicSelectQueryBuilder cmd = new DynamicSelectQueryBuilder(Database);
|
||||
|
||||
cmd.From(u => "\"dbo\".\"Users\"");
|
||||
Assert.AreEqual("SELECT * FROM \"dbo\".\"Users\"", cmd.CommandText());
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// Tests from method using text with as.
|
||||
/// </summary>
|
||||
[Test]
|
||||
public void TestFromTextAs1()
|
||||
{
|
||||
IDynamicSelectQueryBuilder cmd = new DynamicSelectQueryBuilder(Database);
|
||||
|
||||
cmd.From(u => "dbo.Users AS c");
|
||||
Assert.AreEqual("SELECT * FROM \"dbo\".\"Users\" AS c", cmd.CommandText());
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// Tests from method using invoke with as.
|
||||
/// </summary>
|
||||
[Test]
|
||||
public void TestFromTextAs2()
|
||||
{
|
||||
IDynamicSelectQueryBuilder cmd = new DynamicSelectQueryBuilder(Database);
|
||||
|
||||
cmd.From(u => u(u.dbo.Users).As(u.u));
|
||||
|
||||
Assert.AreEqual("SELECT * FROM \"dbo\".\"Users\" AS u", cmd.CommandText());
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// Tests from method using invoke with sub query.
|
||||
/// </summary>
|
||||
[Test]
|
||||
public void TestFromSubQuery1()
|
||||
{
|
||||
IDynamicSelectQueryBuilder cmd = new DynamicSelectQueryBuilder(Database);
|
||||
|
||||
cmd.From(u => u(new DynamicSelectQueryBuilder(Database).From(x => x.dbo.Users)).As("u"));
|
||||
|
||||
Assert.AreEqual("SELECT * FROM (SELECT * FROM \"dbo\".\"Users\") AS u", cmd.CommandText());
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// Tests from method using invoke with sub query.
|
||||
/// </summary>
|
||||
[Test]
|
||||
public void TestFromSubQuery2()
|
||||
{
|
||||
IDynamicSelectQueryBuilder cmd = new DynamicSelectQueryBuilder(Database);
|
||||
|
||||
cmd.From(u => u(cmd.SubQuery(x => x.dbo.Users)).As("u"));
|
||||
|
||||
Assert.AreEqual("SELECT * FROM (SELECT * FROM \"dbo\".\"Users\") AS u", cmd.CommandText());
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// Tests where method with alias.
|
||||
/// </summary>
|
||||
[Test]
|
||||
public void TestWhereAlias()
|
||||
{
|
||||
IDynamicSelectQueryBuilder cmd = new DynamicSelectQueryBuilder(Database);
|
||||
|
||||
cmd.From(u => u.dbo.Users.As(u.c))
|
||||
.Where(u => u.c.UserName == "admin");
|
||||
|
||||
Assert.AreEqual(string.Format("SELECT * FROM \"dbo\".\"Users\" AS c WHERE (c.\"UserName\" = [${0}])", cmd.Parameters.Keys.First()), cmd.CommandText());
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// Tests complex where method with alias.
|
||||
/// </summary>
|
||||
[Test]
|
||||
public void TestWhereAliasComplex()
|
||||
{
|
||||
IDynamicSelectQueryBuilder cmd = new DynamicSelectQueryBuilder(Database);
|
||||
|
||||
cmd.From(u => u.dbo.Users.As(u.c))
|
||||
.Where(u => u.c.UserName == "admin" || u.c.UserName == "root")
|
||||
.Where(u => u.c.IsActive = true);
|
||||
|
||||
Assert.AreEqual(string.Format("SELECT * FROM \"dbo\".\"Users\" AS c WHERE ((c.\"UserName\" = [${0}]) OR (c.\"UserName\" = [${1}])) AND c.\"IsActive\" = ([${2}])",
|
||||
cmd.Parameters.Keys.ToArray()[0], cmd.Parameters.Keys.ToArray()[1], cmd.Parameters.Keys.ToArray()[2]), cmd.CommandText());
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// Tests where method with alias using in.
|
||||
/// </summary>
|
||||
[Test]
|
||||
public void TestWhereAliasIn()
|
||||
{
|
||||
IDynamicSelectQueryBuilder cmd = new DynamicSelectQueryBuilder(Database);
|
||||
|
||||
int[] ids = new int[] { 0, 1, 2, 3, 4, 5 };
|
||||
|
||||
cmd.From(u => u.dbo.Users.As(u.c))
|
||||
.Where(u => u.c.UserName == "admin" || u.c.UserName == "root")
|
||||
.Where(u => u.c.IsActive == true)
|
||||
.Where(u => u.c.Id_User.In(ids));
|
||||
|
||||
Assert.AreEqual(string.Format("SELECT * FROM \"dbo\".\"Users\" AS c WHERE ((c.\"UserName\" = [${0}]) OR (c.\"UserName\" = [${1}])) AND (c.\"IsActive\" = [${2}]) AND c.\"Id_User\" IN({3})",
|
||||
cmd.Parameters.Keys.ToArray()[0], cmd.Parameters.Keys.ToArray()[1], cmd.Parameters.Keys.ToArray()[2],
|
||||
string.Join(", ", cmd.Parameters.Keys.Skip(3).Select(p => string.Format("[${0}]", p)))), cmd.CommandText());
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// Tests where method with alias using between.
|
||||
/// </summary>
|
||||
[Test]
|
||||
public void TestWhereAliasBetween1()
|
||||
{
|
||||
IDynamicSelectQueryBuilder cmd = new DynamicSelectQueryBuilder(Database);
|
||||
|
||||
int[] ids = new int[] { 0, 5 };
|
||||
|
||||
cmd.From(u => u.dbo.Users.As(u.c))
|
||||
.Where(u => u.c.UserName == "admin" || u.c.UserName == "root")
|
||||
.Where(u => u.c.IsActive == true)
|
||||
.Where(u => u.c.Id_User.Between(ids));
|
||||
|
||||
Assert.AreEqual(string.Format("SELECT * FROM \"dbo\".\"Users\" AS c WHERE ((c.\"UserName\" = [${0}]) OR (c.\"UserName\" = [${1}])) AND (c.\"IsActive\" = [${2}]) AND c.\"Id_User\" BETWEEN [${3}] AND [${4}]",
|
||||
cmd.Parameters.Keys.ToArray()[0], cmd.Parameters.Keys.ToArray()[1], cmd.Parameters.Keys.ToArray()[2],
|
||||
cmd.Parameters.Keys.ToArray()[3], cmd.Parameters.Keys.ToArray()[4]), cmd.CommandText());
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// Tests where method with alias using between.
|
||||
/// </summary>
|
||||
[Test]
|
||||
public void TestWhereAliasBetween2()
|
||||
{
|
||||
IDynamicSelectQueryBuilder cmd = new DynamicSelectQueryBuilder(Database);
|
||||
|
||||
int[] ids = new int[] { 0, 5 };
|
||||
|
||||
cmd.From(u => u.dbo.Users.As(u.c))
|
||||
.Where(u => u.c.UserName == "admin" || u.c.UserName == "root")
|
||||
.Where(u => u.c.IsActive == true)
|
||||
.Where(u => u.c.Id_User.Between(ids[0], ids[1]));
|
||||
|
||||
Assert.AreEqual(string.Format("SELECT * FROM \"dbo\".\"Users\" AS c WHERE ((c.\"UserName\" = [${0}]) OR (c.\"UserName\" = [${1}])) AND (c.\"IsActive\" = [${2}]) AND c.\"Id_User\" BETWEEN [${3}] AND [${4}]",
|
||||
cmd.Parameters.Keys.ToArray()[0], cmd.Parameters.Keys.ToArray()[1], cmd.Parameters.Keys.ToArray()[2],
|
||||
cmd.Parameters.Keys.ToArray()[3], cmd.Parameters.Keys.ToArray()[4]), cmd.CommandText());
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// Tests where method without alias.
|
||||
/// </summary>
|
||||
[Test]
|
||||
public void TestWhereNoAlias()
|
||||
{
|
||||
IDynamicSelectQueryBuilder cmd = new DynamicSelectQueryBuilder(Database);
|
||||
|
||||
cmd.From(u => u.dbo.Users)
|
||||
.Where(u => u.UserName == "admin");
|
||||
|
||||
Assert.AreEqual(string.Format("SELECT * FROM \"dbo\".\"Users\" WHERE (\"UserName\" = [${0}])", cmd.Parameters.Keys.First()), cmd.CommandText());
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// Tests where method with full column name.
|
||||
/// </summary>
|
||||
[Test]
|
||||
public void TestWhereNoAliasTableName()
|
||||
{
|
||||
IDynamicSelectQueryBuilder cmd = new DynamicSelectQueryBuilder(Database);
|
||||
|
||||
cmd.From(u => u.dbo.Users)
|
||||
.Where(u => u.dbo.Users.UserName == "admin");
|
||||
|
||||
Assert.AreEqual(string.Format("SELECT * FROM \"dbo\".\"Users\" WHERE (\"dbo\".\"Users\".\"UserName\" = [${0}])", cmd.Parameters.Keys.First()), cmd.CommandText());
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// Tests simple join method.
|
||||
/// </summary>
|
||||
[Test]
|
||||
public void TestJoinClassic()
|
||||
{
|
||||
IDynamicSelectQueryBuilder cmd = new DynamicSelectQueryBuilder(Database);
|
||||
|
||||
cmd.From(u => u.dbo.Users.As(u.usr))
|
||||
.Join(u => u.dbo.UserClients.AS(u.uc).On(u.usr.Id_User == u.uc.User_Id));
|
||||
|
||||
Assert.AreEqual(string.Format("SELECT * FROM \"dbo\".\"Users\" AS usr JOIN \"dbo\".\"UserClients\" AS uc ON (usr.\"Id_User\" = uc.\"User_Id\")"), cmd.CommandText());
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// Tests inner join method.
|
||||
/// </summary>
|
||||
[Test]
|
||||
public void TestInnerJoin()
|
||||
{
|
||||
IDynamicSelectQueryBuilder cmd = new DynamicSelectQueryBuilder(Database);
|
||||
|
||||
cmd.From(u => u.dbo.Users.As(u.usr))
|
||||
.Join(u => u.Inner().dbo.UserClients.AS(u.uc).On(u.usr.Id_User == u.uc.User_Id));
|
||||
|
||||
Assert.AreEqual(string.Format("SELECT * FROM \"dbo\".\"Users\" AS usr INNER JOIN \"dbo\".\"UserClients\" AS uc ON (usr.\"Id_User\" = uc.\"User_Id\")"), cmd.CommandText());
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// Tests left outer join method.
|
||||
/// </summary>
|
||||
[Test]
|
||||
public void TestLeftOuterJoin()
|
||||
{
|
||||
IDynamicSelectQueryBuilder cmd = new DynamicSelectQueryBuilder(Database);
|
||||
|
||||
cmd.From(u => u.dbo.Users.As(u.usr))
|
||||
.Join(u => u.LeftOuter().dbo.UserClients.AS(u.uc).On(u.usr.Id_User == u.uc.User_Id));
|
||||
|
||||
Assert.AreEqual(string.Format("SELECT * FROM \"dbo\".\"Users\" AS usr LEFT OUTER JOIN \"dbo\".\"UserClients\" AS uc ON (usr.\"Id_User\" = uc.\"User_Id\")"), cmd.CommandText());
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// Tests left join method.
|
||||
/// </summary>
|
||||
[Test]
|
||||
public void TestLeftJoin()
|
||||
{
|
||||
IDynamicSelectQueryBuilder cmd = new DynamicSelectQueryBuilder(Database);
|
||||
|
||||
cmd.From(u => u.dbo.Users.As(u.usr))
|
||||
.Join(u => u.Left().dbo.UserClients.AS(u.uc).On(u.usr.Id_User == u.uc.User_Id));
|
||||
|
||||
Assert.AreEqual(string.Format("SELECT * FROM \"dbo\".\"Users\" AS usr LEFT JOIN \"dbo\".\"UserClients\" AS uc ON (usr.\"Id_User\" = uc.\"User_Id\")"), cmd.CommandText());
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// Tests right outer join method.
|
||||
/// </summary>
|
||||
[Test]
|
||||
public void TestRightOuterJoin()
|
||||
{
|
||||
IDynamicSelectQueryBuilder cmd = new DynamicSelectQueryBuilder(Database);
|
||||
|
||||
cmd.From(u => u.dbo.Users.As(u.usr))
|
||||
.Join(u => u.RightOuter().dbo.UserClients.AS(u.uc).On(u.usr.Id_User == u.uc.User_Id));
|
||||
|
||||
Assert.AreEqual(string.Format("SELECT * FROM \"dbo\".\"Users\" AS usr RIGHT OUTER JOIN \"dbo\".\"UserClients\" AS uc ON (usr.\"Id_User\" = uc.\"User_Id\")"), cmd.CommandText());
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// Tests right join method.
|
||||
/// </summary>
|
||||
[Test]
|
||||
public void TestRightJoin()
|
||||
{
|
||||
IDynamicSelectQueryBuilder cmd = new DynamicSelectQueryBuilder(Database);
|
||||
|
||||
cmd.From(u => u.dbo.Users.As(u.usr))
|
||||
.Join(u => u.Right().dbo.UserClients.AS(u.uc).On(u.usr.Id_User == u.uc.User_Id));
|
||||
|
||||
Assert.AreEqual(string.Format("SELECT * FROM \"dbo\".\"Users\" AS usr RIGHT JOIN \"dbo\".\"UserClients\" AS uc ON (usr.\"Id_User\" = uc.\"User_Id\")"), cmd.CommandText());
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// Tests complex join with parameters.
|
||||
/// </summary>
|
||||
[Test]
|
||||
public void TestJoinClassicWithParamAndWhere()
|
||||
{
|
||||
IDynamicSelectQueryBuilder cmd = new DynamicSelectQueryBuilder(Database);
|
||||
|
||||
cmd.From(u => u.dbo.Users.As(u.usr))
|
||||
.Join(u => u.dbo.UserClients.AS(u.uc).On(u.usr.Id_User == u.uc.User_Id && u.uc.Deleted == 0))
|
||||
.Where(u => u.usr.Active == true);
|
||||
|
||||
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.First(), cmd.Parameters.Keys.Last()), cmd.CommandText());
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// Tests select all.
|
||||
/// </summary>
|
||||
[Test]
|
||||
public void TestSelectAll1()
|
||||
{
|
||||
IDynamicSelectQueryBuilder cmd = new DynamicSelectQueryBuilder(Database);
|
||||
|
||||
cmd.From(u => u.dbo.Users.As(u.c))
|
||||
.Select(u => u.c.All());
|
||||
|
||||
Assert.AreEqual("SELECT c.* FROM \"dbo\".\"Users\" AS c", cmd.CommandText());
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// Tests select all.
|
||||
/// </summary>
|
||||
[Test]
|
||||
public void TestSelectAll2()
|
||||
{
|
||||
IDynamicSelectQueryBuilder cmd = new DynamicSelectQueryBuilder(Database);
|
||||
|
||||
cmd.From(u => u.dbo.Users)
|
||||
.Select(u => u.dbo.Users.All());
|
||||
|
||||
Assert.AreEqual("SELECT \"dbo\".\"Users\".* FROM \"dbo\".\"Users\"", cmd.CommandText());
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// Tests select field.
|
||||
/// </summary>
|
||||
[Test]
|
||||
public void TestSelectField1()
|
||||
{
|
||||
IDynamicSelectQueryBuilder cmd = new DynamicSelectQueryBuilder(Database);
|
||||
|
||||
cmd.From(u => u.dbo.Users.As(u.c))
|
||||
.Select(u => u.c.UserName);
|
||||
|
||||
Assert.AreEqual("SELECT c.\"UserName\" FROM \"dbo\".\"Users\" AS c", cmd.CommandText());
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// Tests select field.
|
||||
/// </summary>
|
||||
[Test]
|
||||
public void TestSelectField2()
|
||||
{
|
||||
IDynamicSelectQueryBuilder cmd = new DynamicSelectQueryBuilder(Database);
|
||||
|
||||
cmd.From(u => u.dbo.Users)
|
||||
.Select(u => u.dbo.Users.UserName);
|
||||
|
||||
Assert.AreEqual("SELECT \"dbo\".\"Users\".\"UserName\" FROM \"dbo\".\"Users\"", cmd.CommandText());
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// Tests select field with alias.
|
||||
/// </summary>
|
||||
[Test]
|
||||
public void TestSelectFieldAlias1()
|
||||
{
|
||||
IDynamicSelectQueryBuilder cmd = new DynamicSelectQueryBuilder(Database);
|
||||
|
||||
cmd.From(u => u.dbo.Users.As(u.c))
|
||||
.Select(u => u.c.UserName.As(u.Name));
|
||||
|
||||
Assert.AreEqual("SELECT c.\"UserName\" AS \"Name\" FROM \"dbo\".\"Users\" AS c", cmd.CommandText());
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// Tests select field with alias.
|
||||
/// </summary>
|
||||
[Test]
|
||||
public void TestSelectFieldAlias2()
|
||||
{
|
||||
IDynamicSelectQueryBuilder cmd = new DynamicSelectQueryBuilder(Database);
|
||||
|
||||
cmd.From(u => u.dbo.Users)
|
||||
.Select(u => u.dbo.Users.UserName.As(u.Name));
|
||||
|
||||
Assert.AreEqual("SELECT \"dbo\".\"Users\".\"UserName\" AS \"Name\" FROM \"dbo\".\"Users\"", cmd.CommandText());
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// Tests select aggregate field with alias (Sum).
|
||||
/// </summary>
|
||||
[Test]
|
||||
public void TestSelectAggregateField1()
|
||||
{
|
||||
IDynamicSelectQueryBuilder cmd = new DynamicSelectQueryBuilder(Database);
|
||||
|
||||
cmd.From(u => u.dbo.Users.As(u.c))
|
||||
.Select(u => u.Sum(u.c.UserName).As(u.Name));
|
||||
|
||||
Assert.AreEqual("SELECT Sum(c.\"UserName\") AS \"Name\" FROM \"dbo\".\"Users\" AS c", cmd.CommandText());
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// Tests select aggregate field with alias (Coalesce).
|
||||
/// </summary>
|
||||
[Test]
|
||||
public void TestSelectAggregateField2()
|
||||
{
|
||||
IDynamicSelectQueryBuilder cmd = new DynamicSelectQueryBuilder(Database);
|
||||
|
||||
cmd.From(u => u.dbo.Users.As(u.c))
|
||||
.Select(u => u.Coalesce(u.c.UserName, u.c.FirstName + " " + u.c.LastName).As(u.Name));
|
||||
|
||||
Assert.AreEqual(string.Format("SELECT Coalesce(c.\"UserName\", ((c.\"FirstName\" + [${0}]) + c.\"LastName\")) AS \"Name\" FROM \"dbo\".\"Users\" AS c",
|
||||
cmd.Parameters.Keys.First()), cmd.CommandText());
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// Tests select aggregate field with alias (Sum).
|
||||
/// </summary>
|
||||
[Test]
|
||||
public void TestSelectAggregateField3()
|
||||
{
|
||||
IDynamicSelectQueryBuilder cmd = new DynamicSelectQueryBuilder(Database);
|
||||
|
||||
cmd.From(u => u.dbo.Users)
|
||||
.Select(u => u.Sum(u.dbo.Users.UserName));
|
||||
|
||||
Assert.AreEqual("SELECT Sum(\"dbo\".\"Users\".\"UserName\") FROM \"dbo\".\"Users\"", cmd.CommandText());
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// Tests select from anonymous type.
|
||||
/// </summary>
|
||||
[Test]
|
||||
public void TestSelectAnon()
|
||||
{
|
||||
IDynamicSelectQueryBuilder cmd = new DynamicSelectQueryBuilder(Database);
|
||||
|
||||
cmd.From(u => u.dbo.Users.As(u.c))
|
||||
.Select(u => new
|
||||
{
|
||||
Id_User = u.c.Id_User,
|
||||
Name = u.c.UserName,
|
||||
});
|
||||
|
||||
Assert.AreEqual("SELECT c.\"Id_User\" AS \"Id_User\", c.\"UserName\" AS \"Name\" FROM \"dbo\".\"Users\" AS c", cmd.CommandText());
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// Tests select escaped case.
|
||||
/// </summary>
|
||||
[Test]
|
||||
public void TestSelectCaseEscaped1()
|
||||
{
|
||||
IDynamicSelectQueryBuilder cmd = new DynamicSelectQueryBuilder(Database);
|
||||
|
||||
cmd.From(u => u.dbo.Users.As(u.c))
|
||||
.Select(u => u("CASE ", u.c.IsActive, " WHEN ", 1, " THEN ", 0, " ELSE ", 1, " END").As(u.Deleted));
|
||||
|
||||
Assert.AreEqual(string.Format("SELECT CASE c.\"IsActive\" WHEN [${0}] THEN [${1}] ELSE [${2}] END AS \"Deleted\" FROM \"dbo\".\"Users\" AS c",
|
||||
cmd.Parameters.Keys.ToArray()[0], cmd.Parameters.Keys.ToArray()[1], cmd.Parameters.Keys.ToArray()[2]), cmd.CommandText());
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// Tests select escaped case.
|
||||
/// </summary>
|
||||
[Test]
|
||||
public void TestSelectCaseEscaped2()
|
||||
{
|
||||
IDynamicSelectQueryBuilder cmd = new DynamicSelectQueryBuilder(Database);
|
||||
|
||||
cmd.From(u => u.dbo.Users.As(u.c))
|
||||
.Select(u => u("CASE WHEN ", u.c.IsActive == 1, " THEN ", 0, " ELSE ", 1, " END").As(u.Deleted));
|
||||
|
||||
Assert.AreEqual(string.Format("SELECT CASE WHEN (c.\"IsActive\" = [${0}]) THEN [${1}] ELSE [${2}] END AS \"Deleted\" FROM \"dbo\".\"Users\" AS c",
|
||||
cmd.Parameters.Keys.ToArray()[0], cmd.Parameters.Keys.ToArray()[1], cmd.Parameters.Keys.ToArray()[2]), cmd.CommandText());
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// Tests select escaped case with sub query.
|
||||
/// </summary>
|
||||
[Test]
|
||||
public void TestSelectCaseEscapedAndSub()
|
||||
{
|
||||
IDynamicSelectQueryBuilder cmd = new DynamicSelectQueryBuilder(Database);
|
||||
|
||||
cmd.From(u => u.dbo.Users.As(u.c))
|
||||
.Select(u => u("CASE WHEN ", u.c.IsActive == 1, " AND ", u.c.IsAdmin == u(cmd.SubQuery()
|
||||
.From(x => x.dbo.AccessRights.As(x.a))
|
||||
.Where(x => x.a.User_Id == x.c.Id_User)
|
||||
.Select(x => x.a.IsAdmin)), " THEN ", 0, " ELSE ", 1, " END").As(u.Deleted));
|
||||
|
||||
Assert.AreEqual(string.Format("SELECT CASE WHEN (c.\"IsActive\" = [${0}]) AND (c.\"IsAdmin\" = (SELECT a.\"IsAdmin\" FROM \"dbo\".\"AccessRights\" AS a WHERE (a.\"User_Id\" = c.\"Id_User\"))) THEN [${1}] ELSE [${2}] END AS \"Deleted\" FROM \"dbo\".\"Users\" AS c",
|
||||
cmd.Parameters.Keys.ToArray()[0], cmd.Parameters.Keys.ToArray()[1], cmd.Parameters.Keys.ToArray()[2]), cmd.CommandText());
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// Tests group by.
|
||||
/// </summary>
|
||||
[Test]
|
||||
public void TestGroupBy()
|
||||
{
|
||||
IDynamicSelectQueryBuilder cmd = new DynamicSelectQueryBuilder(Database);
|
||||
|
||||
cmd.From(u => u.dbo.Users.As(u.c))
|
||||
.GroupBy(u => u.c.UserName);
|
||||
|
||||
Assert.AreEqual("SELECT * FROM \"dbo\".\"Users\" AS c GROUP BY c.\"UserName\"", cmd.CommandText());
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// Tests order by.
|
||||
/// </summary>
|
||||
[Test]
|
||||
public void TestOrderBy()
|
||||
{
|
||||
IDynamicSelectQueryBuilder cmd = new DynamicSelectQueryBuilder(Database);
|
||||
|
||||
cmd.From(u => u.dbo.Users.As(u.c))
|
||||
.OrderBy(u => u.c.UserName);
|
||||
|
||||
Assert.AreEqual("SELECT * FROM \"dbo\".\"Users\" AS c ORDER BY c.\"UserName\" ASC", cmd.CommandText());
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// Tests order by using string with number.
|
||||
/// </summary>
|
||||
[Test]
|
||||
public void TestOrderByNumberedColumnStr()
|
||||
{
|
||||
IDynamicSelectQueryBuilder cmd = new DynamicSelectQueryBuilder(Database);
|
||||
|
||||
cmd.From(u => u.dbo.Users.As(u.c))
|
||||
.OrderBy(u => "1 DESC");
|
||||
|
||||
Assert.AreEqual("SELECT * FROM \"dbo\".\"Users\" AS c ORDER BY 1 DESC", cmd.CommandText());
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// Tests order by using member with number.
|
||||
/// </summary>
|
||||
[Test]
|
||||
public void TestOrderByNumberedColFn()
|
||||
{
|
||||
IDynamicSelectQueryBuilder cmd = new DynamicSelectQueryBuilder(Database);
|
||||
|
||||
cmd.From(u => u.dbo.Users.As(u.c))
|
||||
.OrderBy(u => u.Desc(1));
|
||||
|
||||
Assert.AreEqual("SELECT * FROM \"dbo\".\"Users\" AS c ORDER BY 1 DESC", cmd.CommandText());
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// Tests order by using member with field.
|
||||
/// </summary>
|
||||
[Test]
|
||||
public void TestOrderByAlt()
|
||||
{
|
||||
IDynamicSelectQueryBuilder cmd = new DynamicSelectQueryBuilder(Database);
|
||||
|
||||
cmd.From(u => u.dbo.Users.As(u.c))
|
||||
.OrderBy(u => u.Desc(u.c.UserName));
|
||||
|
||||
Assert.AreEqual("SELECT * FROM \"dbo\".\"Users\" AS c ORDER BY c.\"UserName\" DESC", cmd.CommandText());
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// Tests sub query select.
|
||||
/// </summary>
|
||||
[Test]
|
||||
public void TestSubQuerySelect()
|
||||
{
|
||||
IDynamicSelectQueryBuilder cmd = new DynamicSelectQueryBuilder(Database);
|
||||
|
||||
cmd.From(u => u.dbo.Users.As(u.c))
|
||||
.Select(u => u(cmd.SubQuery()
|
||||
.From(x => x.dbo.AccessRights.As(x.a))
|
||||
.Where(x => x.a.User_Id == x.c.Id_User)
|
||||
.Select(x => x.a.IsAdmin)).As(u.IsAdmin));
|
||||
|
||||
Assert.AreEqual("SELECT (SELECT a.\"IsAdmin\" FROM \"dbo\".\"AccessRights\" AS a WHERE (a.\"User_Id\" = c.\"Id_User\")) AS \"IsAdmin\" FROM \"dbo\".\"Users\" AS c", cmd.CommandText());
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// Tests sub query where.
|
||||
/// </summary>
|
||||
[Test]
|
||||
public void TestSubQueryWhere()
|
||||
{
|
||||
IDynamicSelectQueryBuilder cmd = new DynamicSelectQueryBuilder(Database);
|
||||
|
||||
cmd.From(u => u.dbo.Users.As(u.c))
|
||||
.Where(u => u.c.IsAdmin == u(cmd.SubQuery()
|
||||
.From(x => x.dbo.AccessRights.As(x.a))
|
||||
.Where(x => x.a.User_Id == x.c.Id_User)
|
||||
.Select(x => x.a.IsAdmin)));
|
||||
|
||||
Assert.AreEqual("SELECT * FROM \"dbo\".\"Users\" AS c WHERE (c.\"IsAdmin\" = (SELECT a.\"IsAdmin\" FROM \"dbo\".\"AccessRights\" AS a WHERE (a.\"User_Id\" = c.\"Id_User\")))", cmd.CommandText());
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// Tests sub query in.
|
||||
/// </summary>
|
||||
[Test]
|
||||
public void TestSubQueryWhereIn()
|
||||
{
|
||||
IDynamicSelectQueryBuilder cmd = new DynamicSelectQueryBuilder(Database);
|
||||
|
||||
cmd.From(u => u.dbo.Users.As(u.c))
|
||||
.Where(u => u.c.Id_User.In(u(cmd.SubQuery()
|
||||
.From(x => x.dbo.AccessRights.As(x.a))
|
||||
.Where(x => x.a.IsAdmin == 1)
|
||||
.Select(x => x.a.User_Id))));
|
||||
|
||||
Assert.AreEqual(string.Format("SELECT * FROM \"dbo\".\"Users\" AS c WHERE c.\"Id_User\" IN((SELECT a.\"User_Id\" FROM \"dbo\".\"AccessRights\" AS a WHERE (a.\"IsAdmin\" = [${0}])))", cmd.Parameters.Keys.First()), cmd.CommandText());
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// Tests sub query join.
|
||||
/// </summary>
|
||||
[Test]
|
||||
public void TestSubQueryJoin()
|
||||
{
|
||||
IDynamicSelectQueryBuilder cmd = new DynamicSelectQueryBuilder(Database);
|
||||
|
||||
cmd.From(u => u.dbo.Users.As(u.c))
|
||||
.Join(u => u.Inner()(cmd.SubQuery()
|
||||
.From(x => x.dbo.AccessRights.As(x.a))
|
||||
.Select(x => x.a.IsAdmin, x => x.a.User_Id)).As(u.ar).On(u.ar.User_Id == u.c.Id_User));
|
||||
|
||||
Assert.AreEqual("SELECT * FROM \"dbo\".\"Users\" AS c INNER JOIN (SELECT a.\"IsAdmin\", a.\"User_Id\" FROM \"dbo\".\"AccessRights\" AS a) AS ar ON (ar.\"User_Id\" = c.\"Id_User\")", cmd.CommandText());
|
||||
}
|
||||
}
|
||||
}
|
||||
@@ -29,6 +29,7 @@
|
||||
using System;
|
||||
using System.Collections.Generic;
|
||||
using System.Linq;
|
||||
using DynamORM.Builders;
|
||||
using DynamORM.Tests.Helpers;
|
||||
using NUnit.Framework;
|
||||
|
||||
@@ -65,6 +66,13 @@ namespace DynamORM.Tests.Select
|
||||
return Database.Table();
|
||||
}
|
||||
|
||||
/// <summary>Create table using specified method.</summary>
|
||||
/// <returns>Dynamic table.</returns>
|
||||
public virtual IDynamicSelectQueryBuilder GetTestBuilder()
|
||||
{
|
||||
return Database.Table().Query() as IDynamicSelectQueryBuilder;
|
||||
}
|
||||
|
||||
#region Select typed
|
||||
|
||||
/// <summary>Test load all rows into mapped list alternate way.</summary>
|
||||
@@ -76,6 +84,19 @@ namespace DynamORM.Tests.Select
|
||||
Assert.AreEqual(200, list.Count);
|
||||
}
|
||||
|
||||
/// <summary>Test load all rows into mapped list alternate way.</summary>
|
||||
[Test]
|
||||
public virtual void TestTypedGetAll2()
|
||||
{
|
||||
var list = GetTestBuilder()
|
||||
.From(x => x(typeof(T)).As(x.t))
|
||||
.Execute()
|
||||
.MapEnumerable<T>()
|
||||
.ToList();
|
||||
|
||||
Assert.AreEqual(200, list.Count);
|
||||
}
|
||||
|
||||
/// <summary>Test unknown op.</summary>
|
||||
[Test]
|
||||
public virtual void TestTypedUnknownOperation()
|
||||
@@ -90,7 +111,17 @@ namespace DynamORM.Tests.Select
|
||||
Assert.AreEqual(200, GetTestTable().Count(type: typeof(T), columns: "id"));
|
||||
}
|
||||
|
||||
/// <summary>Test count with in steatement.</summary>
|
||||
/// <summary>Test typed <c>Count</c> method.</summary>
|
||||
[Test]
|
||||
public virtual void TestTypedCount2()
|
||||
{
|
||||
Assert.AreEqual(200, GetTestBuilder()
|
||||
.From(x => x(typeof(T)).As(x.t))
|
||||
.Select(x => x.Count(x.t.id))
|
||||
.Scalar());
|
||||
}
|
||||
|
||||
/// <summary>Test count with in statement.</summary>
|
||||
[Test]
|
||||
public virtual void TestTypedSelectInEnumerableCount()
|
||||
{
|
||||
@@ -101,7 +132,18 @@ namespace DynamORM.Tests.Select
|
||||
}));
|
||||
}
|
||||
|
||||
/// <summary>Test count with in steatement.</summary>
|
||||
/// <summary>Test count with in statement.</summary>
|
||||
[Test]
|
||||
public virtual void TestTypedSelectInEnumerableCount2()
|
||||
{
|
||||
Assert.AreEqual(4, GetTestBuilder()
|
||||
.From(x => x(typeof(T)).As(x.t))
|
||||
.Where(x => x.last.In(new object[] { "Hendricks", "Goodwin", "Freeman" }.Take(3)))
|
||||
.Select(x => x.Count())
|
||||
.Scalar());
|
||||
}
|
||||
|
||||
/// <summary>Test count with in statement.</summary>
|
||||
[Test]
|
||||
public virtual void TestTypedSelectInArrayCount()
|
||||
{
|
||||
@@ -112,6 +154,17 @@ namespace DynamORM.Tests.Select
|
||||
}));
|
||||
}
|
||||
|
||||
/// <summary>Test count with in statement.</summary>
|
||||
[Test]
|
||||
public virtual void TestTypedSelectInArrayCount2()
|
||||
{
|
||||
Assert.AreEqual(4, GetTestBuilder()
|
||||
.From(x => x(typeof(T)).As(x.t))
|
||||
.Where(x => x.last.In(new object[] { "Hendricks", "Goodwin", "Freeman" }))
|
||||
.Select(x => x.Count())
|
||||
.Scalar());
|
||||
}
|
||||
|
||||
/// <summary>Test typed <c>First</c> method.</summary>
|
||||
[Test]
|
||||
public virtual void TestTypedFirst()
|
||||
@@ -119,6 +172,17 @@ namespace DynamORM.Tests.Select
|
||||
Assert.AreEqual(1, GetTestTable().First(type: typeof(T), columns: "id").id);
|
||||
}
|
||||
|
||||
/// <summary>Test typed <c>First</c> method.</summary>
|
||||
[Test]
|
||||
public virtual void TestTypedFirst2()
|
||||
{
|
||||
Assert.AreEqual(1, GetTestBuilder()
|
||||
.From(x => x(typeof(T)).As(x.t))
|
||||
.Select(x => x.t.id)
|
||||
.Execute()
|
||||
.First().id);
|
||||
}
|
||||
|
||||
/// <summary>Test typed <c>Last</c> method.</summary>
|
||||
[Test]
|
||||
public virtual void TestTypedLast()
|
||||
@@ -126,6 +190,17 @@ namespace DynamORM.Tests.Select
|
||||
Assert.AreEqual(200, GetTestTable().Last(type: typeof(T), columns: "id").id);
|
||||
}
|
||||
|
||||
/// <summary>Test typed <c>Last</c> method.</summary>
|
||||
[Test]
|
||||
public virtual void TestTypedLast2()
|
||||
{
|
||||
Assert.AreEqual(200, GetTestBuilder()
|
||||
.From(x => x(typeof(T)).As(x.t))
|
||||
.Select(x => x.t.id)
|
||||
.Execute()
|
||||
.Last().id);
|
||||
}
|
||||
|
||||
/// <summary>Test typed <c>Count</c> method.</summary>
|
||||
[Test]
|
||||
public virtual void TestTypedCountSpecificRecord()
|
||||
@@ -140,6 +215,16 @@ namespace DynamORM.Tests.Select
|
||||
Assert.AreEqual(1, GetTestTable().Min(type: typeof(T), columns: "id"));
|
||||
}
|
||||
|
||||
/// <summary>Test typed <c>Min</c> method.</summary>
|
||||
[Test]
|
||||
public virtual void TestTypedMin2()
|
||||
{
|
||||
Assert.AreEqual(1, GetTestBuilder()
|
||||
.From(x => x(typeof(T)).As(x.t))
|
||||
.Select(x => x.Min(x.t.id))
|
||||
.Scalar());
|
||||
}
|
||||
|
||||
/// <summary>Test typed <c>Min</c> method.</summary>
|
||||
[Test]
|
||||
public virtual void TestTypedMax()
|
||||
@@ -147,6 +232,16 @@ namespace DynamORM.Tests.Select
|
||||
Assert.AreEqual(200, GetTestTable().Max(type: typeof(T), columns: "id"));
|
||||
}
|
||||
|
||||
/// <summary>Test typed <c>Min</c> method.</summary>
|
||||
[Test]
|
||||
public virtual void TestTypedMax2()
|
||||
{
|
||||
Assert.AreEqual(200, GetTestBuilder()
|
||||
.From(x => x(typeof(T)).As(x.t))
|
||||
.Select(x => x.Max(x.t.id))
|
||||
.Scalar());
|
||||
}
|
||||
|
||||
/// <summary>Test typed <c>Min</c> method.</summary>
|
||||
[Test]
|
||||
public virtual void TestTypedtAvg()
|
||||
@@ -154,6 +249,16 @@ namespace DynamORM.Tests.Select
|
||||
Assert.AreEqual(100.5, GetTestTable().Avg(type: typeof(T), columns: "id"));
|
||||
}
|
||||
|
||||
/// <summary>Test typed <c>Min</c> method.</summary>
|
||||
[Test]
|
||||
public virtual void TestTypedtAvg2()
|
||||
{
|
||||
Assert.AreEqual(100.5, GetTestBuilder()
|
||||
.From(x => x(typeof(T)).As(x.t))
|
||||
.Select(x => x.Avg(x.t.id))
|
||||
.Scalar());
|
||||
}
|
||||
|
||||
/// <summary>Test typed <c>Sum</c> method.</summary>
|
||||
[Test]
|
||||
public virtual void TestTypedSum()
|
||||
@@ -161,6 +266,16 @@ namespace DynamORM.Tests.Select
|
||||
Assert.AreEqual(20100, GetTestTable().Sum(type: typeof(T), columns: "id"));
|
||||
}
|
||||
|
||||
/// <summary>Test typed <c>Sum</c> method.</summary>
|
||||
[Test]
|
||||
public virtual void TestTypedSum2()
|
||||
{
|
||||
Assert.AreEqual(20100, GetTestBuilder()
|
||||
.From(x => x(typeof(T)).As(x.t))
|
||||
.Select(x => x.Sum(x.t.id))
|
||||
.Scalar());
|
||||
}
|
||||
|
||||
/// <summary>Test typed <c>Scalar</c> method for invalid operation exception.</summary>
|
||||
[Test]
|
||||
public virtual void TestTypedScalarException()
|
||||
@@ -175,6 +290,17 @@ namespace DynamORM.Tests.Select
|
||||
Assert.AreEqual("Ori", GetTestTable().Scalar(type: typeof(T), columns: "first", id: 19));
|
||||
}
|
||||
|
||||
/// <summary>Test typed <c>Scalar</c> method.</summary>
|
||||
[Test]
|
||||
public void TestTypedScalar2()
|
||||
{
|
||||
Assert.AreEqual("Ori", GetTestBuilder()
|
||||
.From(x => x(typeof(T)).As(x.t))
|
||||
.Where(x => x.t.id == 19)
|
||||
.Select(x => x.t.first)
|
||||
.Scalar());
|
||||
}
|
||||
|
||||
/// <summary>Test typed <c>Scalar</c> method with SQLite specific aggregate.</summary>
|
||||
[Test]
|
||||
public virtual void TestTypedScalarGroupConcat()
|
||||
@@ -185,6 +311,20 @@ namespace DynamORM.Tests.Select
|
||||
GetTestTable().Scalar(type: typeof(T), columns: "first:first:group_concat", id: new DynamicColumn { Operator = DynamicColumn.CompareOperator.Lt, Value = 20 }));
|
||||
}
|
||||
|
||||
/// <summary>Test typed <c>Scalar</c> method with SQLite specific aggregate.</summary>
|
||||
[Test]
|
||||
public virtual void TestTypedScalarGroupConcat2()
|
||||
{
|
||||
// This test should produce something like this:
|
||||
// select group_concat("first") AS first from "users" where "id" < 20;
|
||||
Assert.AreEqual("Clarke,Marny,Dai,Forrest,Blossom,George,Ivory,Inez,Sigourney,Fulton,Logan,Anne,Alexandra,Adena,Lionel,Aimee,Selma,Lara,Ori",
|
||||
GetTestBuilder()
|
||||
.From(x => x(typeof(T)).As(x.t))
|
||||
.Where(x => x.t.id < 20)
|
||||
.Select(x => x.group_concat(x.t.first).As(x.first))
|
||||
.Scalar());
|
||||
}
|
||||
|
||||
/// <summary>Test typed <c>Scalar</c> method with SQLite specific aggregate not using aggregate field.</summary>
|
||||
[Test]
|
||||
public virtual void TestTypedScalarGroupConcatNoAggregateField()
|
||||
@@ -195,6 +335,20 @@ namespace DynamORM.Tests.Select
|
||||
GetTestTable().Scalar(type: typeof(T), columns: "group_concat(first):first", id: new DynamicColumn { Operator = DynamicColumn.CompareOperator.Lt, Value = 20 }));
|
||||
}
|
||||
|
||||
/// <summary>Test typed <c>Scalar</c> method with SQLite specific aggregate not using aggregate field.</summary>
|
||||
[Test]
|
||||
public virtual void TestTypedScalarGroupConcatNoAggregateField2()
|
||||
{
|
||||
// This test should produce something like this:
|
||||
// select group_concat("first") AS first from "users" where "id" < 20;
|
||||
Assert.AreEqual("Clarke,Marny,Dai,Forrest,Blossom,George,Ivory,Inez,Sigourney,Fulton,Logan,Anne,Alexandra,Adena,Lionel,Aimee,Selma,Lara,Ori",
|
||||
GetTestBuilder()
|
||||
.From(x => x(typeof(T)).As(x.t))
|
||||
.Where(x => x.t.id < 20)
|
||||
.Select("group_concat(first):first")
|
||||
.Scalar());
|
||||
}
|
||||
|
||||
/// <summary>Test something fancy... like: <code>select "first", count("first") aggregatefield from "users" group by "first" order by 2 desc;</code>.</summary>
|
||||
[Test]
|
||||
public virtual void TestTypedFancyAggregateQuery()
|
||||
@@ -210,6 +364,27 @@ namespace DynamORM.Tests.Select
|
||||
Assert.AreEqual(1, v.Last().aggregatefield);
|
||||
}
|
||||
|
||||
/// <summary>Test something fancy... like: <code>select "first", count("first") aggregatefield from "users" group by "first" order by 2 desc;</code>.</summary>
|
||||
[Test]
|
||||
public virtual void TestTypedFancyAggregateQuery2()
|
||||
{
|
||||
var v = GetTestBuilder()
|
||||
.From(x => x(typeof(T)).As(x.t))
|
||||
.Select(x => x.t.first, x => x.Count(x.t.first).As(x.aggregatefield))
|
||||
.GroupBy(x => x.t.first)
|
||||
.OrderBy(x => x.Desc(2))
|
||||
.Execute()
|
||||
.ToList();
|
||||
|
||||
Assert.IsNotNull(v);
|
||||
Assert.AreEqual(187, v.Count());
|
||||
Assert.AreEqual(4, v.First().aggregatefield);
|
||||
Assert.AreEqual("Logan", v.First().first);
|
||||
Assert.AreEqual(2, v.Take(10).Last().aggregatefield);
|
||||
Assert.AreEqual(1, v.Take(11).Last().aggregatefield);
|
||||
Assert.AreEqual(1, v.Last().aggregatefield);
|
||||
}
|
||||
|
||||
/// <summary>This time also something fancy... aggregate in aggregate <code>select AVG(LENGTH("login")) len from "users";</code>.</summary>
|
||||
[Test]
|
||||
public virtual void TestTypedAggregateInAggregate()
|
||||
@@ -217,6 +392,16 @@ namespace DynamORM.Tests.Select
|
||||
Assert.AreEqual(12.77, GetTestTable().Scalar(type: typeof(T), columns: @"length(""login""):len:avg"));
|
||||
}
|
||||
|
||||
/// <summary>This time also something fancy... aggregate in aggregate <code>select AVG(LENGTH("login")) len from "users";</code>.</summary>
|
||||
[Test]
|
||||
public virtual void TestTypedAggregateInAggregate2()
|
||||
{
|
||||
Assert.AreEqual(12.77, GetTestBuilder()
|
||||
.From(x => x(typeof(T)).As(x.t))
|
||||
.Select(x => x.Avg(x.Length(x.t.login)).As(x.len))
|
||||
.Scalar());
|
||||
}
|
||||
|
||||
/// <summary>This time also something fancy... aggregate in aggregate <code>select AVG(LENGTH("email")) len from "users";</code>.</summary>
|
||||
[Test]
|
||||
public virtual void TestTypedAggregateInAggregateMark2()
|
||||
@@ -224,6 +409,16 @@ namespace DynamORM.Tests.Select
|
||||
Assert.AreEqual(27.7, GetTestTable().Avg(type: typeof(T), columns: @"length(""email""):len"));
|
||||
}
|
||||
|
||||
/// <summary>This time also something fancy... aggregate in aggregate <code>select AVG(LENGTH("email")) len from "users";</code>.</summary>
|
||||
[Test]
|
||||
public virtual void TestTypedAggregateInAggregateMark3()
|
||||
{
|
||||
Assert.AreEqual(27.7, GetTestBuilder()
|
||||
.From(x => x(typeof(T)).As(x.t))
|
||||
.Select(x => "AVG(LENGTH(t.email)) AS LEN")
|
||||
.Scalar());
|
||||
}
|
||||
|
||||
/// <summary>Test emails longer than 27 chars. <code>select count(*) from "users" where length("email") > 27;</code>.</summary>
|
||||
public virtual void TestTypedFunctionInWhere()
|
||||
{
|
||||
@@ -238,6 +433,16 @@ namespace DynamORM.Tests.Select
|
||||
}));
|
||||
}
|
||||
|
||||
/// <summary>Test emails longer than 27 chars. <code>select count(*) from "users" where length("email") > 27;</code>.</summary>
|
||||
public virtual void TestTypedFunctionInWhere2()
|
||||
{
|
||||
Assert.AreEqual(97, GetTestBuilder()
|
||||
.From(x => x(typeof(T)).As(x.t))
|
||||
.Where(x => x.Length(x.t.email) > 27)
|
||||
.Select(x => x.Count(x.t.All()))
|
||||
.Scalar());
|
||||
}
|
||||
|
||||
/// <summary>Test typed <c>Single</c> multi.</summary>
|
||||
[Test]
|
||||
public virtual void TestTypedSingleObject()
|
||||
@@ -250,6 +455,23 @@ namespace DynamORM.Tests.Select
|
||||
Assert.AreEqual(exp.last, o.last);
|
||||
}
|
||||
|
||||
/// <summary>Test typed <c>Single</c> multi.</summary>
|
||||
[Test]
|
||||
public virtual void TestTypedSingleObject2()
|
||||
{
|
||||
var exp = new { id = 19, first = "Ori", last = "Ellis" };
|
||||
var o = GetTestBuilder()
|
||||
.From(x => x(typeof(T)).As(x.t))
|
||||
.Where(x => x.t.id == 19)
|
||||
.Select(x => new { id = x.t.id, first = x.t.first, last = x.t.last })
|
||||
.Execute()
|
||||
.First();
|
||||
|
||||
Assert.AreEqual(exp.id, o.id);
|
||||
Assert.AreEqual(exp.first, o.first);
|
||||
Assert.AreEqual(exp.last, o.last);
|
||||
}
|
||||
|
||||
#endregion Select typed
|
||||
|
||||
#region Where typed
|
||||
@@ -261,6 +483,15 @@ namespace DynamORM.Tests.Select
|
||||
Assert.AreEqual("hoyt.tran", GetTestTable().Single(type: typeof(T), where: new DynamicColumn("id").Eq(100)).login);
|
||||
}
|
||||
|
||||
/// <summary>Test typed where expression equal.</summary>
|
||||
[Test]
|
||||
public virtual void TestTypedWhereEq2()
|
||||
{
|
||||
Assert.AreEqual("hoyt.tran", GetTestBuilder()
|
||||
.From(x => x(typeof(T)).As(x.t))
|
||||
.Where(x => x.t.id == 100).Execute().First().login);
|
||||
}
|
||||
|
||||
/// <summary>Test typed where expression not equal.</summary>
|
||||
[Test]
|
||||
public virtual void TestTypedWhereNot()
|
||||
@@ -268,6 +499,17 @@ namespace DynamORM.Tests.Select
|
||||
Assert.AreEqual(199, GetTestTable().Count(type: typeof(T), where: new DynamicColumn("id").Not(100)));
|
||||
}
|
||||
|
||||
/// <summary>Test typed where expression not equal.</summary>
|
||||
[Test]
|
||||
public virtual void TestTypedWhereNot2()
|
||||
{
|
||||
Assert.AreEqual(199, GetTestBuilder()
|
||||
.From(x => x(typeof(T)).As(x.t))
|
||||
.Where(x => x.t.id != 100)
|
||||
.Select(x => x.Count())
|
||||
.Scalar());
|
||||
}
|
||||
|
||||
/// <summary>Test typed where expression like.</summary>
|
||||
[Test]
|
||||
public virtual void TestTypedWhereLike()
|
||||
@@ -275,6 +517,15 @@ namespace DynamORM.Tests.Select
|
||||
Assert.AreEqual(100, GetTestTable().Single(type: typeof(T), where: new DynamicColumn("login").Like("Hoyt.%")).id);
|
||||
}
|
||||
|
||||
/// <summary>Test typed where expression like.</summary>
|
||||
[Test]
|
||||
public virtual void TestTypedWhereLike2()
|
||||
{
|
||||
Assert.AreEqual(100, GetTestBuilder()
|
||||
.From(x => x(typeof(T)).As(x.t))
|
||||
.Where(x => x.t.login.Like("Hoyt.%")).Execute().First().id);
|
||||
}
|
||||
|
||||
/// <summary>Test typed where expression not like.</summary>
|
||||
[Test]
|
||||
public virtual void TestTypedWhereNotLike()
|
||||
@@ -282,6 +533,28 @@ namespace DynamORM.Tests.Select
|
||||
Assert.AreEqual(199, GetTestTable().Count(type: typeof(T), where: new DynamicColumn("login").NotLike("Hoyt.%")));
|
||||
}
|
||||
|
||||
/// <summary>Test typed where expression not like.</summary>
|
||||
[Test]
|
||||
public virtual void TestTypedWhereNotLike2()
|
||||
{
|
||||
Assert.AreEqual(199, GetTestBuilder()
|
||||
.From(x => x(typeof(T)).As(x.t))
|
||||
.Where(x => x.t.login.NotLike("Hoyt.%"))
|
||||
.Select(x => x.Count())
|
||||
.Scalar());
|
||||
}
|
||||
|
||||
/// <summary>Test typed where expression not like.</summary>
|
||||
[Test]
|
||||
public virtual void TestTypedWhereNotLike3()
|
||||
{
|
||||
Assert.AreEqual(199, GetTestBuilder()
|
||||
.From(x => x(typeof(T)).As(x.t))
|
||||
.Where(x => !x.t.login.Like("Hoyt.%"))
|
||||
.Select(x => x.Count())
|
||||
.Scalar());
|
||||
}
|
||||
|
||||
/// <summary>Test typed where expression greater.</summary>
|
||||
[Test]
|
||||
public virtual void TestTypedWhereGt()
|
||||
@@ -289,6 +562,17 @@ namespace DynamORM.Tests.Select
|
||||
Assert.AreEqual(100, GetTestTable().Count(type: typeof(T), where: new DynamicColumn("id").Greater(100)));
|
||||
}
|
||||
|
||||
/// <summary>Test typed where expression greater.</summary>
|
||||
[Test]
|
||||
public virtual void TestTypedWhereGt2()
|
||||
{
|
||||
Assert.AreEqual(100, GetTestBuilder()
|
||||
.From(x => x(typeof(T)).As(x.t))
|
||||
.Where(x => x.t.id > 100)
|
||||
.Select(x => x.Count())
|
||||
.Scalar());
|
||||
}
|
||||
|
||||
/// <summary>Test typed where expression greater or equal.</summary>
|
||||
[Test]
|
||||
public virtual void TestTypedWhereGte()
|
||||
@@ -296,6 +580,17 @@ namespace DynamORM.Tests.Select
|
||||
Assert.AreEqual(101, GetTestTable().Count(type: typeof(T), where: new DynamicColumn("id").GreaterOrEqual(100)));
|
||||
}
|
||||
|
||||
/// <summary>Test typed where expression greater or equal.</summary>
|
||||
[Test]
|
||||
public virtual void TestTypedWhereGte2()
|
||||
{
|
||||
Assert.AreEqual(101, GetTestBuilder()
|
||||
.From(x => x(typeof(T)).As(x.t))
|
||||
.Where(x => x.t.id >= 100)
|
||||
.Select(x => x.Count())
|
||||
.Scalar());
|
||||
}
|
||||
|
||||
/// <summary>Test typed where expression less.</summary>
|
||||
[Test]
|
||||
public virtual void TestTypedWhereLt()
|
||||
@@ -303,6 +598,17 @@ namespace DynamORM.Tests.Select
|
||||
Assert.AreEqual(99, GetTestTable().Count(type: typeof(T), where: new DynamicColumn("id").Less(100)));
|
||||
}
|
||||
|
||||
/// <summary>Test typed where expression less.</summary>
|
||||
[Test]
|
||||
public virtual void TestTypedWhereLt2()
|
||||
{
|
||||
Assert.AreEqual(99, GetTestBuilder()
|
||||
.From(x => x(typeof(T)).As(x.t))
|
||||
.Where(x => x.t.id < 100)
|
||||
.Select(x => x.Count())
|
||||
.Scalar());
|
||||
}
|
||||
|
||||
/// <summary>Test typed where expression less or equal.</summary>
|
||||
[Test]
|
||||
public virtual void TestTypedWhereLte()
|
||||
@@ -310,6 +616,17 @@ namespace DynamORM.Tests.Select
|
||||
Assert.AreEqual(100, GetTestTable().Count(type: typeof(T), where: new DynamicColumn("id").LessOrEqual(100)));
|
||||
}
|
||||
|
||||
/// <summary>Test typed where expression less or equal.</summary>
|
||||
[Test]
|
||||
public virtual void TestTypedWhereLte2()
|
||||
{
|
||||
Assert.AreEqual(100, GetTestBuilder()
|
||||
.From(x => x(typeof(T)).As(x.t))
|
||||
.Where(x => x.t.id <= 100)
|
||||
.Select(x => x.Count())
|
||||
.Scalar());
|
||||
}
|
||||
|
||||
/// <summary>Test typed where expression between.</summary>
|
||||
[Test]
|
||||
public virtual void TestTypedWhereBetween()
|
||||
@@ -317,7 +634,18 @@ namespace DynamORM.Tests.Select
|
||||
Assert.AreEqual(26, GetTestTable().Count(type: typeof(T), where: new DynamicColumn("id").Between(75, 100)));
|
||||
}
|
||||
|
||||
/// <summary>Test typed where expression in params.</summary>
|
||||
/// <summary>Test typed where expression between.</summary>
|
||||
[Test]
|
||||
public virtual void TestTypedWhereBetween2()
|
||||
{
|
||||
Assert.AreEqual(26, GetTestBuilder()
|
||||
.From(x => x(typeof(T)).As(x.t))
|
||||
.Where(x => x.t.id.Between(75, 100))
|
||||
.Select(x => x.Count())
|
||||
.Scalar());
|
||||
}
|
||||
|
||||
/// <summary>Test typed where expression in parameters.</summary>
|
||||
[Test]
|
||||
public virtual void TestTypedWhereIn1()
|
||||
{
|
||||
@@ -331,6 +659,28 @@ namespace DynamORM.Tests.Select
|
||||
Assert.AreEqual(3, GetTestTable().Count(type: typeof(T), where: new DynamicColumn("id").In(new[] { 75, 99, 100 })));
|
||||
}
|
||||
|
||||
/// <summary>Test typed where expression in parameters.</summary>
|
||||
[Test]
|
||||
public virtual void TestTypedWhereIn3()
|
||||
{
|
||||
Assert.AreEqual(3, GetTestBuilder()
|
||||
.From(x => x(typeof(T)).As(x.t))
|
||||
.Where(x => x.t.id.In(75, 99, 100))
|
||||
.Select(x => x.Count())
|
||||
.Scalar());
|
||||
}
|
||||
|
||||
/// <summary>Test typed where expression in array.</summary>
|
||||
[Test]
|
||||
public virtual void TestTypedWhereIn4()
|
||||
{
|
||||
Assert.AreEqual(3, GetTestBuilder()
|
||||
.From(x => x(typeof(T)).As(x.t))
|
||||
.Where(x => x.t.id.In(new[] { 75, 99, 100 }))
|
||||
.Select(x => x.Count())
|
||||
.Scalar());
|
||||
}
|
||||
|
||||
#endregion Where typed
|
||||
|
||||
#region Select generic
|
||||
@@ -358,7 +708,7 @@ namespace DynamORM.Tests.Select
|
||||
Assert.AreEqual(200, GetTestTable().Count<T>(columns: "id"));
|
||||
}
|
||||
|
||||
/// <summary>Test count with in steatement.</summary>
|
||||
/// <summary>Test count with in statement.</summary>
|
||||
[Test]
|
||||
public virtual void TestGenericSelectInEnumerableCount()
|
||||
{
|
||||
@@ -369,7 +719,7 @@ namespace DynamORM.Tests.Select
|
||||
}));
|
||||
}
|
||||
|
||||
/// <summary>Test count with in steatement.</summary>
|
||||
/// <summary>Test count with in statement.</summary>
|
||||
[Test]
|
||||
public virtual void TestGenericSelectInArrayCount()
|
||||
{
|
||||
@@ -585,7 +935,7 @@ namespace DynamORM.Tests.Select
|
||||
Assert.AreEqual(26, GetTestTable().Count<T>(where: new DynamicColumn("id").Between(75, 100)));
|
||||
}
|
||||
|
||||
/// <summary>Test generic where expression in params.</summary>
|
||||
/// <summary>Test generic where expression in parameters.</summary>
|
||||
[Test]
|
||||
public virtual void TestGenericWhereIn1()
|
||||
{
|
||||
|
||||
@@ -86,7 +86,7 @@ namespace DynamORM.Tests
|
||||
|
||||
#region DynamORM Initialization
|
||||
|
||||
/// <summary>Create <see cref="DynamicDatabase"/> with default otions for SQLite.</summary>
|
||||
/// <summary>Create <see cref="DynamicDatabase"/> with default options for SQLite.</summary>
|
||||
public void CreateDynamicDatabase()
|
||||
{
|
||||
CreateDynamicDatabase(
|
||||
|
||||
Reference in New Issue
Block a user