内部 SQL 格式优化

This commit is contained in:
28810
2020-07-18 13:50:26 +08:00
parent 8d11993e6c
commit 7471df5924
58 changed files with 1265 additions and 1249 deletions

View File

@ -104,22 +104,22 @@ namespace FreeSql.Tests.Odbc.MySql
//SELECT a.`Id`, a.`Parent_id`, a.`Ddd`, a.`Name`
//FROM `Tag` a
//WHERE (exists(SELECT 1
// FROM `Tag` t
// LEFT JOIN `Tag` t__Parent ON t__Parent.`Id` = t.`Parent_id`
// WHERE (t__Parent.`Id` = 10) AND (t.`Parent_id` = a.`Id`)
// limit 0,1))
// FROM `Tag` t
// LEFT JOIN `Tag` t__Parent ON t__Parent.`Id` = t.`Parent_id`
// WHERE (t__Parent.`Id` = 10) AND (t.`Parent_id` = a.`Id`)
// limit 0,1))
//ManyToMany
var t2 = g.mysql.Select<Song>().Where(s => s.Tags.AsSelect().Any(t => t.Name == "国语")).ToSql();
//SELECT a.`Id`, a.`Create_time`, a.`Is_deleted`, a.`Title`, a.`Url`
//FROM `Song` a
//WHERE(exists(SELECT 1
// FROM `Song_tag` Mt_Ms
// WHERE(Mt_Ms.`Song_id` = a.`Id`) AND(exists(SELECT 1
// FROM `Tag` t
// WHERE(t.`Name` = '国语') AND(t.`Id` = Mt_Ms.`Tag_id`)
// limit 0, 1))
// limit 0, 1))
// FROM `Song_tag` Mt_Ms
// WHERE(Mt_Ms.`Song_id` = a.`Id`) AND(exists(SELECT 1
// FROM `Tag` t
// WHERE(t.`Name` = '国语') AND(t.`Id` = Mt_Ms.`Tag_id`)
// limit 0, 1))
// limit 0, 1))
}
[Fact]
@ -213,9 +213,9 @@ namespace FreeSql.Tests.Odbc.MySql
//);
//var sql4 = select.From<TestTypeInfo, TestTypeParentInfo>((a, b, c) => new SelectFrom()
// .InnerJoin(a.TypeGuid == b.Guid)
// .LeftJoin(c.Id == b.ParentId)
// .Where(b.Name == "xxx"))
// .InnerJoin(a.TypeGuid == b.Guid)
// .LeftJoin(c.Id == b.ParentId)
// .Where(b.Name == "xxx"))
//.Where(a => a.Id == 1).ToSql();
var sql4 = select.From<TestTypeInfo, TestTypeParentInfo>((s, b, c) => s
@ -940,8 +940,8 @@ namespace FreeSql.Tests.Odbc.MySql
count = (long)select.As("b").Sum(b => b.Id)
});
Assert.Equal(@"SELECT a.`Id` as1, a.`Clicks` as2, a.`TypeGuid` as3, a.`Title` as4, a.`CreateTime` as5, (SELECT sum(b.`Id`)
FROM `tb_topic` b
limit 0,1) as6
FROM `tb_topic` b
limit 0,1) as6
FROM `tb_topic` a", subquery);
var subqueryList = select.ToList(a => new
{
@ -958,8 +958,8 @@ FROM `tb_topic` a", subquery);
count = select.As("b").Min(b => b.Id)
});
Assert.Equal(@"SELECT a.`Id` as1, a.`Clicks` as2, a.`TypeGuid` as3, a.`Title` as4, a.`CreateTime` as5, (SELECT min(b.`Id`)
FROM `tb_topic` b
limit 0,1) as6
FROM `tb_topic` b
limit 0,1) as6
FROM `tb_topic` a", subquery);
var subqueryList = select.ToList(a => new
{
@ -976,8 +976,8 @@ FROM `tb_topic` a", subquery);
count = select.As("b").Max(b => b.Id)
});
Assert.Equal(@"SELECT a.`Id` as1, a.`Clicks` as2, a.`TypeGuid` as3, a.`Title` as4, a.`CreateTime` as5, (SELECT max(b.`Id`)
FROM `tb_topic` b
limit 0,1) as6
FROM `tb_topic` b
limit 0,1) as6
FROM `tb_topic` a", subquery);
var subqueryList = select.ToList(a => new
{
@ -994,8 +994,8 @@ FROM `tb_topic` a", subquery);
count = select.As("b").Avg(b => b.Id)
});
Assert.Equal(@"SELECT a.`Id` as1, a.`Clicks` as2, a.`TypeGuid` as3, a.`Title` as4, a.`CreateTime` as5, (SELECT avg(b.`Id`)
FROM `tb_topic` b
limit 0,1) as6
FROM `tb_topic` b
limit 0,1) as6
FROM `tb_topic` a", subquery);
var subqueryList = select.ToList(a => new
{
@ -1010,7 +1010,7 @@ FROM `tb_topic` a", subquery);
Assert.Equal(@"SELECT a.`Id`, a.`Clicks`, a.`TypeGuid`, a.`Title`, a.`CreateTime`
FROM `tb_topic` a
WHERE (((cast(a.`Id` as char)) in (SELECT b.`Title`
FROM `tb_topic` b)))", subquery);
FROM `tb_topic` b)))", subquery);
var subqueryList = select.Where(a => select.As("b").ToList(b => b.Title).Contains(a.Id.ToString())).ToList();
}
[Fact]
@ -1088,12 +1088,12 @@ WHERE (((cast(a.`Id` as char)) in (SELECT b.`Title`
query = select.AsTable((_, old) => old).AsTable((_, old) => old);
sql = query.ToSql().Replace("\r\n", "");
Assert.Equal("SELECT * from (SELECT a.`Id`, a.`Clicks`, a.`TypeGuid`, a.`Title`, a.`CreateTime` FROM `tb_topic` a) ftb UNION ALLSELECT * from (SELECT a.`Id`, a.`Clicks`, a.`TypeGuid`, a.`Title`, a.`CreateTime` FROM `tb_topic` a) ftb", sql);
Assert.Equal("SELECT * from (SELECT a.`Id`, a.`Clicks`, a.`TypeGuid`, a.`Title`, a.`CreateTime` FROM `tb_topic` a) ftb UNION ALL SELECT * from (SELECT a.`Id`, a.`Clicks`, a.`TypeGuid`, a.`Title`, a.`CreateTime` FROM `tb_topic` a) ftb", sql);
query.ToList();
query = select.AsTable((_, old) => old).AsTable((_, old) => old);
sql = query.ToSql("count(1) as1").Replace("\r\n", "");
Assert.Equal("SELECT * from (SELECT count(1) as1 FROM `tb_topic` a) ftb UNION ALLSELECT * from (SELECT count(1) as1 FROM `tb_topic` a) ftb", sql);
Assert.Equal("SELECT * from (SELECT count(1) as1 FROM `tb_topic` a) ftb UNION ALL SELECT * from (SELECT count(1) as1 FROM `tb_topic` a) ftb", sql);
query.Count();
select.AsTable((_, old) => old).AsTable((_, old) => old).Max(a => a.Id);