mirror of
https://github.com/nsnail/FreeSql.git
synced 2025-04-22 02:32:50 +08:00
- 修复 AsTreeCte + AsTable 无效的 bug;#1176
This commit is contained in:
parent
0e82d6c3e3
commit
1ba3e3ea2b
@ -800,5 +800,14 @@
|
|||||||
<param name="that"></param>
|
<param name="that"></param>
|
||||||
<returns></returns>
|
<returns></returns>
|
||||||
</member>
|
</member>
|
||||||
|
<member name="M:Microsoft.Extensions.DependencyInjection.FreeSqlRepositoryDependencyInjection.AddFreeRepository(Microsoft.Extensions.DependencyInjection.IServiceCollection,System.Action{FreeSql.FluentDataFilter},System.Reflection.Assembly[])">
|
||||||
|
<summary>
|
||||||
|
批量注入 Repository,可以参考代码自行调整
|
||||||
|
</summary>
|
||||||
|
<param name="services"></param>
|
||||||
|
<param name="globalDataFilter"></param>
|
||||||
|
<param name="assemblies"></param>
|
||||||
|
<returns></returns>
|
||||||
|
</member>
|
||||||
</members>
|
</members>
|
||||||
</doc>
|
</doc>
|
||||||
|
@ -602,6 +602,13 @@ public static partial class FreeSqlGlobalExtensions
|
|||||||
if (select._orm.CodeFirst.IsSyncStructureToLower) cteName = cteName.ToLower();
|
if (select._orm.CodeFirst.IsSyncStructureToLower) cteName = cteName.ToLower();
|
||||||
if (select._orm.CodeFirst.IsSyncStructureToUpper) cteName = cteName.ToUpper();
|
if (select._orm.CodeFirst.IsSyncStructureToUpper) cteName = cteName.ToUpper();
|
||||||
|
|
||||||
|
var tableRule = select._tableRule;
|
||||||
|
var tbDbName = (tableRule?.Invoke(tb.Type, tb.DbName) ?? tb.DbName);
|
||||||
|
if (select._orm.CodeFirst.IsSyncStructureToLower) tbDbName = tbDbName.ToLower();
|
||||||
|
if (select._orm.CodeFirst.IsSyncStructureToUpper) tbDbName = tbDbName.ToUpper();
|
||||||
|
if (select._orm.CodeFirst.IsAutoSyncStructure)
|
||||||
|
select._orm.CodeFirst.SyncStructure(tb.Type, tbDbName);
|
||||||
|
|
||||||
switch (select._orm.Ado.DataType)
|
switch (select._orm.Ado.DataType)
|
||||||
{
|
{
|
||||||
case DataType.GBase:
|
case DataType.GBase:
|
||||||
@ -649,16 +656,16 @@ public static partial class FreeSqlGlobalExtensions
|
|||||||
FROM (
|
FROM (
|
||||||
SELECT @cte_ids as cte_ids, (
|
SELECT @cte_ids as cte_ids, (
|
||||||
SELECT @cte_ids := group_concat({select._commonUtils.QuoteSqlName(tbref.Columns[0].Attribute.Name)})
|
SELECT @cte_ids := group_concat({select._commonUtils.QuoteSqlName(tbref.Columns[0].Attribute.Name)})
|
||||||
FROM {select._commonUtils.QuoteSqlName(tb.DbName)}
|
FROM {select._commonUtils.QuoteSqlName(tbDbName)}
|
||||||
WHERE find_in_set({select._commonUtils.QuoteSqlName(tbref.RefColumns[0].Attribute.Name)}, @cte_ids)
|
WHERE find_in_set({select._commonUtils.QuoteSqlName(tbref.RefColumns[0].Attribute.Name)}, @cte_ids)
|
||||||
) as cte_cids, @cte_level := @cte_idcte_levels + 1 as cte_level
|
) as cte_cids, @cte_level := @cte_idcte_levels + 1 as cte_level
|
||||||
FROM {select._commonUtils.QuoteSqlName(tb.DbName)}, (
|
FROM {select._commonUtils.QuoteSqlName(tbDbName)}, (
|
||||||
SELECT @cte_ids := a.{select._commonUtils.QuoteSqlName(tbref.Columns[0].Attribute.Name)}, @cte_idcte_levels := 0
|
SELECT @cte_ids := a.{select._commonUtils.QuoteSqlName(tbref.Columns[0].Attribute.Name)}, @cte_idcte_levels := 0
|
||||||
FROM {select._commonUtils.QuoteSqlName(tb.DbName)} a
|
FROM {select._commonUtils.QuoteSqlName(tbDbName)} a
|
||||||
WHERE 1=1{select._where}
|
WHERE 1=1{select._where}
|
||||||
LIMIT 1) cte_tbb
|
LIMIT 1) cte_tbb
|
||||||
WHERE @cte_ids IS NOT NULL
|
WHERE @cte_ids IS NOT NULL
|
||||||
) cte_tbc, {select._commonUtils.QuoteSqlName(tb.DbName)} a
|
) cte_tbc, {select._commonUtils.QuoteSqlName(tbDbName)} a
|
||||||
WHERE find_in_set(a.{select._commonUtils.QuoteSqlName(tbref.Columns[0].Attribute.Name)}, cte_tbc.cte_ids)";
|
WHERE find_in_set(a.{select._commonUtils.QuoteSqlName(tbref.Columns[0].Attribute.Name)}, cte_tbc.cte_ids)";
|
||||||
select.WithSql(mysql56Sql).OrderBy("a.cte_level DESC");
|
select.WithSql(mysql56Sql).OrderBy("a.cte_level DESC");
|
||||||
select._where.Clear();
|
select._where.Clear();
|
||||||
@ -666,14 +673,14 @@ public static partial class FreeSqlGlobalExtensions
|
|||||||
}
|
}
|
||||||
mysql56Sql = $@"SELECT cte_tbc.cte_level, {select.GetAllFieldExpressionTreeLevel2().Field}
|
mysql56Sql = $@"SELECT cte_tbc.cte_level, {select.GetAllFieldExpressionTreeLevel2().Field}
|
||||||
FROM (
|
FROM (
|
||||||
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
|
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
|
||||||
FROM {select._commonUtils.QuoteSqlName(tb.DbName)}, (
|
FROM {select._commonUtils.QuoteSqlName(tbDbName)}, (
|
||||||
SELECT @cte_pid := a.{select._commonUtils.QuoteSqlName(tbref.Columns[0].Attribute.Name)}, @cte_level := 0
|
SELECT @cte_pid := a.{select._commonUtils.QuoteSqlName(tbref.Columns[0].Attribute.Name)}, @cte_level := 0
|
||||||
FROM {select._commonUtils.QuoteSqlName(tb.DbName)} a
|
FROM {select._commonUtils.QuoteSqlName(tbDbName)} a
|
||||||
WHERE 1=1{select._where}
|
WHERE 1=1{select._where}
|
||||||
LIMIT 1) cte_tbb
|
LIMIT 1) cte_tbb
|
||||||
) cte_tbc
|
) cte_tbc
|
||||||
JOIN {select._commonUtils.QuoteSqlName(tb.DbName)} a ON cte_tbc.cte_id = a.{select._commonUtils.QuoteSqlName(tbref.Columns[0].Attribute.Name)}";
|
JOIN {select._commonUtils.QuoteSqlName(tbDbName)} a ON cte_tbc.cte_id = a.{select._commonUtils.QuoteSqlName(tbref.Columns[0].Attribute.Name)}";
|
||||||
select.WithSql(mysql56Sql).OrderBy("a.cte_level");
|
select.WithSql(mysql56Sql).OrderBy("a.cte_level");
|
||||||
select._where.Clear();
|
select._where.Clear();
|
||||||
return select;
|
return select;
|
||||||
@ -732,10 +739,12 @@ JOIN {select._commonUtils.QuoteSqlName(tb.DbName)} a ON cte_tbc.cte_id = a.{sele
|
|||||||
}
|
}
|
||||||
if (select._orm.CodeFirst.IsAutoSyncStructure)
|
if (select._orm.CodeFirst.IsAutoSyncStructure)
|
||||||
(select._orm.CodeFirst as CodeFirstProvider)._dicSycedTryAdd(tb.Type, cteName); //#476
|
(select._orm.CodeFirst as CodeFirstProvider)._dicSycedTryAdd(tb.Type, cteName); //#476
|
||||||
|
|
||||||
|
select._tableRules.Clear();
|
||||||
var sql2 = select
|
var sql2 = select
|
||||||
.AsAlias((type, old) => type == tb.Type ? old.Replace("wct2", "wct1") : old)
|
.AsAlias((type, old) => type == tb.Type ? old.Replace("wct2", "wct1") : old)
|
||||||
.AsTable((type, old) => type == tb.Type ? cteName : old)
|
.AsTable((type, old) => type == tb.Type ? cteName : (tableRule?.Invoke(type, old) ?? old))
|
||||||
.InnerJoin($"{select._commonUtils.QuoteSqlName(tb.DbName)} wct2 ON {sql2InnerJoinOn}")
|
.InnerJoin($"{select._commonUtils.QuoteSqlName(tbDbName)} wct2 ON {sql2InnerJoinOn}")
|
||||||
.ToSql($"wct1.cte_level + 1 as cte_level, {sql2ctePath}{sql2Field}").Trim();
|
.ToSql($"wct1.cte_level + 1 as cte_level, {sql2ctePath}{sql2Field}").Trim();
|
||||||
|
|
||||||
var newSelect = select._orm.Select<T1>()
|
var newSelect = select._orm.Select<T1>()
|
||||||
|
Loading…
x
Reference in New Issue
Block a user