From e91f1157d8cac02a5aa69e8bf98c4a942023b766 Mon Sep 17 00:00:00 2001 From: 2881099 <2881099@qq.com> Date: Sun, 25 Sep 2022 00:16:15 +0800 Subject: [PATCH] =?UTF-8?q?-=20=E4=BC=98=E5=8C=96=20WithTempQuery=20?= =?UTF-8?q?=E5=A4=9A=E5=AF=B9=E8=B1=A1=E9=80=89=E6=8B=A9=E5=90=8C=E5=88=AB?= =?UTF-8?q?=E5=90=8D=E9=97=AE=E9=A2=98=EF=BC=9B#1192?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- FreeSql.DbContext/FreeSql.DbContext.xml | 9 ++ FreeSql.Tests/FreeSql.Tests/Issues/1237.cs | 2 +- .../KingbaseES/Curd/KingbaseESSelectTest.cs | 126 +++++++++--------- .../Curd/SqlServerSelectWithTempQueryTest.cs | 91 +++++++++++++ FreeSql.Tests/FreeSql.Tests/UnitTest1.cs | 12 +- FreeSql.Tests/FreeSql.Tests/g.cs | 6 +- FreeSql/Internal/CommonExpression.cs | 6 +- .../SelectProvider/Select0Provider.cs | 30 +++++ .../SelectProvider/SelectGroupingProvider.cs | 1 + FreeSql/Internal/UtilsExpressionTree.cs | 4 +- README.zh-CN.md | 2 - 11 files changed, 210 insertions(+), 79 deletions(-) diff --git a/FreeSql.DbContext/FreeSql.DbContext.xml b/FreeSql.DbContext/FreeSql.DbContext.xml index 594fbad3..537315e2 100644 --- a/FreeSql.DbContext/FreeSql.DbContext.xml +++ b/FreeSql.DbContext/FreeSql.DbContext.xml @@ -733,6 +733,15 @@ + + + 根据Assembly扫描所有继承IEntityTypeConfiguration<T>的配置类 + + + + + + 创建普通数据上下文档对象 diff --git a/FreeSql.Tests/FreeSql.Tests/Issues/1237.cs b/FreeSql.Tests/FreeSql.Tests/Issues/1237.cs index bacd83be..a18e6437 100644 --- a/FreeSql.Tests/FreeSql.Tests/Issues/1237.cs +++ b/FreeSql.Tests/FreeSql.Tests/Issues/1237.cs @@ -36,7 +36,7 @@ ORDER BY b.""Name"", b.""ID""", people1); .ToSql(); Assert.Equal(@"SELECT * FROM ( - SELECT replace(replace(a.""Name"", ' ', ''), ' ', ''), a.""CSNY"" + SELECT replace(replace(a.""Name"", ' ', ''), ' ', '') ""xm_new"", a.""CSNY"" ""csny"" FROM ""people_issues_1237"" a GROUP BY replace(replace(a.""Name"", ' ', ''), ' ', ''), a.""CSNY"" HAVING (count(1) > 1) ) a diff --git a/FreeSql.Tests/FreeSql.Tests/KingbaseES/Curd/KingbaseESSelectTest.cs b/FreeSql.Tests/FreeSql.Tests/KingbaseES/Curd/KingbaseESSelectTest.cs index 1ccbf5f6..ef281d2e 100644 --- a/FreeSql.Tests/FreeSql.Tests/KingbaseES/Curd/KingbaseESSelectTest.cs +++ b/FreeSql.Tests/FreeSql.Tests/KingbaseES/Curd/KingbaseESSelectTest.cs @@ -17,7 +17,7 @@ namespace FreeSql.Tests.KingbaseES [Column(IsIdentity = true, IsPrimary = true)] public int Id { get; set; } public int Clicks { get; set; } - public int TypeGuid { get; set; } + public int TypeGuid223 { get; set; } public TestTypeInfo Type { get; set; } public string Title { get; set; } public DateTime CreateTime { get; set; } @@ -168,10 +168,10 @@ namespace FreeSql.Tests.KingbaseES var testDto3 = select.Limit(10).ToList(a => new TestDto { }); var testDto4 = select.Limit(10).ToList(a => new TestDto() { }); - var testDto11 = select.LeftJoin(a => a.Type.Guid == a.TypeGuid).Limit(10).ToList(a => new TestDto { id = a.Id, name = a.Title }); - var testDto22 = select.LeftJoin(a => a.Type.Guid == a.TypeGuid).Limit(10).ToList(a => new TestDto()); - var testDto33 = select.LeftJoin(a => a.Type.Guid == a.TypeGuid).Limit(10).ToList(a => new TestDto { }); - var testDto44 = select.LeftJoin(a => a.Type.Guid == a.TypeGuid).Limit(10).ToList(a => new TestDto() { }); + var testDto11 = select.LeftJoin(a => a.Type.Guid == a.TypeGuid223).Limit(10).ToList(a => new TestDto { id = a.Id, name = a.Title }); + var testDto22 = select.LeftJoin(a => a.Type.Guid == a.TypeGuid223).Limit(10).ToList(a => new TestDto()); + var testDto33 = select.LeftJoin(a => a.Type.Guid == a.TypeGuid223).Limit(10).ToList(a => new TestDto { }); + var testDto44 = select.LeftJoin(a => a.Type.Guid == a.TypeGuid223).Limit(10).ToList(a => new TestDto() { }); var testDto211 = select.Limit(10).ToList(a => new TestDto2(a.Id, a.Title)); var testDto212 = select.Limit(10).ToList(a => new TestDto2()); @@ -179,11 +179,11 @@ namespace FreeSql.Tests.KingbaseES var testDto214 = select.Limit(10).ToList(a => new TestDto2() { }); var testDto215 = select.Limit(10).ToList(); - var testDto2211 = select.LeftJoin(a => a.Type.Guid == a.TypeGuid).Limit(10).ToList(a => new TestDto2(a.Id, a.Title)); - var testDto2222 = select.LeftJoin(a => a.Type.Guid == a.TypeGuid).Limit(10).ToList(a => new TestDto2()); - var testDto2233 = select.LeftJoin(a => a.Type.Guid == a.TypeGuid).Limit(10).ToList(a => new TestDto2 { }); - var testDto2244 = select.LeftJoin(a => a.Type.Guid == a.TypeGuid).Limit(10).ToList(a => new TestDto2() { }); - var testDto2255 = select.LeftJoin(a => a.Type.Guid == a.TypeGuid).Limit(10).ToList(); + var testDto2211 = select.LeftJoin(a => a.Type.Guid == a.TypeGuid223).Limit(10).ToList(a => new TestDto2(a.Id, a.Title)); + var testDto2222 = select.LeftJoin(a => a.Type.Guid == a.TypeGuid223).Limit(10).ToList(a => new TestDto2()); + var testDto2233 = select.LeftJoin(a => a.Type.Guid == a.TypeGuid223).Limit(10).ToList(a => new TestDto2 { }); + var testDto2244 = select.LeftJoin(a => a.Type.Guid == a.TypeGuid223).Limit(10).ToList(a => new TestDto2() { }); + var testDto2255 = select.LeftJoin(a => a.Type.Guid == a.TypeGuid223).Limit(10).ToList(); g.kingbaseES.Insert().AppendData(new TestGuidIdToList()).ExecuteAffrows(); var testGuidId5 = g.kingbaseES.Select().ToList(); @@ -276,7 +276,7 @@ namespace FreeSql.Tests.KingbaseES var sql2222Tolist = sql2222.ToList(); var collectionSelect = select.Where(a => - a.Type.Guid == a.TypeGuid && + a.Type.Guid == a.TypeGuid223 && a.Type.Parent.Id == a.Type.ParentId && a.Type.Parent.Types.AsSelect().Where(b => b.Name == a.Title).Any(b => b.ParentId == a.Type.Parent.Id) ); @@ -310,14 +310,14 @@ namespace FreeSql.Tests.KingbaseES public void From() { var query2 = select.From((s, b) => s - .LeftJoin(a => a.TypeGuid == b.Guid) + .LeftJoin(a => a.TypeGuid223 == b.Guid) ); var sql2 = query2.ToSql().Replace("\r\n", ""); Assert.Equal("SELECT a.\"ID\", a.\"CLICKS\", a.\"TYPEGUID\", b.\"GUID\", b.\"PARENTID\", b.\"NAME\", a.\"TITLE\", a.\"CREATETIME\" FROM \"TB_TOPIC22\" a LEFT JOIN \"TESTTYPEINFO\" b ON a.\"TYPEGUID\" = b.\"GUID\"", sql2); query2.ToList(); var query3 = select.From((s, b, c) => s - .LeftJoin(a => a.TypeGuid == b.Guid) + .LeftJoin(a => a.TypeGuid223 == b.Guid) .LeftJoin(a => b.ParentId == c.Id) ); var sql3 = query3.ToSql().Replace("\r\n", ""); @@ -328,47 +328,47 @@ namespace FreeSql.Tests.KingbaseES public void LeftJoin() { //����е�������a.Type��a.Type.Parent ���ǵ������� - var query = select.LeftJoin(a => a.Type.Guid == a.TypeGuid); + var query = select.LeftJoin(a => a.Type.Guid == a.TypeGuid223); var sql = query.ToSql().Replace("\r\n", ""); Assert.Equal("SELECT a.\"ID\", a.\"CLICKS\", a.\"TYPEGUID\", a__Type.\"GUID\", a__Type.\"PARENTID\", a__Type.\"NAME\", a.\"TITLE\", a.\"CREATETIME\" FROM \"TB_TOPIC22\" a LEFT JOIN \"TESTTYPEINFO\" a__Type ON a__Type.\"GUID\" = a.\"TYPEGUID\"", sql); query.ToList(); - query = select.LeftJoin(a => a.Type.Guid == a.TypeGuid && a.Type.Name == "xxx"); + query = select.LeftJoin(a => a.Type.Guid == a.TypeGuid223 && a.Type.Name == "xxx"); sql = query.ToSql().Replace("\r\n", ""); Assert.Equal("SELECT a.\"ID\", a.\"CLICKS\", a.\"TYPEGUID\", a__Type.\"GUID\", a__Type.\"PARENTID\", a__Type.\"NAME\", a.\"TITLE\", a.\"CREATETIME\" FROM \"TB_TOPIC22\" a LEFT JOIN \"TESTTYPEINFO\" a__Type ON a__Type.\"GUID\" = a.\"TYPEGUID\" AND a__Type.\"NAME\" = 'xxx'", sql); query.ToList(); - query = select.LeftJoin(a => a.Type.Guid == a.TypeGuid && a.Type.Name == "xxx").Where(a => a.Type.Parent.Id == 10); + query = select.LeftJoin(a => a.Type.Guid == a.TypeGuid223 && a.Type.Name == "xxx").Where(a => a.Type.Parent.Id == 10); sql = query.ToSql().Replace("\r\n", ""); Assert.Equal("SELECT a.\"ID\", a.\"CLICKS\", a.\"TYPEGUID\", a__Type.\"GUID\", a__Type.\"PARENTID\", a__Type.\"NAME\", a.\"TITLE\", a.\"CREATETIME\" FROM \"TB_TOPIC22\" a LEFT JOIN \"TESTTYPEINFO\" a__Type ON a__Type.\"GUID\" = a.\"TYPEGUID\" AND a__Type.\"NAME\" = 'xxx' LEFT JOIN \"TESTTYPEPARENTINFO\" a__Type__Parent ON a__Type__Parent.\"ID\" = a__Type.\"PARENTID\" WHERE (a__Type__Parent.\"ID\" = 10)", sql); query.ToList(); //���û�е������� - query = select.LeftJoin((a, b) => b.Guid == a.TypeGuid); + query = select.LeftJoin((a, b) => b.Guid == a.TypeGuid223); sql = query.ToSql().Replace("\r\n", ""); Assert.Equal("SELECT a.\"ID\", a.\"CLICKS\", a.\"TYPEGUID\", b.\"GUID\", b.\"PARENTID\", b.\"NAME\", a.\"TITLE\", a.\"CREATETIME\" FROM \"TB_TOPIC22\" a LEFT JOIN \"TESTTYPEINFO\" b ON b.\"GUID\" = a.\"TYPEGUID\"", sql); query.ToList(); - query = select.LeftJoin((a, b) => b.Guid == a.TypeGuid && b.Name == "xxx"); + query = select.LeftJoin((a, b) => b.Guid == a.TypeGuid223 && b.Name == "xxx"); sql = query.ToSql().Replace("\r\n", ""); Assert.Equal("SELECT a.\"ID\", a.\"CLICKS\", a.\"TYPEGUID\", b.\"GUID\", b.\"PARENTID\", b.\"NAME\", a.\"TITLE\", a.\"CREATETIME\" FROM \"TB_TOPIC22\" a LEFT JOIN \"TESTTYPEINFO\" b ON b.\"GUID\" = a.\"TYPEGUID\" AND b.\"NAME\" = 'xxx'", sql); query.ToList(); - query = select.LeftJoin((a, a__Type) => a__Type.Guid == a.TypeGuid && a__Type.Name == "xxx").Where(a => a.Type.Parent.Id == 10); + query = select.LeftJoin((a, a__Type) => a__Type.Guid == a.TypeGuid223 && a__Type.Name == "xxx").Where(a => a.Type.Parent.Id == 10); sql = query.ToSql().Replace("\r\n", ""); Assert.Equal("SELECT a.\"ID\", a.\"CLICKS\", a.\"TYPEGUID\", a__Type.\"GUID\", a__Type.\"PARENTID\", a__Type.\"NAME\", a.\"TITLE\", a.\"CREATETIME\" FROM \"TB_TOPIC22\" a LEFT JOIN \"TESTTYPEINFO\" a__Type ON a__Type.\"GUID\" = a.\"TYPEGUID\" AND a__Type.\"NAME\" = 'xxx' LEFT JOIN \"TESTTYPEPARENTINFO\" a__Type__Parent ON a__Type__Parent.\"ID\" = a__Type.\"PARENTID\" WHERE (a__Type__Parent.\"ID\" = 10)", sql); query.ToList(); //������� query = select - .LeftJoin(a => a.Type.Guid == a.TypeGuid) + .LeftJoin(a => a.Type.Guid == a.TypeGuid223) .LeftJoin(a => a.Type.Parent.Id == a.Type.ParentId); sql = query.ToSql().Replace("\r\n", ""); Assert.Equal("SELECT a.\"ID\", a.\"CLICKS\", a.\"TYPEGUID\", a__Type.\"GUID\", a__Type.\"PARENTID\", a__Type.\"NAME\", a.\"TITLE\", a.\"CREATETIME\" FROM \"TB_TOPIC22\" a LEFT JOIN \"TESTTYPEINFO\" a__Type ON a__Type.\"GUID\" = a.\"TYPEGUID\" LEFT JOIN \"TESTTYPEPARENTINFO\" a__Type__Parent ON a__Type__Parent.\"ID\" = a__Type.\"PARENTID\"", sql); query.ToList(); query = select - .LeftJoin((a, a__Type) => a__Type.Guid == a.TypeGuid) + .LeftJoin((a, a__Type) => a__Type.Guid == a.TypeGuid223) .LeftJoin((a, c) => c.Id == a.Type.ParentId); sql = query.ToSql().Replace("\r\n", ""); Assert.Equal("SELECT a.\"ID\", a.\"CLICKS\", a.\"TYPEGUID\", a__Type.\"GUID\", a__Type.\"PARENTID\", a__Type.\"NAME\", a.\"TITLE\", a.\"CREATETIME\" FROM \"TB_TOPIC22\" a LEFT JOIN \"TESTTYPEINFO\" a__Type ON a__Type.\"GUID\" = a.\"TYPEGUID\" LEFT JOIN \"TESTTYPEPARENTINFO\" c ON c.\"ID\" = a__Type.\"PARENTID\"", sql); @@ -376,7 +376,7 @@ namespace FreeSql.Tests.KingbaseES //���û�е�������b��c������ϵ var query2 = select.From((s, b, c) => s - .LeftJoin(a => a.TypeGuid == b.Guid) + .LeftJoin(a => a.TypeGuid223 == b.Guid) .LeftJoin(a => b.ParentId == c.Id)); sql = query2.ToSql().Replace("\r\n", ""); Assert.Equal("SELECT a.\"ID\", a.\"CLICKS\", a.\"TYPEGUID\", b.\"GUID\", b.\"PARENTID\", b.\"NAME\", a.\"TITLE\", a.\"CREATETIME\" FROM \"TB_TOPIC22\" a LEFT JOIN \"TESTTYPEINFO\" b ON a.\"TYPEGUID\" = b.\"GUID\" LEFT JOIN \"TESTTYPEPARENTINFO\" c ON b.\"PARENTID\" = c.\"ID\"", sql); @@ -392,47 +392,49 @@ namespace FreeSql.Tests.KingbaseES public void InnerJoin() { //����е�������a.Type��a.Type.Parent ���ǵ������� - var query = select.InnerJoin(a => a.Type.Guid == a.TypeGuid); + var tb = g.kingbaseES.CodeFirst.GetTableByEntity(typeof(Topic)); + + var query = select.InnerJoin(a => a.Type.Guid == a.TypeGuid223); var sql = query.ToSql().Replace("\r\n", ""); Assert.Equal("SELECT a.\"ID\", a.\"CLICKS\", a.\"TYPEGUID\", a__Type.\"GUID\", a__Type.\"PARENTID\", a__Type.\"NAME\", a.\"TITLE\", a.\"CREATETIME\" FROM \"TB_TOPIC22\" a INNER JOIN \"TESTTYPEINFO\" a__Type ON a__Type.\"GUID\" = a.\"TYPEGUID\"", sql); query.ToList(); - query = select.InnerJoin(a => a.Type.Guid == a.TypeGuid && a.Type.Name == "xxx"); + query = select.InnerJoin(a => a.Type.Guid == a.TypeGuid223 && a.Type.Name == "xxx"); sql = query.ToSql().Replace("\r\n", ""); Assert.Equal("SELECT a.\"ID\", a.\"CLICKS\", a.\"TYPEGUID\", a__Type.\"GUID\", a__Type.\"PARENTID\", a__Type.\"NAME\", a.\"TITLE\", a.\"CREATETIME\" FROM \"TB_TOPIC22\" a INNER JOIN \"TESTTYPEINFO\" a__Type ON a__Type.\"GUID\" = a.\"TYPEGUID\" AND a__Type.\"NAME\" = 'xxx'", sql); query.ToList(); - query = select.InnerJoin(a => a.Type.Guid == a.TypeGuid && a.Type.Name == "xxx").Where(a => a.Type.Parent.Id == 10); + query = select.InnerJoin(a => a.Type.Guid == a.TypeGuid223 && a.Type.Name == "xxx").Where(a => a.Type.Parent.Id == 10); sql = query.ToSql().Replace("\r\n", ""); Assert.Equal("SELECT a.\"ID\", a.\"CLICKS\", a.\"TYPEGUID\", a__Type.\"GUID\", a__Type.\"PARENTID\", a__Type.\"NAME\", a.\"TITLE\", a.\"CREATETIME\" FROM \"TB_TOPIC22\" a INNER JOIN \"TESTTYPEINFO\" a__Type ON a__Type.\"GUID\" = a.\"TYPEGUID\" AND a__Type.\"NAME\" = 'xxx' LEFT JOIN \"TESTTYPEPARENTINFO\" a__Type__Parent ON a__Type__Parent.\"ID\" = a__Type.\"PARENTID\" WHERE (a__Type__Parent.\"ID\" = 10)", sql); query.ToList(); //���û�е������� - query = select.InnerJoin((a, b) => b.Guid == a.TypeGuid); + query = select.InnerJoin((a, b) => b.Guid == a.TypeGuid223); sql = query.ToSql().Replace("\r\n", ""); Assert.Equal("SELECT a.\"ID\", a.\"CLICKS\", a.\"TYPEGUID\", b.\"GUID\", b.\"PARENTID\", b.\"NAME\", a.\"TITLE\", a.\"CREATETIME\" FROM \"TB_TOPIC22\" a INNER JOIN \"TESTTYPEINFO\" b ON b.\"GUID\" = a.\"TYPEGUID\"", sql); query.ToList(); - query = select.InnerJoin((a, b) => b.Guid == a.TypeGuid && b.Name == "xxx"); + query = select.InnerJoin((a, b) => b.Guid == a.TypeGuid223 && b.Name == "xxx"); sql = query.ToSql().Replace("\r\n", ""); Assert.Equal("SELECT a.\"ID\", a.\"CLICKS\", a.\"TYPEGUID\", b.\"GUID\", b.\"PARENTID\", b.\"NAME\", a.\"TITLE\", a.\"CREATETIME\" FROM \"TB_TOPIC22\" a INNER JOIN \"TESTTYPEINFO\" b ON b.\"GUID\" = a.\"TYPEGUID\" AND b.\"NAME\" = 'xxx'", sql); query.ToList(); - query = select.InnerJoin((a, a__Type) => a__Type.Guid == a.TypeGuid && a__Type.Name == "xxx").Where(a => a.Type.Parent.Id == 10); + query = select.InnerJoin((a, a__Type) => a__Type.Guid == a.TypeGuid223 && a__Type.Name == "xxx").Where(a => a.Type.Parent.Id == 10); sql = query.ToSql().Replace("\r\n", ""); Assert.Equal("SELECT a.\"ID\", a.\"CLICKS\", a.\"TYPEGUID\", a__Type.\"GUID\", a__Type.\"PARENTID\", a__Type.\"NAME\", a.\"TITLE\", a.\"CREATETIME\" FROM \"TB_TOPIC22\" a INNER JOIN \"TESTTYPEINFO\" a__Type ON a__Type.\"GUID\" = a.\"TYPEGUID\" AND a__Type.\"NAME\" = 'xxx' LEFT JOIN \"TESTTYPEPARENTINFO\" a__Type__Parent ON a__Type__Parent.\"ID\" = a__Type.\"PARENTID\" WHERE (a__Type__Parent.\"ID\" = 10)", sql); query.ToList(); //������� query = select - .InnerJoin(a => a.Type.Guid == a.TypeGuid) + .InnerJoin(a => a.Type.Guid == a.TypeGuid223) .InnerJoin(a => a.Type.Parent.Id == a.Type.ParentId); sql = query.ToSql().Replace("\r\n", ""); Assert.Equal("SELECT a.\"ID\", a.\"CLICKS\", a.\"TYPEGUID\", a__Type.\"GUID\", a__Type.\"PARENTID\", a__Type.\"NAME\", a.\"TITLE\", a.\"CREATETIME\" FROM \"TB_TOPIC22\" a INNER JOIN \"TESTTYPEINFO\" a__Type ON a__Type.\"GUID\" = a.\"TYPEGUID\" INNER JOIN \"TESTTYPEPARENTINFO\" a__Type__Parent ON a__Type__Parent.\"ID\" = a__Type.\"PARENTID\"", sql); query.ToList(); query = select - .InnerJoin((a, a__Type) => a__Type.Guid == a.TypeGuid) + .InnerJoin((a, a__Type) => a__Type.Guid == a.TypeGuid223) .InnerJoin((a, c) => c.Id == a.Type.ParentId); sql = query.ToSql().Replace("\r\n", ""); Assert.Equal("SELECT a.\"ID\", a.\"CLICKS\", a.\"TYPEGUID\", a__Type.\"GUID\", a__Type.\"PARENTID\", a__Type.\"NAME\", a.\"TITLE\", a.\"CREATETIME\" FROM \"TB_TOPIC22\" a INNER JOIN \"TESTTYPEINFO\" a__Type ON a__Type.\"GUID\" = a.\"TYPEGUID\" INNER JOIN \"TESTTYPEPARENTINFO\" c ON c.\"ID\" = a__Type.\"PARENTID\"", sql); @@ -440,7 +442,7 @@ namespace FreeSql.Tests.KingbaseES //���û�е�������b��c������ϵ var query2 = select.From((s, b, c) => s - .InnerJoin(a => a.TypeGuid == b.Guid) + .InnerJoin(a => a.TypeGuid223 == b.Guid) .InnerJoin(a => b.ParentId == c.Id)); sql = query2.ToSql().Replace("\r\n", ""); Assert.Equal("SELECT a.\"ID\", a.\"CLICKS\", a.\"TYPEGUID\", b.\"GUID\", b.\"PARENTID\", b.\"NAME\", a.\"TITLE\", a.\"CREATETIME\" FROM \"TB_TOPIC22\" a INNER JOIN \"TESTTYPEINFO\" b ON a.\"TYPEGUID\" = b.\"GUID\" INNER JOIN \"TESTTYPEPARENTINFO\" c ON b.\"PARENTID\" = c.\"ID\"", sql); @@ -456,47 +458,47 @@ namespace FreeSql.Tests.KingbaseES public void RightJoin() { //����е�������a.Type��a.Type.Parent ���ǵ������� - var query = select.RightJoin(a => a.Type.Guid == a.TypeGuid); + var query = select.RightJoin(a => a.Type.Guid == a.TypeGuid223); var sql = query.ToSql().Replace("\r\n", ""); Assert.Equal("SELECT a.\"ID\", a.\"CLICKS\", a.\"TYPEGUID\", a__Type.\"GUID\", a__Type.\"PARENTID\", a__Type.\"NAME\", a.\"TITLE\", a.\"CREATETIME\" FROM \"TB_TOPIC22\" a RIGHT JOIN \"TESTTYPEINFO\" a__Type ON a__Type.\"GUID\" = a.\"TYPEGUID\"", sql); query.ToList(); - query = select.RightJoin(a => a.Type.Guid == a.TypeGuid && a.Type.Name == "xxx"); + query = select.RightJoin(a => a.Type.Guid == a.TypeGuid223 && a.Type.Name == "xxx"); sql = query.ToSql().Replace("\r\n", ""); Assert.Equal("SELECT a.\"ID\", a.\"CLICKS\", a.\"TYPEGUID\", a__Type.\"GUID\", a__Type.\"PARENTID\", a__Type.\"NAME\", a.\"TITLE\", a.\"CREATETIME\" FROM \"TB_TOPIC22\" a RIGHT JOIN \"TESTTYPEINFO\" a__Type ON a__Type.\"GUID\" = a.\"TYPEGUID\" AND a__Type.\"NAME\" = 'xxx'", sql); query.ToList(); - query = select.RightJoin(a => a.Type.Guid == a.TypeGuid && a.Type.Name == "xxx").Where(a => a.Type.Parent.Id == 10); + query = select.RightJoin(a => a.Type.Guid == a.TypeGuid223 && a.Type.Name == "xxx").Where(a => a.Type.Parent.Id == 10); sql = query.ToSql().Replace("\r\n", ""); Assert.Equal("SELECT a.\"ID\", a.\"CLICKS\", a.\"TYPEGUID\", a__Type.\"GUID\", a__Type.\"PARENTID\", a__Type.\"NAME\", a.\"TITLE\", a.\"CREATETIME\" FROM \"TB_TOPIC22\" a RIGHT JOIN \"TESTTYPEINFO\" a__Type ON a__Type.\"GUID\" = a.\"TYPEGUID\" AND a__Type.\"NAME\" = 'xxx' LEFT JOIN \"TESTTYPEPARENTINFO\" a__Type__Parent ON a__Type__Parent.\"ID\" = a__Type.\"PARENTID\" WHERE (a__Type__Parent.\"ID\" = 10)", sql); query.ToList(); //���û�е������� - query = select.RightJoin((a, b) => b.Guid == a.TypeGuid); + query = select.RightJoin((a, b) => b.Guid == a.TypeGuid223); sql = query.ToSql().Replace("\r\n", ""); Assert.Equal("SELECT a.\"ID\", a.\"CLICKS\", a.\"TYPEGUID\", b.\"GUID\", b.\"PARENTID\", b.\"NAME\", a.\"TITLE\", a.\"CREATETIME\" FROM \"TB_TOPIC22\" a RIGHT JOIN \"TESTTYPEINFO\" b ON b.\"GUID\" = a.\"TYPEGUID\"", sql); query.ToList(); - query = select.RightJoin((a, b) => b.Guid == a.TypeGuid && b.Name == "xxx"); + query = select.RightJoin((a, b) => b.Guid == a.TypeGuid223 && b.Name == "xxx"); sql = query.ToSql().Replace("\r\n", ""); Assert.Equal("SELECT a.\"ID\", a.\"CLICKS\", a.\"TYPEGUID\", b.\"GUID\", b.\"PARENTID\", b.\"NAME\", a.\"TITLE\", a.\"CREATETIME\" FROM \"TB_TOPIC22\" a RIGHT JOIN \"TESTTYPEINFO\" b ON b.\"GUID\" = a.\"TYPEGUID\" AND b.\"NAME\" = 'xxx'", sql); query.ToList(); - query = select.RightJoin((a, a__Type) => a__Type.Guid == a.TypeGuid && a__Type.Name == "xxx").Where(a => a.Type.Parent.Id == 10); + query = select.RightJoin((a, a__Type) => a__Type.Guid == a.TypeGuid223 && a__Type.Name == "xxx").Where(a => a.Type.Parent.Id == 10); sql = query.ToSql().Replace("\r\n", ""); Assert.Equal("SELECT a.\"ID\", a.\"CLICKS\", a.\"TYPEGUID\", a__Type.\"GUID\", a__Type.\"PARENTID\", a__Type.\"NAME\", a.\"TITLE\", a.\"CREATETIME\" FROM \"TB_TOPIC22\" a RIGHT JOIN \"TESTTYPEINFO\" a__Type ON a__Type.\"GUID\" = a.\"TYPEGUID\" AND a__Type.\"NAME\" = 'xxx' LEFT JOIN \"TESTTYPEPARENTINFO\" a__Type__Parent ON a__Type__Parent.\"ID\" = a__Type.\"PARENTID\" WHERE (a__Type__Parent.\"ID\" = 10)", sql); query.ToList(); //������� query = select - .RightJoin(a => a.Type.Guid == a.TypeGuid) + .RightJoin(a => a.Type.Guid == a.TypeGuid223) .RightJoin(a => a.Type.Parent.Id == a.Type.ParentId); sql = query.ToSql().Replace("\r\n", ""); Assert.Equal("SELECT a.\"ID\", a.\"CLICKS\", a.\"TYPEGUID\", a__Type.\"GUID\", a__Type.\"PARENTID\", a__Type.\"NAME\", a.\"TITLE\", a.\"CREATETIME\" FROM \"TB_TOPIC22\" a RIGHT JOIN \"TESTTYPEINFO\" a__Type ON a__Type.\"GUID\" = a.\"TYPEGUID\" RIGHT JOIN \"TESTTYPEPARENTINFO\" a__Type__Parent ON a__Type__Parent.\"ID\" = a__Type.\"PARENTID\"", sql); query.ToList(); query = select - .RightJoin((a, a__Type) => a__Type.Guid == a.TypeGuid) + .RightJoin((a, a__Type) => a__Type.Guid == a.TypeGuid223) .RightJoin((a, c) => c.Id == a.Type.ParentId); sql = query.ToSql().Replace("\r\n", ""); Assert.Equal("SELECT a.\"ID\", a.\"CLICKS\", a.\"TYPEGUID\", a__Type.\"GUID\", a__Type.\"PARENTID\", a__Type.\"NAME\", a.\"TITLE\", a.\"CREATETIME\" FROM \"TB_TOPIC22\" a RIGHT JOIN \"TESTTYPEINFO\" a__Type ON a__Type.\"GUID\" = a.\"TYPEGUID\" RIGHT JOIN \"TESTTYPEPARENTINFO\" c ON c.\"ID\" = a__Type.\"PARENTID\"", sql); @@ -504,7 +506,7 @@ namespace FreeSql.Tests.KingbaseES //���û�е�������b��c������ϵ var query2 = select.From((s, b, c) => s - .RightJoin(a => a.TypeGuid == b.Guid) + .RightJoin(a => a.TypeGuid223 == b.Guid) .RightJoin(a => b.ParentId == c.Id)); sql = query2.ToSql().Replace("\r\n", ""); Assert.Equal("SELECT a.\"ID\", a.\"CLICKS\", a.\"TYPEGUID\", b.\"GUID\", b.\"PARENTID\", b.\"NAME\", a.\"TITLE\", a.\"CREATETIME\" FROM \"TB_TOPIC22\" a RIGHT JOIN \"TESTTYPEINFO\" b ON a.\"TYPEGUID\" = b.\"GUID\" RIGHT JOIN \"TESTTYPEPARENTINFO\" c ON b.\"PARENTID\" = c.\"ID\"", sql); @@ -546,7 +548,7 @@ namespace FreeSql.Tests.KingbaseES Assert.Equal("SELECT a.\"ID\", a.\"CLICKS\", a.\"TYPEGUID\", a__Type.\"GUID\", a__Type.\"PARENTID\", a__Type.\"NAME\", a.\"TITLE\", a.\"CREATETIME\" FROM \"TB_TOPIC22\" a LEFT JOIN \"TESTTYPEINFO\" a__Type ON a__Type.\"GUID\" = a.\"TYPEGUID\" WHERE (a__Type.\"NAME\" = 'typeTitle')", sql); query.ToList(); - query = select.Where(a => a.Type.Name == "typeTitle" && a.Type.Guid == a.TypeGuid); + query = select.Where(a => a.Type.Name == "typeTitle" && a.Type.Guid == a.TypeGuid223); sql = query.ToSql().Replace("\r\n", ""); Assert.Equal("SELECT a.\"ID\", a.\"CLICKS\", a.\"TYPEGUID\", a__Type.\"GUID\", a__Type.\"PARENTID\", a__Type.\"NAME\", a.\"TITLE\", a.\"CREATETIME\" FROM \"TB_TOPIC22\" a LEFT JOIN \"TESTTYPEINFO\" a__Type ON a__Type.\"GUID\" = a.\"TYPEGUID\" WHERE (a__Type.\"NAME\" = 'typeTitle' AND a__Type.\"GUID\" = a.\"TYPEGUID\")", sql); query.ToList(); @@ -557,12 +559,12 @@ namespace FreeSql.Tests.KingbaseES query.ToList(); //���û�е������ԣ��򵥶������ - query = select.Where((a, b) => b.Guid == a.TypeGuid && b.Name == "typeTitle"); + query = select.Where((a, b) => b.Guid == a.TypeGuid223 && b.Name == "typeTitle"); sql = query.ToSql().Replace("\r\n", ""); Assert.Equal("SELECT a.\"ID\", a.\"CLICKS\", a.\"TYPEGUID\", a.\"TITLE\", a.\"CREATETIME\" FROM \"TB_TOPIC22\" a, \"TESTTYPEINFO\" b WHERE (b.\"GUID\" = a.\"TYPEGUID\" AND b.\"NAME\" = 'typeTitle')", sql); query.ToList(); - query = select.Where((a, b) => b.Name == "typeTitle" && b.Guid == a.TypeGuid); + query = select.Where((a, b) => b.Name == "typeTitle" && b.Guid == a.TypeGuid223); sql = query.ToSql().Replace("\r\n", ""); Assert.Equal("SELECT a.\"ID\", a.\"CLICKS\", a.\"TYPEGUID\", a.\"TITLE\", a.\"CREATETIME\" FROM \"TB_TOPIC22\" a, \"TESTTYPEINFO\" b WHERE (b.\"NAME\" = 'typeTitle' AND b.\"GUID\" = a.\"TYPEGUID\")", sql); query.ToList(); @@ -604,7 +606,7 @@ namespace FreeSql.Tests.KingbaseES Assert.Equal("SELECT a.\"ID\", a.\"CLICKS\", a.\"TYPEGUID\", a__Type.\"GUID\", a__Type.\"PARENTID\", a__Type.\"NAME\", a.\"TITLE\", a.\"CREATETIME\" FROM \"TB_TOPIC22\" a LEFT JOIN \"TESTTYPEINFO\" a__Type ON a__Type.\"GUID\" = a.\"TYPEGUID\" WHERE (a__Type.\"NAME\" = 'typeTitle')", sql); query.ToList(); - query = select.WhereIf(true, a => a.Type.Name == "typeTitle" && a.Type.Guid == a.TypeGuid); + query = select.WhereIf(true, a => a.Type.Name == "typeTitle" && a.Type.Guid == a.TypeGuid223); sql = query.ToSql().Replace("\r\n", ""); Assert.Equal("SELECT a.\"ID\", a.\"CLICKS\", a.\"TYPEGUID\", a__Type.\"GUID\", a__Type.\"PARENTID\", a__Type.\"NAME\", a.\"TITLE\", a.\"CREATETIME\" FROM \"TB_TOPIC22\" a LEFT JOIN \"TESTTYPEINFO\" a__Type ON a__Type.\"GUID\" = a.\"TYPEGUID\" WHERE (a__Type.\"NAME\" = 'typeTitle' AND a__Type.\"GUID\" = a.\"TYPEGUID\")", sql); query.ToList(); @@ -645,7 +647,7 @@ namespace FreeSql.Tests.KingbaseES Assert.Equal("SELECT a.\"ID\", a.\"CLICKS\", a.\"TYPEGUID\", a.\"TITLE\", a.\"CREATETIME\" FROM \"TB_TOPIC22\" a", sql); query.ToList(); - query = select.WhereIf(false, a => a.Type.Name == "typeTitle" && a.Type.Guid == a.TypeGuid); + query = select.WhereIf(false, a => a.Type.Name == "typeTitle" && a.Type.Guid == a.TypeGuid223); sql = query.ToSql().Replace("\r\n", ""); Assert.Equal("SELECT a.\"ID\", a.\"CLICKS\", a.\"TYPEGUID\", a.\"TITLE\", a.\"CREATETIME\" FROM \"TB_TOPIC22\" a", sql); query.ToList(); @@ -706,7 +708,7 @@ namespace FreeSql.Tests.KingbaseES g.kingbaseES.Insert().AppendData(new TestInfo { Title = "Title" + DateTime.Now.ToString("yyyyMMddHHmmss"), CreateTime = DateTime.Now, TypeGuid = (int)testpid1 }).ExecuteAffrows(); var fkfjfj = select.GroupBy(a => a.Title) - .ToList(a => a.Sum(a.Value.TypeGuid)); + .ToList(a => a.Sum(a.Value.TypeGuid223)); var aggsql1 = select .GroupBy(a => a.Title) @@ -714,7 +716,7 @@ namespace FreeSql.Tests.KingbaseES { b.Key, cou = b.Count(), - sum2 = b.Sum(b.Value.TypeGuid) + sum2 = b.Sum(b.Value.TypeGuid223) }); var aggtolist1 = select .GroupBy(a => a.Title) @@ -722,7 +724,7 @@ namespace FreeSql.Tests.KingbaseES { b.Key, cou = b.Count(), - sum2 = b.Sum(b.Value.TypeGuid) + sum2 = b.Sum(b.Value.TypeGuid223) }); var aggtolist11 = select .GroupBy(a => a.Title) @@ -730,7 +732,7 @@ namespace FreeSql.Tests.KingbaseES { b.Key, cou = b.Count(), - sum2 = b.Sum(b.Value.TypeGuid) + sum2 = b.Sum(b.Value.TypeGuid223) }); var aggsql2 = select @@ -741,7 +743,7 @@ namespace FreeSql.Tests.KingbaseES b.Key.yyyy, cou = b.Count(), - sum2 = b.Sum(b.Value.TypeGuid) + sum2 = b.Sum(b.Value.TypeGuid223) }); var aggtolist2 = select .GroupBy(a => new { a.Title, yyyy = string.Concat(a.CreateTime.Year, '-', a.CreateTime.Month) }) @@ -750,7 +752,7 @@ namespace FreeSql.Tests.KingbaseES b.Key.Title, b.Key.yyyy, cou = b.Count(), - sum2 = b.Sum(b.Value.TypeGuid) + sum2 = b.Sum(b.Value.TypeGuid223) }); var aggtolist22 = select .GroupBy(a => new { a.Title, yyyy = string.Concat(a.CreateTime.Year, '-', a.CreateTime.Month) }) @@ -760,7 +762,7 @@ namespace FreeSql.Tests.KingbaseES b.Key.yyyy, b.Key, cou = b.Count(), - sum2 = b.Sum(b.Value.TypeGuid) + sum2 = b.Sum(b.Value.TypeGuid223) }); var aggsql3 = select @@ -769,7 +771,7 @@ namespace FreeSql.Tests.KingbaseES { b.Key, cou = b.Count(), - sum2 = b.Sum(b.Value.TypeGuid), + sum2 = b.Sum(b.Value.TypeGuid223), sum3 = b.Sum(b.Value.Type.Parent.Id) }); } @@ -927,47 +929,47 @@ WHERE ((((a.""ID"")::text) in (SELECT b.""TITLE"" }; //����е�������a.Type��a.Type.Parent ���ǵ������� - var query = select.LeftJoin(a => a.Type.Guid == a.TypeGuid).AsTable(tableRule); + var query = select.LeftJoin(a => a.Type.Guid == a.TypeGuid223).AsTable(tableRule); var sql = query.ToSql().Replace("\r\n", ""); Assert.Equal("SELECT a.\"ID\", a.\"CLICKS\", a.\"TYPEGUID\", a__Type.\"GUID\", a__Type.\"PARENTID\", a__Type.\"NAME\", a.\"TITLE\", a.\"CREATETIME\" FROM \"TB_TOPIC22_T1\" a LEFT JOIN \"TESTTYPEINFO_T2\" a__Type ON a__Type.\"GUID\" = a.\"TYPEGUID\"", sql); - query = select.LeftJoin(a => a.Type.Guid == a.TypeGuid && a.Type.Name == "xxx").AsTable(tableRule); + query = select.LeftJoin(a => a.Type.Guid == a.TypeGuid223 && a.Type.Name == "xxx").AsTable(tableRule); sql = query.ToSql().Replace("\r\n", ""); Assert.Equal("SELECT a.\"ID\", a.\"CLICKS\", a.\"TYPEGUID\", a__Type.\"GUID\", a__Type.\"PARENTID\", a__Type.\"NAME\", a.\"TITLE\", a.\"CREATETIME\" FROM \"TB_TOPIC22_T1\" a LEFT JOIN \"TESTTYPEINFO_T2\" a__Type ON a__Type.\"GUID\" = a.\"TYPEGUID\" AND a__Type.\"NAME\" = 'xxx'", sql); - query = select.LeftJoin(a => a.Type.Guid == a.TypeGuid && a.Type.Name == "xxx").Where(a => a.Type.Parent.Id == 10).AsTable(tableRule); + query = select.LeftJoin(a => a.Type.Guid == a.TypeGuid223 && a.Type.Name == "xxx").Where(a => a.Type.Parent.Id == 10).AsTable(tableRule); sql = query.ToSql().Replace("\r\n", ""); Assert.Equal("SELECT a.\"ID\", a.\"CLICKS\", a.\"TYPEGUID\", a__Type.\"GUID\", a__Type.\"PARENTID\", a__Type.\"NAME\", a.\"TITLE\", a.\"CREATETIME\" FROM \"TB_TOPIC22_T1\" a LEFT JOIN \"TESTTYPEINFO_T2\" a__Type ON a__Type.\"GUID\" = a.\"TYPEGUID\" AND a__Type.\"NAME\" = 'xxx' LEFT JOIN \"TESTTYPEPARENTIN_AT\" a__Type__Parent ON a__Type__Parent.\"ID\" = a__Type.\"PARENTID\" WHERE (a__Type__Parent.\"ID\" = 10)", sql); //���û�е������� - query = select.LeftJoin((a, b) => b.Guid == a.TypeGuid).AsTable(tableRule); + query = select.LeftJoin((a, b) => b.Guid == a.TypeGuid223).AsTable(tableRule); sql = query.ToSql().Replace("\r\n", ""); Assert.Equal("SELECT a.\"ID\", a.\"CLICKS\", a.\"TYPEGUID\", b.\"GUID\", b.\"PARENTID\", b.\"NAME\", a.\"TITLE\", a.\"CREATETIME\" FROM \"TB_TOPIC22_T1\" a LEFT JOIN \"TESTTYPEINFO_T2\" b ON b.\"GUID\" = a.\"TYPEGUID\"", sql); - query = select.LeftJoin((a, b) => b.Guid == a.TypeGuid && b.Name == "xxx").AsTable(tableRule); + query = select.LeftJoin((a, b) => b.Guid == a.TypeGuid223 && b.Name == "xxx").AsTable(tableRule); sql = query.ToSql().Replace("\r\n", ""); Assert.Equal("SELECT a.\"ID\", a.\"CLICKS\", a.\"TYPEGUID\", b.\"GUID\", b.\"PARENTID\", b.\"NAME\", a.\"TITLE\", a.\"CREATETIME\" FROM \"TB_TOPIC22_T1\" a LEFT JOIN \"TESTTYPEINFO_T2\" b ON b.\"GUID\" = a.\"TYPEGUID\" AND b.\"NAME\" = 'xxx'", sql); - query = select.LeftJoin((a, a__Type) => a__Type.Guid == a.TypeGuid && a__Type.Name == "xxx").Where(a => a.Type.Parent.Id == 10).AsTable(tableRule); + query = select.LeftJoin((a, a__Type) => a__Type.Guid == a.TypeGuid223 && a__Type.Name == "xxx").Where(a => a.Type.Parent.Id == 10).AsTable(tableRule); sql = query.ToSql().Replace("\r\n", ""); Assert.Equal("SELECT a.\"ID\", a.\"CLICKS\", a.\"TYPEGUID\", a__Type.\"GUID\", a__Type.\"PARENTID\", a__Type.\"NAME\", a.\"TITLE\", a.\"CREATETIME\" FROM \"TB_TOPIC22_T1\" a LEFT JOIN \"TESTTYPEINFO_T2\" a__Type ON a__Type.\"GUID\" = a.\"TYPEGUID\" AND a__Type.\"NAME\" = 'xxx' LEFT JOIN \"TESTTYPEPARENTIN_AT\" a__Type__Parent ON a__Type__Parent.\"ID\" = a__Type.\"PARENTID\" WHERE (a__Type__Parent.\"ID\" = 10)", sql); //������� query = select - .LeftJoin(a => a.Type.Guid == a.TypeGuid) + .LeftJoin(a => a.Type.Guid == a.TypeGuid223) .LeftJoin(a => a.Type.Parent.Id == a.Type.ParentId).AsTable(tableRule); sql = query.ToSql().Replace("\r\n", ""); Assert.Equal("SELECT a.\"ID\", a.\"CLICKS\", a.\"TYPEGUID\", a__Type.\"GUID\", a__Type.\"PARENTID\", a__Type.\"NAME\", a.\"TITLE\", a.\"CREATETIME\" FROM \"TB_TOPIC22_T1\" a LEFT JOIN \"TESTTYPEINFO_T2\" a__Type ON a__Type.\"GUID\" = a.\"TYPEGUID\" LEFT JOIN \"TESTTYPEPARENTIN_AT\" a__Type__Parent ON a__Type__Parent.\"ID\" = a__Type.\"PARENTID\"", sql); query = select - .LeftJoin((a, a__Type) => a__Type.Guid == a.TypeGuid) + .LeftJoin((a, a__Type) => a__Type.Guid == a.TypeGuid223) .LeftJoin((a, c) => c.Id == a.Type.ParentId).AsTable(tableRule); sql = query.ToSql().Replace("\r\n", ""); Assert.Equal("SELECT a.\"ID\", a.\"CLICKS\", a.\"TYPEGUID\", a__Type.\"GUID\", a__Type.\"PARENTID\", a__Type.\"NAME\", a.\"TITLE\", a.\"CREATETIME\" FROM \"TB_TOPIC22_T1\" a LEFT JOIN \"TESTTYPEINFO_T2\" a__Type ON a__Type.\"GUID\" = a.\"TYPEGUID\" LEFT JOIN \"TESTTYPEPARENTIN_AT\" c ON c.\"ID\" = a__Type.\"PARENTID\"", sql); //���û�е�������b��c������ϵ var query2 = select.From((s, b, c) => s - .LeftJoin(a => a.TypeGuid == b.Guid) + .LeftJoin(a => a.TypeGuid223 == b.Guid) .LeftJoin(a => b.ParentId == c.Id)).AsTable(tableRule); sql = query2.ToSql().Replace("\r\n", ""); Assert.Equal("SELECT a.\"ID\", a.\"CLICKS\", a.\"TYPEGUID\", b.\"GUID\", b.\"PARENTID\", b.\"NAME\", a.\"TITLE\", a.\"CREATETIME\" FROM \"TB_TOPIC22_T1\" a LEFT JOIN \"TESTTYPEINFO_T2\" b ON a.\"TYPEGUID\" = b.\"GUID\" LEFT JOIN \"TESTTYPEPARENTIN_AT\" c ON b.\"PARENTID\" = c.\"ID\"", sql); diff --git a/FreeSql.Tests/FreeSql.Tests/SqlServer/Curd/SqlServerSelectWithTempQueryTest.cs b/FreeSql.Tests/FreeSql.Tests/SqlServer/Curd/SqlServerSelectWithTempQueryTest.cs index febc609f..b878bb02 100644 --- a/FreeSql.Tests/FreeSql.Tests/SqlServer/Curd/SqlServerSelectWithTempQueryTest.cs +++ b/FreeSql.Tests/FreeSql.Tests/SqlServer/Curd/SqlServerSelectWithTempQueryTest.cs @@ -1711,6 +1711,97 @@ WHERE (a.[rownum] = 1) AND ((a.[Nickname] = N'name02' OR a.[Nickname] = N'name03 Assert.Equal("name03", list16[1].user.Nickname); Assert.Equal(0, list16[1].subquery1); Assert.Equal(0, list16[1].subquery2); + + + var sql17 = fsql.Select() + .WithTempQuery(a => new { UserId = a.Id, a.Nickname }) + .From() + .InnerJoin((a, b) => a.UserId == b.UserId) + .WithTempQuery((a, b) => new + { + User = a, + UserExt = b, + rownum = SqlExt.RowNumber().Over().PartitionBy(a.Nickname).OrderBy(a.UserId).ToValue() + }) + .Where(a => a.rownum == 1) + .ToSql(); + var assertSql17 = @"SELECT * +FROM ( + SELECT a.[UserId], a.[Nickname], b.[UserId] [UserId2], b.[Remark], row_number() over( partition by a.[Nickname] order by a.[UserId]) [rownum] + FROM ( + SELECT a.[Id] [UserId], a.[Nickname] + FROM [TwoTablePartitionBy_User] a ) a + INNER JOIN [TwoTablePartitionBy_UserExt] b ON a.[UserId] = b.[UserId] ) a +WHERE (a.[rownum] = 1)"; + Assert.Equal(sql17, assertSql17); + var list17 = fsql.Select() + .WithTempQuery(a => new { UserId = a.Id, a.Nickname }) + .From() + .InnerJoin((a, b) => a.UserId == b.UserId) + .WithTempQuery((a, b) => new + { + User = a, + UserExt = b, + rownum = SqlExt.RowNumber().Over().PartitionBy(a.Nickname).OrderBy(a.UserId).ToValue() + }) + .Where(a => a.rownum == 1) + .ToList(); + + + var sql18 = fsql.Select() + .WithTempQuery(a => new { UserId = a.Id, a.Nickname }) + .From() + .InnerJoin((a, b) => a.UserId == b.UserId) + .WithTempQuery((a, b) => new + { + User = a, + UserExt = b, + rownum = SqlExt.RowNumber().Over().PartitionBy(a.Nickname).OrderBy(a.UserId).ToValue() + }) + .Where(a => a.rownum == 1 && a.UserExt.UserId > 0 && a.User.UserId > 0) + .WithTempQuery(a => new + { + Item = a, + a.User, + a.UserExt, + a.rownum + }) + .Where(a => a.rownum == 1 && a.UserExt.UserId > 0 && a.User.UserId > 0) + .Where(a => a.Item.UserExt.UserId > 0 && a.Item.User.UserId > 0) + .ToSql(); + var assertSql18 = @"SELECT * +FROM ( + SELECT a.[UserId], a.[Nickname], a.[UserId2], a.[Remark], a.[rownum], a.[UserId] [UserId3], a.[Nickname] [Nickname2], a.[UserId2] [UserId22], a.[Remark] [Remark2], a.[rownum] [rownum2] + FROM ( + SELECT a.[UserId], a.[Nickname], b.[UserId] [UserId2], b.[Remark], row_number() over( partition by a.[Nickname] order by a.[UserId]) [rownum] + FROM ( + SELECT a.[Id] [UserId], a.[Nickname] + FROM [TwoTablePartitionBy_User] a ) a + INNER JOIN [TwoTablePartitionBy_UserExt] b ON a.[UserId] = b.[UserId] ) a + WHERE (a.[rownum] = 1 AND a.[UserId2] > 0 AND a.[UserId] > 0) ) a +WHERE (a.[rownum2] = 1 AND a.[UserId22] > 0 AND a.[UserId3] > 0) AND (a.[UserId2] > 0 AND a.[UserId] > 0)"; + Assert.Equal(sql18, assertSql18); + var list18 = fsql.Select() + .WithTempQuery(a => new { UserId = a.Id, a.Nickname }) + .From() + .InnerJoin((a, b) => a.UserId == b.UserId) + .WithTempQuery((a, b) => new + { + User = a, + UserExt = b, + rownum = SqlExt.RowNumber().Over().PartitionBy(a.Nickname).OrderBy(a.UserId).ToValue() + }) + .Where(a => a.rownum == 1 && a.UserExt.UserId > 0 && a.User.UserId > 0) + .WithTempQuery(a => new + { + Item = a, + a.User, + a.UserExt, + a.rownum + }) + .Where(a => a.rownum == 1 && a.UserExt.UserId > 0 && a.User.UserId > 0) + .Where(a => a.Item.UserExt.UserId > 0 && a.Item.User.UserId > 0) + .ToList(); } class TwoTablePartitionBy_User { diff --git a/FreeSql.Tests/FreeSql.Tests/UnitTest1.cs b/FreeSql.Tests/FreeSql.Tests/UnitTest1.cs index 2f1ca4ce..cb628870 100644 --- a/FreeSql.Tests/FreeSql.Tests/UnitTest1.cs +++ b/FreeSql.Tests/FreeSql.Tests/UnitTest1.cs @@ -601,12 +601,12 @@ namespace FreeSql.Tests .UseMonitorCommand(a => Trace.WriteLine(a.CommandText)) .Build(); - var data = fsql.Select().ToList(r => new - { - Id = r.Id, - Name = r.AuthorId.ToString(), - AuthorName = r.Author.Name, - }); + //var data = fsql.Select().ToList(r => new + //{ + // Id = r.Id, + // Name = r.AuthorId.ToString(), + // AuthorName = r.Author.Name, + //}); //g.mysql.Aop.AuditValue += (s, e) => //{ diff --git a/FreeSql.Tests/FreeSql.Tests/g.cs b/FreeSql.Tests/FreeSql.Tests/g.cs index 4db61756..301675c4 100644 --- a/FreeSql.Tests/FreeSql.Tests/g.cs +++ b/FreeSql.Tests/FreeSql.Tests/g.cs @@ -158,9 +158,9 @@ public class g public static IFreeSql shentong => shentongLazy.Value; static Lazy kingbaseESLazy = new Lazy(() => new FreeSql.FreeSqlBuilder() - .UseConnectionString(FreeSql.DataType.KingbaseES, "Server=127.0.0.1;Port=54321;UID=USER2;PWD=123456789;database=TDB2") - //.UseConnectionFactory(FreeSql.DataType.KingbaseES, () => new Kdbndp.KdbndpConnection("Server=127.0.0.1;Port=54321;UID=USER2;PWD=123456789;database=TDB2")) - .UseAutoSyncStructure(true) + //.UseConnectionString(FreeSql.DataType.KingbaseES, "Server=127.0.0.1;Port=54321;UID=USER2;PWD=123456789;database=TDB2") + .UseConnectionFactory(FreeSql.DataType.KingbaseES, () => new Kdbndp.KdbndpConnection("Server=127.0.0.1;Port=54321;UID=USER2;PWD=123456789;database=TDB2")) + //.UseAutoSyncStructure(true) .UseLazyLoading(true) .UseNameConvert(FreeSql.Internal.NameConvertType.ToUpper) .UseNoneCommandParameter(true) diff --git a/FreeSql/Internal/CommonExpression.cs b/FreeSql/Internal/CommonExpression.cs index 50c67be3..af0add07 100644 --- a/FreeSql/Internal/CommonExpression.cs +++ b/FreeSql/Internal/CommonExpression.cs @@ -51,6 +51,7 @@ namespace FreeSql.Internal } internal bool EndsWithDbNestedField(string dbField, string dbNestedField) { + if (string.IsNullOrWhiteSpace(dbNestedField)) return true; switch (_ado.DataType) { case DataType.SqlServer: @@ -161,9 +162,8 @@ namespace FreeSql.Internal foreach (var child in parent.GetAllChilds()) { if (withTempQueryParser != null) - field.Append(", ").Append(withTempQueryParser.ParseExpMatchedTable.Alias).Append(".").Append(child.DbNestedField); - else - field.Append(", ").Append(child.DbField); + child.DbField = $"{withTempQueryParser.ParseExpMatchedTable.Alias}.{child.DbNestedField}"; + field.Append(", ").Append(child.DbField); if (index >= 0) { child.DbNestedField = $"as{++index}"; diff --git a/FreeSql/Internal/CommonProvider/SelectProvider/Select0Provider.cs b/FreeSql/Internal/CommonProvider/SelectProvider/Select0Provider.cs index 308b577f..40fa38a9 100644 --- a/FreeSql/Internal/CommonProvider/SelectProvider/Select0Provider.cs +++ b/FreeSql/Internal/CommonProvider/SelectProvider/Select0Provider.cs @@ -192,6 +192,31 @@ namespace FreeSql.Internal.CommonProvider } InsideField = field.Length > 0 ? field.Remove(0, 2).ToString() : null; InsideAf = new ReadAnonymousTypeAfInfo(InsideMap, "*"); + field.Clear(); + if (InsideMap.Childs.Where(a => a.Childs.Count > 1).Count() > 1) + { + var childs = InsideMap.GetAllChilds(); + var duplicateNames = childs.GroupBy(a => a.DbNestedField).Where(a => a.Count() > 1).ToList(); + if (duplicateNames.Count > 0) + { + foreach (var duplicateName in duplicateNames) + { + var dupmapIdx = 0; + foreach (var dupmap in duplicateName) + { + if (++dupmapIdx == 1) continue; + var newfield = insideSelect._commonUtils.TrimQuoteSqlName(dupmap.DbNestedField); + while (InsideField.Contains($"{newfield}{dupmapIdx}")) + ++dupmapIdx; + dupmap.DbNestedField = insideSelect._commonUtils.QuoteSqlName($"{newfield}{dupmapIdx}"); + } + } + foreach (var child in childs) + field.Append(", ").Append(child.DbField).Append(InsideSelect._commonExpression.EndsWithDbNestedField(child.DbField, child.DbNestedField) ? "" : InsideSelect._commonUtils.FieldAsAlias(child.DbNestedField)); + InsideField = field.Length > 0 ? field.Remove(0, 2).ToString() : null; + field.Clear(); + } + } } } @@ -1208,6 +1233,11 @@ namespace FreeSql.Internal.CommonProvider ret._cancel = _cancel; ret._params.AddRange(_params); if (ret._tables[0].Table == null) ret._tables[0].Table = TableInfo.GetDefaultTable(typeof(TDto)); + if (selector is LambdaExpression lambdaExp && lambdaExp != null) + { + for (var a = 0; a < lambdaExp.Parameters.Count; a++) + _tables[a].Parameter = lambdaExp.Parameters[a]; + } var parser = new WithTempQueryParser(this, null, selector, ret._tables[0]); var sql = $"\r\n{this.ToSql(parser._insideSelectList[0].InsideField)}"; ret.WithSql(sql); diff --git a/FreeSql/Internal/CommonProvider/SelectProvider/SelectGroupingProvider.cs b/FreeSql/Internal/CommonProvider/SelectProvider/SelectGroupingProvider.cs index fd420763..7d26c47e 100644 --- a/FreeSql/Internal/CommonProvider/SelectProvider/SelectGroupingProvider.cs +++ b/FreeSql/Internal/CommonProvider/SelectProvider/SelectGroupingProvider.cs @@ -247,6 +247,7 @@ namespace FreeSql.Internal.CommonProvider _addFieldAlias = true; //解决:[Column(Name = "flevel") 与属性名不一致时,嵌套查询 bug var old_field = _field; var fieldsb = new StringBuilder(); + if (_map.Childs.Any() == false) fieldsb.Append(", ").Append(_map.DbField).Append(_comonExp.EndsWithDbNestedField(_map.DbField, _map.DbNestedField) ? "" : _comonExp._common.FieldAsAlias(_map.DbNestedField)); foreach (var child in _map.GetAllChilds()) fieldsb.Append(", ").Append(child.DbField).Append(_comonExp.EndsWithDbNestedField(child.DbField, child.DbNestedField) ? "" : _comonExp._common.FieldAsAlias(child.DbNestedField)); _field = fieldsb.ToString(); diff --git a/FreeSql/Internal/UtilsExpressionTree.cs b/FreeSql/Internal/UtilsExpressionTree.cs index b44e44da..f291776d 100644 --- a/FreeSql/Internal/UtilsExpressionTree.cs +++ b/FreeSql/Internal/UtilsExpressionTree.cs @@ -2459,9 +2459,9 @@ namespace FreeSql.Internal } break; } - if (startLength > 0) + if (startLength >= 0) { - var pvalue = sql.Substring(startIdx, startLength).Replace("''", "'"); + var pvalue = startLength == 0 ? "" : sql.Substring(startIdx, startLength).Replace("''", "'"); var pname = parms.Where(a => a.Value == pvalue).Select(a => a.Key).FirstOrDefault(); if (string.IsNullOrEmpty(pname)) { diff --git a/README.zh-CN.md b/README.zh-CN.md index 6ba341e4..17b11f29 100644 --- a/README.zh-CN.md +++ b/README.zh-CN.md @@ -44,9 +44,7 @@ QQ群:4336577(已满)、8578575(已满)、52508226(在线) - [zhontai.net Admin 后台管理系统](https://github.com/zhontai/Admin.Core) - [A simple and practical CMS implemented by .NET Core](https://github.com/luoyunchong/lin-cms-dotnetcore) -- [iusaas.com SaaS 企业应用管理系统](https://github.com/alonsoalon/TenantSite.Server) - [EasyCms 企业建站,事业单位使用的CMS管理系统](https://github.com/jasonyush/EasyCMS) -- [内容管理系统](https://github.com/hejiyong/fscms)