Skip to content

Commit 5b67288

Browse files
committed
- 修复 UnionAll + OrderBy 未处理嵌套的问题;
1 parent 533d798 commit 5b67288

File tree

3 files changed

+51
-155
lines changed

3 files changed

+51
-155
lines changed

Examples/base_entity/Program.cs

Lines changed: 49 additions & 44 deletions
Original file line numberDiff line numberDiff line change
@@ -581,9 +581,9 @@ static void Main(string[] args)
581581

582582
//.UseConnectionString(FreeSql.DataType.SqlServer, "Data Source=.;Integrated Security=True;Initial Catalog=freesqlTest;Pooling=true;Max Pool Size=3;TrustServerCertificate=true")
583583
//.UseAdoConnectionPool(false)
584-
//.UseConnectionString(FreeSql.DataType.PostgreSQL, "Host=127.0.0.1;Port=5432;Username=postgres;Password=123456;Database=tedb;Pooling=true;Maximum Pool Size=2")
584+
.UseConnectionString(FreeSql.DataType.PostgreSQL, "Host=127.0.0.1;Port=5432;Username=postgres;Password=123456;Database=tedb;Pooling=true;Maximum Pool Size=2")
585585
////.UseConnectionString(FreeSql.DataType.PostgreSQL, "Host=127.0.0.1;Port=5432;Username=postgres;Password=123456;Database=toc;Pooling=true;Maximum Pool Size=2")
586-
//.UseNameConvert(FreeSql.Internal.NameConvertType.ToLower)
586+
.UseNameConvert(FreeSql.Internal.NameConvertType.ToLower)
587587

588588
//.UseConnectionString(FreeSql.DataType.Oracle, "user id=user1;password=123456;data source=//127.0.0.1:1521/XE;Pooling=true;Max Pool Size=2")
589589
//.UseNameConvert(FreeSql.Internal.NameConvertType.ToUpper)
@@ -619,6 +619,53 @@ static void Main(string[] args)
619619
BaseEntity.Initialization(fsql, () => _asyncUow.Value);
620620
#endregion
621621

