Skip to content

Commit 6826dec

Browse files
committed
- 修复 AsTreeCte + RereadSql 不能同时使用的 bug;#964
1 parent d197599 commit 6826dec

File tree

3 files changed

+191
-6
lines changed

3 files changed

+191
-6
lines changed

FreeSql/Extensions/FreeSqlGlobalExtensions.cs

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -520,11 +520,11 @@ WHERE @cte_ids IS NOT NULL
520520
}
521521
sql1ctePath = $"{sql1ctePath} as cte_path, ";
522522
}
523-
var sql1 = select.ToSql($"0 as cte_level, {sql1ctePath}{select.GetAllFieldExpressionTreeLevel2().Field}").Trim();
523+
var sql1 = select.ToSql($"0 as cte_level, {sql1ctePath}{select.GetAllFieldExpressionTreeLevel2(false).Field}").Trim();
524524

525525
select._where.Clear();
526526
select.As("wct2");
527-
var sql2Field = select.GetAllFieldExpressionTreeLevel2().Field;
527+
var sql2Field = select.GetAllFieldExpressionTreeLevel2(false).Field;
528528
var sql2InnerJoinOn = up == false ?
529529
string.Join(" and ", tbref.Columns.Select((a, z) => $"wct2.{select._commonUtils.QuoteSqlName(tbref.RefColumns[z].Attribute.Name)} = wct1.{select._commonUtils.QuoteSqlName(a.Attribute.Name)}")) :
530530
string.Join(" and ", tbref.Columns.Select((a, z) => $"wct2.{select._commonUtils.QuoteSqlName(a.Attribute.Name)} = wct1.{select._commonUtils.QuoteSqlName(tbref.RefColumns[z].Attribute.Name)}"));

FreeSql/FreeSql.xml

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

FreeSql/Internal/CommonProvider/SelectProvider/Select0ProviderReader.cs

Lines changed: 6 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -533,7 +533,7 @@ public GetAllFieldExpressionTreeInfo GetAllFieldExpressionTreeLevelAll()
533533
});
534534
}
535535
static EventHandler<Aop.AuditDataReaderEventArgs> _OldAuditDataReaderHandler;
536-
public GetAllFieldExpressionTreeInfo GetAllFieldExpressionTreeLevel2()
536+
public GetAllFieldExpressionTreeInfo GetAllFieldExpressionTreeLevel2(bool isRereadSql = true)
537537
{
538538
if (_selectExpression != null) //ToSql
539539
{
@@ -549,7 +549,7 @@ public GetAllFieldExpressionTreeInfo GetAllFieldExpressionTreeLevel2()
549549
_OldAuditDataReaderHandler = _orm.Aop.AuditDataReaderHandler; //清除单表 ExppressionTree
550550
_dicGetAllFieldExpressionTree.TryRemove($"{_orm.Ado.DataType}-{_tables[0].Table.DbName}-{_tables[0].Table.CsName}-{_tables[0].Alias}-{_tables[0].Type}", out var oldet);
551551
}
552-
return _dicGetAllFieldExpressionTree.GetOrAdd(string.Join("+", _tables.Select(a => $"{_orm.Ado.DataType}-{a.Table.DbName}-{a.Table.CsName}-{a.Alias}-{a.Type}")), s =>
552+
return _dicGetAllFieldExpressionTree.GetOrAdd(string.Join("+", _tables.Select(a => $"{_orm.Ado.DataType}-{a.Table.DbName}-{a.Table.CsName}-{a.Alias}-{a.Type}-{(isRereadSql ? 1 : 0)}")), s =>
553553
{
554554
var tb1 = _tables.First().Table;
555555
var type = tb1.TypeLazy ?? tb1.Type;
@@ -583,7 +583,8 @@ public GetAllFieldExpressionTreeInfo GetAllFieldExpressionTreeLevel2()
583583
{ //普通字段
584584
if (index > 0) field.Append(", ");
585585
var quoteName = _commonUtils.QuoteSqlName(col.Attribute.Name);
586-
field.Append(_commonUtils.RereadColumn(col, $"{tb.Alias}.{quoteName}"));
586+
if (isRereadSql) field.Append(_commonUtils.RereadColumn(col, $"{tb.Alias}.{quoteName}"));
587+
else field.Append($"{tb.Alias}.{quoteName}");
587588
++index;
588589
if (dicfield.ContainsKey(quoteName)) field.Append(_commonUtils.FieldAsAlias($"as{index}"));
589590
else dicfield.Add(quoteName, true);
@@ -606,7 +607,8 @@ public GetAllFieldExpressionTreeInfo GetAllFieldExpressionTreeLevel2()
606607
{
607608
if (index > 0) field.Append(", ");
608609
var quoteName = _commonUtils.QuoteSqlName(col2.Attribute.Name);
609-
field.Append(_commonUtils.RereadColumn(col2, $"{tb2.Alias}.{quoteName}"));
610+
if (isRereadSql) field.Append(_commonUtils.RereadColumn(col2, $"{tb2.Alias}.{quoteName}"));
611+
else field.Append($"{tb2.Alias}.{quoteName}");
610612
++index;
611613
++otherindex;
612614
if (dicfield.ContainsKey(quoteName)) field.Append(_commonUtils.FieldAsAlias($"as{index}"));

0 commit comments

Comments
 (0)