New version alpha
This commit is contained in:
@@ -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
|
||||
}
|
||||
}
|
||||
Reference in New Issue
Block a user