Skip to content

Commit 1ba3e3e

Browse files
committed
- 修复 AsTreeCte + AsTable 无效的 bug;#1176
1 parent 0e82d6c commit 1ba3e3e

File tree

2 files changed

+28
-10
lines changed

2 files changed

+28
-10
lines changed

FreeSql.DbContext/FreeSql.DbContext.xml

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

FreeSql/Extensions/FreeSqlGlobalExtensions.cs

Lines changed: 19 additions & 10 deletions
Original file line numberDiff line numberDiff line change
@@ -602,6 +602,13 @@ public static ISelect<T1> AsTreeCte<T1>(this ISelect<T1> that,
602602
if (select._orm.CodeFirst.IsSyncStructureToLower) cteName = cteName.ToLower();
603603
if (select._orm.CodeFirst.IsSyncStructureToUpper) cteName = cteName.ToUpper();
604604

605+
var tableRule = select._tableRule;
606+
var tbDbName = (tableRule?.Invoke(tb.Type, tb.DbName) ?? tb.DbName);
607+
if (select._orm.CodeFirst.IsSyncStructureToLower) tbDbName = tbDbName.ToLower();
608+
if (select._orm.CodeFirst.IsSyncStructureToUpper) tbDbName = tbDbName.ToUpper();
609+
if (select._orm.CodeFirst.IsAutoSyncStructure)
610+
select._orm.CodeFirst.SyncStructure(tb.Type, tbDbName);
611+
605612
switch (select._orm.Ado.DataType)
606613
{
607614
case DataType.GBase:
@@ -649,31 +656,31 @@ public static ISelect<T1> AsTreeCte<T1>(this ISelect<T1> that,
649656
FROM (
650657
SELECT @cte_ids as cte_ids, (
651658
SELECT @cte_ids := group_concat({select._commonUtils.QuoteSqlName(tbref.Columns[0].Attribute.Name)})
652-
FROM {select._commonUtils.QuoteSqlName(tb.DbName)}
659+
FROM {select._commonUtils.QuoteSqlName(tbDbName)}
653660
WHERE find_in_set({select._commonUtils.QuoteSqlName(tbref.RefColumns[0].Attribute.Name)}, @cte_ids)
654661
) as cte_cids, @cte_level := @cte_idcte_levels + 1 as cte_level
655-
FROM {select._commonUtils.QuoteSqlName(tb.DbName)}, (
662+
FROM {select._commonUtils.QuoteSqlName(tbDbName)}, (
656663
SELECT @cte_ids := a.{select._commonUtils.QuoteSqlName(tbref.Columns[0].Attribute.Name)}, @cte_idcte_levels := 0
657-
FROM {select._commonUtils.QuoteSqlName(tb.DbName)} a
664+
FROM {select._commonUtils.QuoteSqlName(tbDbName)} a
658665
WHERE 1=1{select._where}
659666
LIMIT 1) cte_tbb
660667
WHERE @cte_ids IS NOT NULL
661-
) cte_tbc, {select._commonUtils.QuoteSqlName(tb.DbName)} a
668+
) cte_tbc, {select._commonUtils.QuoteSqlName(tbDbName)} a
662669
WHERE find_in_set(a.{select._commonUtils.QuoteSqlName(tbref.Columns[0].Attribute.Name)}, cte_tbc.cte_ids)";
663670
select.WithSql(mysql56Sql).OrderBy("a.cte_level DESC");
664671
select._where.Clear();
665672
return select;
666673
}
667674
mysql56Sql = $@"SELECT cte_tbc.cte_level, {select.GetAllFieldExpressionTreeLevel2().Field}
668675
FROM (
669-
SELECT @cte_pid as cte_id, (SELECT @cte_pid := {select._commonUtils.QuoteSqlName(tbref.RefColumns[0].Attribute.Name)} FROM {select._commonUtils.QuoteSqlName(tb.DbName)} WHERE {select._commonUtils.QuoteSqlName(tbref.Columns[0].Attribute.Name)} = cte_id) as cte_pid, @cte_level := @cte_level + 1 as cte_level
670-
FROM {select._commonUtils.QuoteSqlName(tb.DbName)}, (
676+
SELECT @cte_pid as cte_id, (SELECT @cte_pid := {select._commonUtils.QuoteSqlName(tbref.RefColumns[0].Attribute.Name)} FROM {select._commonUtils.QuoteSqlName(tbDbName)} WHERE {select._commonUtils.QuoteSqlName(tbref.Columns[0].Attribute.Name)} = cte_id) as cte_pid, @cte_level := @cte_level + 1 as cte_level
677+
FROM {select._commonUtils.QuoteSqlName(tbDbName)}, (
671678
SELECT @cte_pid := a.{select._commonUtils.QuoteSqlName(tbref.Columns[0].Attribute.Name)}, @cte_level := 0
672-
FROM {select._commonUtils.QuoteSqlName(tb.DbName)} a
679+
FROM {select._commonUtils.QuoteSqlName(tbDbName)} a
673680
WHERE 1=1{select._where}
674681
LIMIT 1) cte_tbb
675682
) cte_tbc
676-
JOIN {select._commonUtils.QuoteSqlName(tb.DbName)} a ON cte_tbc.cte_id = a.{select._commonUtils.QuoteSqlName(tbref.Columns[0].Attribute.Name)}";
683+
JOIN {select._commonUtils.QuoteSqlName(tbDbName)} a ON cte_tbc.cte_id = a.{select._commonUtils.QuoteSqlName(tbref.Columns[0].Attribute.Name)}";
677684
select.WithSql(mysql56Sql).OrderBy("a.cte_level");
678685
select._where.Clear();
679686
return select;
@@ -732,10 +739,12 @@ WHERE @cte_ids IS NOT NULL
732739
}
733740
if (select._orm.CodeFirst.IsAutoSyncStructure)
734741
(select._orm.CodeFirst as CodeFirstProvider)._dicSycedTryAdd(tb.Type, cteName); //#476
742+
743+
select._tableRules.Clear();
735744
var sql2 = select
736745
.AsAlias((type, old) => type == tb.Type ? old.Replace("wct2", "wct1") : old)
737-
.AsTable((type, old) => type == tb.Type ? cteName : old)
738-
.InnerJoin($"{select._commonUtils.QuoteSqlName(tb.DbName)} wct2 ON {sql2InnerJoinOn}")
746+
.AsTable((type, old) => type == tb.Type ? cteName : (tableRule?.Invoke(type, old) ?? old))
747+
.InnerJoin($"{select._commonUtils.QuoteSqlName(tbDbName)} wct2 ON {sql2InnerJoinOn}")
739748
.ToSql($"wct1.cte_level + 1 as cte_level, {sql2ctePath}{sql2Field}").Trim();
740749

741750
var newSelect = select._orm.Select<T1>()

0 commit comments

Comments
 (0)