- 优化 RawJoin 支持 FULL JOIN 等自定义联表映射;

This commit is contained in:
2881099 2022-05-18 10:45:29 +08:00
parent 766c5e97d3
commit 173f75f0a6
23 changed files with 83 additions and 24 deletions

View File

@ -280,6 +280,16 @@ namespace base_entity
} }
var sql1 = fsql.Select<User1, UserGroup>()
.RawJoin("FULL JOIN UserGroup b ON b.id = a.GroupId")
.Where((a, b) => a.IsDeleted == false)
.ToSql((a, b) => new
{
user = a, group = b
});
sql1 = sql1.Replace("INNER JOIN ", "FULL JOIN ");
fsql.UseJsonMap(); fsql.UseJsonMap();

View File

@ -302,6 +302,11 @@ namespace FreeSql.Internal.CommonProvider
{ {
if (string.IsNullOrEmpty(sql)) return this as TSelect; if (string.IsNullOrEmpty(sql)) return this as TSelect;
_join.Append(" \r\n").Append(sql); _join.Append(" \r\n").Append(sql);
//fsql.Select<User1, UserGroup>().RawJoin("FULL JOIN UserGroup b ON b.id = a.GroupId").ToSql((a, b) => new { user = a, group = b });
foreach (var tb in _tables)
if (sql.Contains($" {tb.Table.DbName} ") || sql.Contains($" {_commonUtils.QuoteSqlName(tb.Table.DbName)} "))
tb.Type = SelectTableInfoType.RawJoin;
return this as TSelect; return this as TSelect;
} }

View File

@ -24,5 +24,5 @@ namespace FreeSql.Internal.Model
public string Cascade { get; set; } public string Cascade { get; set; }
} }
public enum SelectTableInfoType { From, LeftJoin, InnerJoin, RightJoin, Parent } public enum SelectTableInfoType { From, LeftJoin, InnerJoin, RightJoin, RawJoin, Parent }
} }

View File

