- 修复 FromQuery + WithTempQuery 嵌套查询多层后别名问题;#1510

This commit is contained in:
2881099
2023-05-10 01:45:42 +08:00
parent c9759bf623
commit 79e3dcb615
4 changed files with 178 additions and 89 deletions

View File

@ -9,6 +9,175 @@ namespace FreeSql.Tests.SqlServer
{
public class SqlServerSelectWithTempQueryTest
{
[Fact]
public void Issues1510()
{
var fsql = g.mysql;
var query = fsql.Select<Issues1510T1>()
.FromQuery(fsql.Select<Issues1510T2>().WithTempQuery(e => e))
.InnerJoin(t => t.t1.Id == t.t2.T1JoinId)
.WithTempQuery(t => new
{
t.t1.Id,
t.t1.Name,
T2Id = t.t2.Id,
T2Name = t.t1.Name,
});
var sql = query.ToSql();
Assert.Equal(sql, @"SELECT *
FROM (
SELECT a.`Id`, a.`Name`, htb.`Id` `T2Id`, a.`Name` `T2Name`
FROM `Issues1510T1` a
INNER JOIN (
SELECT a.`Id`, a.`Name`, a.`T1JoinId`
FROM `Issues1510T2` a ) htb ON a.`Id` = htb.`T1JoinId` ) a");
query.ToList();
query = fsql.Select<Issues1510T1>()
.FromQuery(fsql.Select<Issues1510T2>().WithTempQuery(e => e).WithTempQuery(e => e))
.InnerJoin(t => t.t1.Id == t.t2.T1JoinId)
.WithTempQuery(t => new
{
t.t1.Id,
t.t1.Name,
T2Id = t.t2.Id,
T2Name = t.t1.Name,
});
sql = query.ToSql();
Assert.Equal(sql, @"SELECT *
FROM (
SELECT a.`Id`, a.`Name`, htb.`Id` `T2Id`, a.`Name` `T2Name`
FROM `Issues1510T1` a
INNER JOIN (
SELECT a.`Id`, a.`Name`, a.`T1JoinId`
FROM (
SELECT a.`Id`, a.`Name`, a.`T1JoinId`
FROM `Issues1510T2` a ) a ) htb ON a.`Id` = htb.`T1JoinId` ) a");
query.ToList();
query = fsql.Select<Issues1510T1>()
.FromQuery(fsql.Select<Issues1510T2>().WithTempQuery(e => new { T2 = e }).WithTempQuery(e => e.T2))
.InnerJoin(t => t.t1.Id == t.t2.T1JoinId)
.WithTempQuery(t => new
{
t.t1.Id,
t.t1.Name,
T2Id = t.t2.Id,
T2Name = t.t1.Name,
});
sql = query.ToSql();
Assert.Equal(sql, @"SELECT *
FROM (
SELECT a.`Id`, a.`Name`, htb.`Id` `T2Id`, a.`Name` `T2Name`
FROM `Issues1510T1` a
INNER JOIN (
SELECT a.`Id`, a.`Name`, a.`T1JoinId`
FROM (
SELECT a.`Id`, a.`Name`, a.`T1JoinId`
FROM `Issues1510T2` a ) a ) htb ON a.`Id` = htb.`T1JoinId` ) a");
query.ToList();
//////////////////////////
var query2 = fsql.Select<Issues1510T1>()
.FromQuery(fsql.Select<Issues1510T2>().WithTempQuery(e => e))
.InnerJoin(t => t.t1.Id == t.t2.T1JoinId)
.WithTempQuery(t => new
{
T1Id = t.t1.Id,
T1Name = t.t1.Name,
T2Id = t.t2.Id,
T2Name = t.t1.Name,
});
sql = query2.ToSql();
Assert.Equal(sql, @"SELECT *
FROM (
SELECT a.`Id` `T1Id`, a.`Name` `T1Name`, htb.`Id` `T2Id`, a.`Name` `T2Name`
FROM `Issues1510T1` a
INNER JOIN (
SELECT a.`Id`, a.`Name`, a.`T1JoinId`
FROM `Issues1510T2` a ) htb ON a.`Id` = htb.`T1JoinId` ) a");
query2.ToList();
query2 = fsql.Select<Issues1510T1>()
.FromQuery(fsql.Select<Issues1510T2>().WithTempQuery(e => new { T2 = e }).WithTempQuery(e => e.T2))
.InnerJoin(t => t.t1.Id == t.t2.T1JoinId)
.WithTempQuery(t => new
{
T1Id = t.t1.Id,
T1Name = t.t1.Name,
T2Id = t.t2.Id,
T2Name = t.t1.Name,
});
sql = query2.ToSql();
Assert.Equal(sql, @"SELECT *
FROM (
SELECT a.`Id` `T1Id`, a.`Name` `T1Name`, htb.`Id` `T2Id`, a.`Name` `T2Name`
FROM `Issues1510T1` a
INNER JOIN (
SELECT a.`Id`, a.`Name`, a.`T1JoinId`
FROM (
SELECT a.`Id`, a.`Name`, a.`T1JoinId`
FROM `Issues1510T2` a ) a ) htb ON a.`Id` = htb.`T1JoinId` ) a");
query2.ToList();
query2 = fsql.Select<Issues1510T1>()
.WithTempQuery(e => e)
.FromQuery(fsql.Select<Issues1510T2>())
.InnerJoin(t => t.t1.Id == t.t2.T1JoinId)
.WithTempQuery(t => new
{
T1Id = t.t1.Id,
T1Name = t.t1.Name,
T2Id = t.t2.Id,
T2Name = t.t1.Name,
});
sql = query2.ToSql();
Assert.Equal(sql, @"SELECT *
FROM (
SELECT a.`Id` `T1Id`, a.`Name` `T1Name`, htb.`Id` `T2Id`, a.`Name` `T2Name`
FROM (
SELECT a.`Id`, a.`Name`
FROM `Issues1510T1` a ) a
INNER JOIN `Issues1510T2` htb ON a.`Id` = htb.`T1JoinId` ) a");
query2.ToList();
query2 = fsql.Select<Issues1510T1>()
.WithTempQuery(e => e)
.FromQuery(fsql.Select<Issues1510T2>().WithTempQuery(e => e))
.InnerJoin(t => t.t1.Id == t.t2.T1JoinId)
.WithTempQuery(t => new
{
T1Id = t.t1.Id,
T1Name = t.t1.Name,
T2Id = t.t2.Id,
T2Name = t.t1.Name,
});
sql = query2.ToSql();
Assert.Equal(sql, @"SELECT *
FROM (
SELECT a.`Id` `T1Id`, a.`Name` `T1Name`, htb.`Id` `T2Id`, a.`Name` `T2Name`
FROM (
SELECT a.`Id`, a.`Name`
FROM `Issues1510T1` a ) a
INNER JOIN (
SELECT a.`Id`, a.`Name`, a.`T1JoinId`
FROM `Issues1510T2` a ) htb ON a.`Id` = htb.`T1JoinId` ) a");
query2.ToList();
}
public class Issues1510T1
{
public long Id { get; set; }
public string Name { get; set; }
}
public class Issues1510T2
{
public long Id { get; set; }
public string Name { get; set; }
public long T1JoinId { get; set; }
}
[Fact]
public void Issues1467()
{