622+
623+
var dbpars = new List<DbParameter>();
624+
625+
var a1id1 = Guid.NewGuid();
626+
var a1id2 = Guid.NewGuid();
627+
//fsql.CodeFirst.IsGenerateCommandParameterWithLambda = true;
628+
var sql1a0 = fsql.Select<User1>()
629+
.WithParameters(dbpars)
630+
.Where(a => a.Id == a1id1)
631+
.OrderBy(a => a.Id)
632+
633+
.UnionAll(
634+
fsql.Select<User1>()
635+
.WithParameters(dbpars)
636+
.Where(a => a.Id == a1id2)
637+
.OrderByDescending(a => a.Id),
638+
639+
fsql.Select<User1>()
640+
.WithParameters(dbpars)
641+
.Where(a => a.Id == a1id2)
642+
.OrderByDescending(a => a.Id)
643+
)
644+
.Where(a => a.Id == a1id1 || a.Id == a1id2)
645+
.ToList();
646+
var sql1a1 = fsql.Select<User1>()
647+
.Where(a => a.Id == a1id1)
648+
.UnionAll(
649+
fsql.Select<User1>()
650+
.Where(a => a.Id == a1id2)
651+
)
652+
.Where(a => a.Id == a1id1 || a.Id == a1id2)
653+
.ToList();
654+
var sql1a2 = fsql.Select<User1, UserGroup>()
655+
.InnerJoin((a, b) => a.GroupId == b.Id)
656+
.Where((a, b) => a.Id == a1id1)
657+
.WithTempQuery((a, b) => new { user = a, group = b }) //匿名类型
658+
659+
.UnionAll(
660+
fsql.Select<User1, UserGroup>()
661+
.InnerJoin((a, b) => a.GroupId == b.Id)
662+
.Where((a, b) => a.Id == a1id2)
663+
.WithTempQuery((a, b) => new { user = a, group = b }) //匿名类型
664+
)
665+
666+
.Where(a => a.user.Id == a1id1 || a.user.Id == a1id2)
667+
.ToList();
668+
622669
fsql.Aop.AuditValue += (_, e) =>
623670
{
624671

@@ -1676,48 +1723,6 @@ static void Main(string[] args)
16761723
var sqlskdfj = fsql.Select<object>().AsType(typeof(BBB)).ToSql(a => new CCC());
16771724

16781725

1679-
var dbpars = new List<DbParameter>();
1680-
1681-
var a1id1 = Guid.NewGuid();
1682-
var a1id2 = Guid.NewGuid();
1683-
//fsql.CodeFirst.IsGenerateCommandParameterWithLambda = true;
1684-
var sql1a0 = fsql.Select<User1>()
1685-
.WithParameters(dbpars)
1686-
.Where(a => a.Id == a1id1)
1687-
1688-
.UnionAll(
1689-
fsql.Select<User1>()
1690-
.WithParameters(dbpars)
1691-
.Where(a => a.Id == a1id2),
1692-
1693-
fsql.Select<User1>()
1694-
.WithParameters(dbpars)
1695-
.Where(a => a.Id == a1id2)
1696-
)
1697-
.Where(a => a.Id == a1id1 || a.Id == a1id2)
1698-
.ToSql();
1699-
var sql1a1 = fsql.Select<User1>()
1700-
.Where(a => a.Id == a1id1)
1701-
.UnionAll(
1702-
fsql.Select<User1>()
1703-
.Where(a => a.Id == a1id2)
1704-
)
1705-
.Where(a => a.Id == a1id1 || a.Id == a1id2)
1706-
.ToSql();
1707-
var sql1a2 = fsql.Select<User1, UserGroup>()
1708-
.InnerJoin((a, b) => a.GroupId == b.Id)
1709-
.Where((a, b) => a.Id == a1id1)
1710-
.WithTempQuery((a, b) => new { user = a, group = b }) //匿名类型
1711-
1712-
.UnionAll(
1713-
fsql.Select<User1, UserGroup>()
1714-
.InnerJoin((a, b) => a.GroupId == b.Id)
1715-
.Where((a, b) => a.Id == a1id2)
1716-
.WithTempQuery((a, b) => new { user = a, group = b }) //匿名类型
1717-
)
1718-
1719-
.Where(a => a.user.Id == a1id1 || a.user.Id == a1id2)
1720-
.ToSql();
17211726

17221727

17231728
var ddlsql01 = fsql.CodeFirst.GetComparisonDDLStatements<StringNulable>();

FreeSql/FreeSql.xml

Lines changed: 0 additions & 109 deletions
Some generated files are not rendered by default. Learn more about customizing how changed files appear on GitHub.

FreeSql/Internal/CommonProvider/SelectProvider/Select1Provider.cs

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -271,9 +271,9 @@ public ISelect<T1> UnionAll(params ISelect<T1>[] querys)
271271
querys = querys?.Where(q => q != null).ToArray();
272272
if (querys?.Any() != true) return this;
273273
var ret = (_orm as BaseDbProvider).CreateSelectProvider<T1>(null) as Select1Provider<T1>;
274-
var sb = new StringBuilder().Append(LocalGetQuerySql(this));
274+
var sb = new StringBuilder().Append(this._select).Append(" * from (").Append(LocalGetQuerySql(this)).Append(") ftb");
275275
foreach (var select2 in querys)
276-
sb.Append(" \r\nUNION ALL \r\n").Append(LocalGetQuerySql(select2));
276+
sb.Append(" \r\nUNION ALL \r\nselect * from (").Append(LocalGetQuerySql(select2)).Append(") ftb");
277277
ret.WithSql(sb.ToString());
278278
sb.Clear();
279279
ret._commandTimeout = _commandTimeout;

0 commit comments

Comments
 (0)