mirror of
https://github.com/nsnail/FreeSql.git
synced 2025-05-02 15:22:49 +08:00
184 lines
7.5 KiB
C#
184 lines
7.5 KiB
C#
using System;
|
|
using System.Collections.Generic;
|
|
using System.Diagnostics;
|
|
using System.Linq;
|
|
using System.Text;
|
|
using System.Threading.Tasks;
|
|
using FreeSql.DataAnnotations;
|
|
using FreeSql.Tests.QuestDb.QuestDbTestModel;
|
|
using NetTopologySuite.Operation.Valid;
|
|
using Xunit;
|
|
using static FreeSql.Tests.QuestDb.QuestDbTest;
|
|
|
|
namespace FreeSql.Tests.QuestDb.Crud
|
|
{
|
|
public class QuestDbTestSelect
|
|
{
|
|
[Fact]
|
|
public void TestNormal()
|
|
{
|
|
var sql = fsql.Select<QuestDb_Model_Test01>().ToSql();
|
|
Debug.WriteLine(sql);
|
|
Assert.Equal(
|
|
@"SELECT a.""Primarys"", a.""Id"", a.""NameUpdate"", a.""NameInsert"", a.""Activos"", a.""CreateTime"", a.""UpdateTime"", a.""IsCompra""
|
|
FROM ""QuestDb_Model_Test01"" a", sql);
|
|
|
|
var sqlWhere = fsql.Select<QuestDb_Model_Test01>().Where(q =>
|
|
q.UpdateTime.Value.BetweenEnd(DateTime.Parse("2023-02-17 09:35:00"),
|
|
DateTime.Parse("2023-02-17 10:20:00"))).ToSql();
|
|
Debug.WriteLine(sqlWhere);
|
|
Assert.Equal(
|
|
@"SELECT a.""Primarys"", a.""Id"", a.""NameUpdate"", a.""NameInsert"", a.""Activos"", a.""CreateTime"", a.""UpdateTime"", a.""IsCompra""
|
|
FROM ""QuestDb_Model_Test01"" a
|
|
WHERE (a.""UpdateTime"" >= '2023-02-17 09:35:00.000000' and a.""UpdateTime"" < '2023-02-17 10:20:00.000000')",
|
|
sqlWhere);
|
|
}
|
|
|
|
[Theory]
|
|
[InlineData(1)]
|
|
[InlineData(2)]
|
|
[InlineData(3)]
|
|
public void TestPageAndCount(int page)
|
|
{
|
|
var pageSize = 5;
|
|
var select = fsql.Select<QuestDb_Model_Test01>().Count(out var total).Page(page, pageSize);
|
|
var sql = select.ToSql();
|
|
Debug.WriteLine(sql);
|
|
switch (page)
|
|
{
|
|
case 1:
|
|
Assert.Equal(
|
|
@"SELECT a.""Primarys"", a.""Id"", a.""NameUpdate"", a.""NameInsert"", a.""Activos"", a.""CreateTime"", a.""UpdateTime"", a.""IsCompra""
|
|
FROM ""QuestDb_Model_Test01"" a
|
|
limit 5", sql);
|
|
break;
|
|
case 2:
|
|
Assert.Equal(
|
|
@"SELECT a.""Primarys"", a.""Id"", a.""NameUpdate"", a.""NameInsert"", a.""Activos"", a.""CreateTime"", a.""UpdateTime"", a.""IsCompra""
|
|
FROM ""QuestDb_Model_Test01"" a
|
|
limit 5,10", sql);
|
|
break;
|
|
case 3:
|
|
Assert.Equal(
|
|
@"SELECT a.""Primarys"", a.""Id"", a.""NameUpdate"", a.""NameInsert"", a.""Activos"", a.""CreateTime"", a.""UpdateTime"", a.""IsCompra""
|
|
FROM ""QuestDb_Model_Test01"" a
|
|
limit 10,15", sql);
|
|
break;
|
|
}
|
|
}
|
|
|
|
[Fact]
|
|
public void TestNavigation()
|
|
{
|
|
var select = fsql.Select<Topic>()
|
|
.LeftJoin(a => a.Category.Id == a.CategoryId)
|
|
.LeftJoin(a => a.Category.Parent.Id == a.Category.ParentId)
|
|
.Where(a => a.Category.Parent.Id > 0);
|
|
var sql = select.ToSql();
|
|
select.ToList();
|
|
Debug.WriteLine(sql);
|
|
Assert.Equal(
|
|
@"SELECT a.""Id"", a.""Title"", a.""Clicks"", a.""CreateTime"", a.""CategoryId"", a__Category.""Id"" as6, a__Category.""Name"", a__Category.""ParentId""
|
|
FROM ""Topic"" a
|
|
LEFT JOIN ""Category"" a__Category ON a__Category.""Id"" = a.""CategoryId""
|
|
LEFT JOIN ""CategoryType"" a__Category__Parent ON a__Category__Parent.""Id"" = a__Category.""ParentId""
|
|
WHERE (a__Category__Parent.""Id"" > 0)", sql);
|
|
}
|
|
|
|
[Fact]
|
|
public void TestComplexJoin()
|
|
{
|
|
var select = fsql.Select<Topic, Category, CategoryType>()
|
|
.LeftJoin(w => w.t1.CategoryId == w.t2.Id)
|
|
.LeftJoin(w => w.t2.ParentId == w.t3.Id)
|
|
.Where(w => w.t3.Id > 0);
|
|
var sql = select.ToSql(w => new { w.t1, w.t2, w.t3 });
|
|
Debug.WriteLine(sql);
|
|
select.ToList(w => new { w.t1, w.t2, w.t3 });
|
|
Assert.Equal(
|
|
@"SELECT a.""Id"" as1, a.""Title"" as2, a.""Clicks"" as3, a.""CreateTime"" as4, a.""CategoryId"" as5, b.""Id"" as6, b.""Name"" as7, b.""ParentId"" as8, c.""Id"" as9, c.""Name"" as10
|
|
FROM ""Topic"" a
|
|
LEFT JOIN ""Category"" b ON a.""CategoryId"" = b.""Id""
|
|
LEFT JOIN ""CategoryType"" c ON b.""ParentId"" = c.""Id""
|
|
WHERE (c.""Id"" > 0)", sql);
|
|
}
|
|
|
|
[Fact]
|
|
public void TestUnionAll()
|
|
{
|
|
var select = fsql.Select<QuestDb_Model_Test01>().Where(a => a.IsCompra == true)
|
|
.UnionAll(
|
|
fsql.Select<QuestDb_Model_Test01>().Where(a => a.IsCompra == true),
|
|
fsql.Select<QuestDb_Model_Test01>().Where(a => a.IsCompra == true)
|
|
)
|
|
.Where(a => a.IsCompra == true);
|
|
var sql = select.ToSql();
|
|
Debug.WriteLine(sql);
|
|
select.ToList();
|
|
Assert.Equal(
|
|
@"SELECT a.""Primarys"", a.""Id"", a.""NameUpdate"", a.""NameInsert"", a.""Activos"", a.""CreateTime"", a.""UpdateTime"", a.""IsCompra""
|
|
FROM ( SELECT a.""Primarys"", a.""Id"", a.""NameUpdate"", a.""NameInsert"", a.""Activos"", a.""CreateTime"", a.""UpdateTime"", a.""IsCompra""
|
|
FROM ""QuestDb_Model_Test01"" a
|
|
WHERE (a.""IsCompra"" = True)
|
|
UNION ALL
|
|
SELECT a.""Primarys"", a.""Id"", a.""NameUpdate"", a.""NameInsert"", a.""Activos"", a.""CreateTime"", a.""UpdateTime"", a.""IsCompra""
|
|
FROM ""QuestDb_Model_Test01"" a
|
|
WHERE (a.""IsCompra"" = True)
|
|
UNION ALL
|
|
SELECT a.""Primarys"", a.""Id"", a.""NameUpdate"", a.""NameInsert"", a.""Activos"", a.""CreateTime"", a.""UpdateTime"", a.""IsCompra""
|
|
FROM ""QuestDb_Model_Test01"" a
|
|
WHERE (a.""IsCompra"" = True) ) a
|
|
WHERE (a.""IsCompra"" = True)", sql);
|
|
}
|
|
|
|
[Fact]
|
|
public void TestSampleBy()
|
|
{
|
|
var selectSql = fsql.Select<QuestDb_Model_Test01>()
|
|
.SampleBy(1, SampleUnits.d)
|
|
.WithTempQuery(q => new { q.Id, q.Activos, count = SqlExt.Count(q.Id).ToValue() })
|
|
.Where(q => q.Id != "1")
|
|
.ToSql();
|
|
Debug.WriteLine(selectSql);
|
|
var sql = @"SELECT *
|
|
FROM (
|
|
SELECT a.""Id"", a.""Activos"", count(a.""Id"") ""count""
|
|
FROM ""QuestDb_Model_Test01"" a
|
|
SAMPLE BY 1d
|
|
) a
|
|
WHERE (a.""Id"" <> '1')";
|
|
Assert.Equal(selectSql, sql);
|
|
}
|
|
|
|
[Fact]
|
|
public void TestLatestOn()
|
|
{
|
|
var selectSql = fsql.Select<QuestDb_Model_Test01>()
|
|
.LatestOn(q => q.CreateTime, q => new { q.Id, q.NameUpdate })
|
|
.ToSql();
|
|
Debug.WriteLine(selectSql);
|
|
var sql =
|
|
@"SELECT a.""Primarys"", a.""Id"", a.""NameUpdate"", a.""NameInsert"", a.""Activos"", a.""CreateTime"", a.""UpdateTime"", a.""IsCompra""
|
|
FROM ""QuestDb_Model_Test01"" a
|
|
LATEST ON CreateTime PARTITION BY Id,NameUpdate ";
|
|
Assert.Equal(selectSql, sql);
|
|
}
|
|
|
|
[Fact]
|
|
public void TestGroup()
|
|
{
|
|
//QUEDTDB的GroupBy PostgrSql有所不同
|
|
var selectSql = fsql.Select<QuestDb_Model_Test01>()
|
|
.WithTempQuery(q => new { q.Id, q.Activos, count = SqlExt.Count(q.Id).ToValue() })
|
|
.Where(q => q.Id != "1" && q.count > 1)
|
|
.ToSql();
|
|
Debug.WriteLine(selectSql);
|
|
var sql = @"SELECT *
|
|
FROM (
|
|
SELECT a.""Id"", a.""Activos"", count(a.""Id"") ""count""
|
|
FROM ""QuestDb_Model_Test01"" a ) a
|
|
WHERE (a.""Id"" <> '1' AND a.""count"" > 1)";
|
|
Assert.Equal(selectSql, sql);
|
|
}
|
|
}
|
|
} |