mirror of
https://github.com/nsnail/FreeSql.git
synced 2025-06-19 12:28:15 +08:00
- 修复 FromQuery + WithTempQuery 嵌套查询多层后别名问题;#1510
This commit is contained in:
@ -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()
|
||||
{
|
||||
|
Reference in New Issue
Block a user