From 1ba3e3ea2bd037a8923280f79769faa3b9b07a9e Mon Sep 17 00:00:00 2001
From: 2881099 <2881099@qq.com>
Date: Fri, 1 Jul 2022 10:23:36 +0800
Subject: [PATCH] =?UTF-8?q?-=20=E4=BF=AE=E5=A4=8D=20AsTreeCte=20+=20AsTabl?=
=?UTF-8?q?e=20=E6=97=A0=E6=95=88=E7=9A=84=20bug=EF=BC=9B#1176?=
MIME-Version: 1.0
Content-Type: text/plain; charset=UTF-8
Content-Transfer-Encoding: 8bit
---
FreeSql.DbContext/FreeSql.DbContext.xml | 9 ++++++
FreeSql/Extensions/FreeSqlGlobalExtensions.cs | 29 ++++++++++++-------
2 files changed, 28 insertions(+), 10 deletions(-)
diff --git a/FreeSql.DbContext/FreeSql.DbContext.xml b/FreeSql.DbContext/FreeSql.DbContext.xml
index 537315e2..26522f10 100644
--- a/FreeSql.DbContext/FreeSql.DbContext.xml
+++ b/FreeSql.DbContext/FreeSql.DbContext.xml
@@ -800,5 +800,14 @@
+
+
+ 批量注入 Repository,可以参考代码自行调整
+
+
+
+
+
+
diff --git a/FreeSql/Extensions/FreeSqlGlobalExtensions.cs b/FreeSql/Extensions/FreeSqlGlobalExtensions.cs
index 41db7e4b..b0c80547 100644
--- a/FreeSql/Extensions/FreeSqlGlobalExtensions.cs
+++ b/FreeSql/Extensions/FreeSqlGlobalExtensions.cs
@@ -602,6 +602,13 @@ public static partial class FreeSqlGlobalExtensions
if (select._orm.CodeFirst.IsSyncStructureToLower) cteName = cteName.ToLower();
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)
{
case DataType.GBase:
@@ -649,16 +656,16 @@ public static partial class FreeSqlGlobalExtensions
FROM (
SELECT @cte_ids as cte_ids, (
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)
) 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
- FROM {select._commonUtils.QuoteSqlName(tb.DbName)} a
+ FROM {select._commonUtils.QuoteSqlName(tbDbName)} a
WHERE 1=1{select._where}
LIMIT 1) cte_tbb
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)";
select.WithSql(mysql56Sql).OrderBy("a.cte_level DESC");
select._where.Clear();
@@ -666,14 +673,14 @@ public static partial class FreeSqlGlobalExtensions
}
mysql56Sql = $@"SELECT cte_tbc.cte_level, {select.GetAllFieldExpressionTreeLevel2().Field}
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
- FROM {select._commonUtils.QuoteSqlName(tb.DbName)}, (
+ 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(tbDbName)}, (
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}
LIMIT 1) cte_tbb
) 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._where.Clear();
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)
(select._orm.CodeFirst as CodeFirstProvider)._dicSycedTryAdd(tb.Type, cteName); //#476
+
+ select._tableRules.Clear();
var sql2 = select
.AsAlias((type, old) => type == tb.Type ? old.Replace("wct2", "wct1") : old)
- .AsTable((type, old) => type == tb.Type ? cteName : old)
- .InnerJoin($"{select._commonUtils.QuoteSqlName(tb.DbName)} wct2 ON {sql2InnerJoinOn}")
+ .AsTable((type, old) => type == tb.Type ? cteName : (tableRule?.Invoke(type, old) ?? old))
+ .InnerJoin($"{select._commonUtils.QuoteSqlName(tbDbName)} wct2 ON {sql2InnerJoinOn}")
.ToSql($"wct1.cte_level + 1 as cte_level, {sql2ctePath}{sql2Field}").Trim();
var newSelect = select._orm.Select()