@ -69,9 +69,11 @@ namespace FreeSql.ClickHouse.Curd
} }
foreach (var tb in tbsjoin) foreach (var tb in tbsjoin)
{ {
if (tb.Type == SelectTableInfoType.Parent) continue;
switch (tb.Type) switch (tb.Type)
{ {
case SelectTableInfoType.Parent:
case SelectTableInfoType.RawJoin:
continue;
case SelectTableInfoType.LeftJoin: case SelectTableInfoType.LeftJoin:
sb.Append(" \r\nLEFT JOIN "); sb.Append(" \r\nLEFT JOIN ");
break; break;

View File

@ -74,9 +74,11 @@ namespace FreeSql.Custom
} }
foreach (var tb in tbsjoin) foreach (var tb in tbsjoin)
{ {
if (tb.Type == SelectTableInfoType.Parent) continue;
switch (tb.Type) switch (tb.Type)
{ {
case SelectTableInfoType.Parent:
case SelectTableInfoType.RawJoin:
continue;
case SelectTableInfoType.LeftJoin: case SelectTableInfoType.LeftJoin:
sb.Append(" \r\nLEFT JOIN "); sb.Append(" \r\nLEFT JOIN ");
break; break;

View File

@ -71,9 +71,11 @@ namespace FreeSql.Dameng.Curd
} }
foreach (var tb in tbsjoin) foreach (var tb in tbsjoin)
{ {
if (tb.Type == SelectTableInfoType.Parent) continue;
switch (tb.Type) switch (tb.Type)
{ {
case SelectTableInfoType.Parent:
case SelectTableInfoType.RawJoin:
continue;
case SelectTableInfoType.LeftJoin: case SelectTableInfoType.LeftJoin:
sbunion.Append(" \r\nLEFT JOIN "); sbunion.Append(" \r\nLEFT JOIN ");
break; break;

View File

@ -74,9 +74,11 @@ namespace FreeSql.Firebird.Curd
} }
foreach (var tb in tbsjoin) foreach (var tb in tbsjoin)
{ {
if (tb.Type == SelectTableInfoType.Parent) continue;
switch (tb.Type) switch (tb.Type)
{ {
case SelectTableInfoType.Parent:
case SelectTableInfoType.RawJoin:
continue;
case SelectTableInfoType.LeftJoin: case SelectTableInfoType.LeftJoin:
sb.Append(" \r\nLEFT JOIN "); sb.Append(" \r\nLEFT JOIN ");
break; break;

View File

@ -74,9 +74,11 @@ namespace FreeSql.GBase.Curd
} }
foreach (var tb in tbsjoin) foreach (var tb in tbsjoin)
{ {
if (tb.Type == SelectTableInfoType.Parent) continue;
switch (tb.Type) switch (tb.Type)
{ {
case SelectTableInfoType.Parent:
case SelectTableInfoType.RawJoin:
continue;
case SelectTableInfoType.LeftJoin: case SelectTableInfoType.LeftJoin:
sb.Append(" \r\nLEFT JOIN "); sb.Append(" \r\nLEFT JOIN ");
break; break;

View File

@ -69,9 +69,11 @@ namespace FreeSql.KingbaseES
} }
foreach (var tb in tbsjoin) foreach (var tb in tbsjoin)
{ {
if (tb.Type == SelectTableInfoType.Parent) continue;
switch (tb.Type) switch (tb.Type)
{ {
case SelectTableInfoType.Parent:
case SelectTableInfoType.RawJoin:
continue;
case SelectTableInfoType.LeftJoin: case SelectTableInfoType.LeftJoin:
sb.Append(" \r\nLEFT JOIN "); sb.Append(" \r\nLEFT JOIN ");
break; break;

View File

@ -78,9 +78,11 @@ namespace FreeSql.MsAccess.Curd
} }
foreach (var tb in tbsjoin) foreach (var tb in tbsjoin)
{ {
if (tb.Type == SelectTableInfoType.Parent) continue;
switch (tb.Type) switch (tb.Type)
{ {
case SelectTableInfoType.Parent:
case SelectTableInfoType.RawJoin:
continue;
case SelectTableInfoType.LeftJoin: case SelectTableInfoType.LeftJoin:
if (ioinCounter++ > 0) sb.Insert(fromIndex, "(").Append(") "); if (ioinCounter++ > 0) sb.Insert(fromIndex, "(").Append(") ");
sb.Append(" \r\nLEFT JOIN "); sb.Append(" \r\nLEFT JOIN ");

View File

@ -69,9 +69,11 @@ namespace FreeSql.MySql.Curd
} }
foreach (var tb in tbsjoin) foreach (var tb in tbsjoin)
{ {
if (tb.Type == SelectTableInfoType.Parent) continue;
switch (tb.Type) switch (tb.Type)
{ {
case SelectTableInfoType.Parent:
case SelectTableInfoType.RawJoin:
continue;
case SelectTableInfoType.LeftJoin: case SelectTableInfoType.LeftJoin:
sb.Append(" \r\nLEFT JOIN "); sb.Append(" \r\nLEFT JOIN ");
break; break;

View File

@ -71,9 +71,11 @@ namespace FreeSql.Odbc.Dameng
} }
foreach (var tb in tbsjoin) foreach (var tb in tbsjoin)
{ {
if (tb.Type == SelectTableInfoType.Parent) continue;
switch (tb.Type) switch (tb.Type)
{ {
case SelectTableInfoType.Parent:
case SelectTableInfoType.RawJoin:
continue;
case SelectTableInfoType.LeftJoin: case SelectTableInfoType.LeftJoin:
sbunion.Append(" \r\nLEFT JOIN "); sbunion.Append(" \r\nLEFT JOIN ");
break; break;

View File

@ -74,9 +74,11 @@ namespace FreeSql.Odbc.Default
} }
foreach (var tb in tbsjoin) foreach (var tb in tbsjoin)
{ {
if (tb.Type == SelectTableInfoType.Parent) continue;
switch (tb.Type) switch (tb.Type)
{ {
case SelectTableInfoType.Parent:
case SelectTableInfoType.RawJoin:
continue;
case SelectTableInfoType.LeftJoin: case SelectTableInfoType.LeftJoin:
sb.Append(" \r\nLEFT JOIN "); sb.Append(" \r\nLEFT JOIN ");
break; break;

View File

@ -69,9 +69,11 @@ namespace FreeSql.Odbc.KingbaseES
} }
foreach (var tb in tbsjoin) foreach (var tb in tbsjoin)
{ {
if (tb.Type == SelectTableInfoType.Parent) continue;
switch (tb.Type) switch (tb.Type)
{ {
case SelectTableInfoType.Parent:
case SelectTableInfoType.RawJoin:
continue;
case SelectTableInfoType.LeftJoin: case SelectTableInfoType.LeftJoin:
sb.Append(" \r\nLEFT JOIN "); sb.Append(" \r\nLEFT JOIN ");
break; break;

View File

@ -69,9 +69,11 @@ namespace FreeSql.Odbc.MySql
} }
foreach (var tb in tbsjoin) foreach (var tb in tbsjoin)
{ {
if (tb.Type == SelectTableInfoType.Parent) continue;
switch (tb.Type) switch (tb.Type)
{ {
case SelectTableInfoType.Parent:
case SelectTableInfoType.RawJoin:
continue;
case SelectTableInfoType.LeftJoin: case SelectTableInfoType.LeftJoin:
sb.Append(" \r\nLEFT JOIN "); sb.Append(" \r\nLEFT JOIN ");
break; break;

View File

@ -71,9 +71,11 @@ namespace FreeSql.Odbc.Oracle
} }
foreach (var tb in tbsjoin) foreach (var tb in tbsjoin)
{ {
if (tb.Type == SelectTableInfoType.Parent) continue;
switch (tb.Type) switch (tb.Type)
{ {
case SelectTableInfoType.Parent:
case SelectTableInfoType.RawJoin:
continue;
case SelectTableInfoType.LeftJoin: case SelectTableInfoType.LeftJoin:
sbunion.Append(" \r\nLEFT JOIN "); sbunion.Append(" \r\nLEFT JOIN ");
break; break;

View File

@ -69,9 +69,11 @@ namespace FreeSql.Odbc.PostgreSQL
} }
foreach (var tb in tbsjoin) foreach (var tb in tbsjoin)
{ {
if (tb.Type == SelectTableInfoType.Parent) continue;
switch (tb.Type) switch (tb.Type)
{ {
case SelectTableInfoType.Parent:
case SelectTableInfoType.RawJoin:
continue;
case SelectTableInfoType.LeftJoin: case SelectTableInfoType.LeftJoin:
sb.Append(" \r\nLEFT JOIN "); sb.Append(" \r\nLEFT JOIN ");
break; break;

View File

@ -90,9 +90,11 @@ namespace FreeSql.Odbc.SqlServer
} }
foreach (var tb in tbsjoin) foreach (var tb in tbsjoin)
{ {
if (tb.Type == SelectTableInfoType.Parent) continue;
switch (tb.Type) switch (tb.Type)
{ {
case SelectTableInfoType.Parent:
case SelectTableInfoType.RawJoin:
continue;
case SelectTableInfoType.LeftJoin: case SelectTableInfoType.LeftJoin:
sb.Append(" \r\nLEFT JOIN "); sb.Append(" \r\nLEFT JOIN ");
break; break;
@ -195,9 +197,11 @@ namespace FreeSql.Odbc.SqlServer
} }
foreach (var tb in tbsjoin) foreach (var tb in tbsjoin)
{ {
if (tb.Type == SelectTableInfoType.Parent) continue;
switch (tb.Type) switch (tb.Type)
{ {
case SelectTableInfoType.Parent:
case SelectTableInfoType.RawJoin:
continue;
case SelectTableInfoType.LeftJoin: case SelectTableInfoType.LeftJoin:
sb.Append(" \r\nLEFT JOIN "); sb.Append(" \r\nLEFT JOIN ");
break; break;

View File

@ -71,9 +71,11 @@ namespace FreeSql.Oracle.Curd
} }
foreach (var tb in tbsjoin) foreach (var tb in tbsjoin)
{ {
if (tb.Type == SelectTableInfoType.Parent) continue;
switch (tb.Type) switch (tb.Type)
{ {
case SelectTableInfoType.Parent:
case SelectTableInfoType.RawJoin:
continue;
case SelectTableInfoType.LeftJoin: case SelectTableInfoType.LeftJoin:
sbunion.Append(" \r\nLEFT JOIN "); sbunion.Append(" \r\nLEFT JOIN ");
break; break;

View File

@ -69,9 +69,11 @@ namespace FreeSql.PostgreSQL.Curd
} }
foreach (var tb in tbsjoin) foreach (var tb in tbsjoin)
{ {
if (tb.Type == SelectTableInfoType.Parent) continue;
switch (tb.Type) switch (tb.Type)
{ {
case SelectTableInfoType.Parent:
case SelectTableInfoType.RawJoin:
continue;
case SelectTableInfoType.LeftJoin: case SelectTableInfoType.LeftJoin:
sb.Append(" \r\nLEFT JOIN "); sb.Append(" \r\nLEFT JOIN ");
break; break;

View File

@ -69,9 +69,11 @@ namespace FreeSql.ShenTong.Curd
} }
foreach (var tb in tbsjoin) foreach (var tb in tbsjoin)
{ {
if (tb.Type == SelectTableInfoType.Parent) continue;
switch (tb.Type) switch (tb.Type)
{ {
case SelectTableInfoType.Parent:
case SelectTableInfoType.RawJoin:
continue;
case SelectTableInfoType.LeftJoin: case SelectTableInfoType.LeftJoin:
sb.Append(" \r\nLEFT JOIN "); sb.Append(" \r\nLEFT JOIN ");
break; break;

View File

@ -90,9 +90,11 @@ namespace FreeSql.SqlServer.Curd
} }
foreach (var tb in tbsjoin) foreach (var tb in tbsjoin)
{ {
if (tb.Type == SelectTableInfoType.Parent) continue;
switch (tb.Type) switch (tb.Type)
{ {
case SelectTableInfoType.Parent:
case SelectTableInfoType.RawJoin:
continue;
case SelectTableInfoType.LeftJoin: case SelectTableInfoType.LeftJoin:
sb.Append(" \r\nLEFT JOIN "); sb.Append(" \r\nLEFT JOIN ");
break; break;
@ -195,9 +197,11 @@ namespace FreeSql.SqlServer.Curd
} }
foreach (var tb in tbsjoin) foreach (var tb in tbsjoin)
{ {
if (tb.Type == SelectTableInfoType.Parent) continue;
switch (tb.Type) switch (tb.Type)
{ {
case SelectTableInfoType.Parent:
case SelectTableInfoType.RawJoin:
continue;
case SelectTableInfoType.LeftJoin: case SelectTableInfoType.LeftJoin:
sb.Append(" \r\nLEFT JOIN "); sb.Append(" \r\nLEFT JOIN ");
break; break;

View File

@ -69,9 +69,11 @@ namespace FreeSql.Sqlite.Curd
} }
foreach (var tb in tbsjoin) foreach (var tb in tbsjoin)
{ {
if (tb.Type == SelectTableInfoType.Parent) continue;
switch (tb.Type) switch (tb.Type)
{ {
case SelectTableInfoType.Parent:
case SelectTableInfoType.RawJoin:
continue;
case SelectTableInfoType.LeftJoin: case SelectTableInfoType.LeftJoin:
sb.Append(" \r\nLEFT JOIN "); sb.Append(" \r\nLEFT JOIN ");
break; break;