- 修复 ClickHouse 联表查询 GLOBAL left join、Ado.Query * 问题;#1383

This commit is contained in:
2881099 2022-12-26 22:28:06 +08:00
parent 0e98e0d309
commit b224118133
4 changed files with 57 additions and 4 deletions

View File

@ -151,6 +151,7 @@ namespace FreeSql.Internal.CommonProvider
for (var a = 0; a < fetch.Object.FieldCount; a++) for (var a = 0; a < fetch.Object.FieldCount; a++)
{ {
var name = fetch.Object.GetName(a); var name = fetch.Object.GetName(a);
if (DataType == DataType.ClickHouse && name.Contains(".")) name = name.Substring(name.IndexOf('.') + 1);
if (dic.ContainsKey(name)) continue; if (dic.ContainsKey(name)) continue;
sbflag.Append(name).Append(":").Append(a).Append(","); sbflag.Append(name).Append(":").Append(a).Append(",");
dic.Add(name, a); dic.Add(name, a);
@ -194,6 +195,7 @@ namespace FreeSql.Internal.CommonProvider
for (var a = 0; a < fetch.Object.FieldCount; a++) for (var a = 0; a < fetch.Object.FieldCount; a++)
{ {
var name = fetch.Object.GetName(a); var name = fetch.Object.GetName(a);
if (DataType == DataType.ClickHouse && name.Contains(".")) name = name.Substring(name.IndexOf('.') + 1);
if (dic.ContainsKey(name)) continue; if (dic.ContainsKey(name)) continue;
sbflag.Append(name).Append(":").Append(a).Append(","); sbflag.Append(name).Append(":").Append(a).Append(",");
dic.Add(name, a); dic.Add(name, a);
@ -211,6 +213,7 @@ namespace FreeSql.Internal.CommonProvider
for (var a = 0; a < fetch.Object.FieldCount; a++) for (var a = 0; a < fetch.Object.FieldCount; a++)
{ {
var name = fetch.Object.GetName(a); var name = fetch.Object.GetName(a);
if (DataType == DataType.ClickHouse && name.Contains(".")) name = name.Substring(name.IndexOf('.') + 1);
if (dic.ContainsKey(name)) continue; if (dic.ContainsKey(name)) continue;
sbflag.Append(name).Append(":").Append(a).Append(","); sbflag.Append(name).Append(":").Append(a).Append(",");
dic.Add(name, a); dic.Add(name, a);
@ -262,6 +265,7 @@ namespace FreeSql.Internal.CommonProvider
for (var a = 0; a < fetch.Object.FieldCount; a++) for (var a = 0; a < fetch.Object.FieldCount; a++)
{ {
var name = fetch.Object.GetName(a); var name = fetch.Object.GetName(a);
if (DataType == DataType.ClickHouse && name.Contains(".")) name = name.Substring(name.IndexOf('.') + 1);
if (dic.ContainsKey(name)) continue; if (dic.ContainsKey(name)) continue;
sbflag.Append(name).Append(":").Append(a).Append(","); sbflag.Append(name).Append(":").Append(a).Append(",");
dic.Add(name, a); dic.Add(name, a);
@ -279,6 +283,7 @@ namespace FreeSql.Internal.CommonProvider
for (var a = 0; a < fetch.Object.FieldCount; a++) for (var a = 0; a < fetch.Object.FieldCount; a++)
{ {
var name = fetch.Object.GetName(a); var name = fetch.Object.GetName(a);
if (DataType == DataType.ClickHouse && name.Contains(".")) name = name.Substring(name.IndexOf('.') + 1);
if (dic.ContainsKey(name)) continue; if (dic.ContainsKey(name)) continue;
sbflag.Append(name).Append(":").Append(a).Append(","); sbflag.Append(name).Append(":").Append(a).Append(",");
dic.Add(name, a); dic.Add(name, a);
@ -296,6 +301,7 @@ namespace FreeSql.Internal.CommonProvider
for (var a = 0; a < fetch.Object.FieldCount; a++) for (var a = 0; a < fetch.Object.FieldCount; a++)
{ {
var name = fetch.Object.GetName(a); var name = fetch.Object.GetName(a);
if (DataType == DataType.ClickHouse && name.Contains(".")) name = name.Substring(name.IndexOf('.') + 1);
if (dic.ContainsKey(name)) continue; if (dic.ContainsKey(name)) continue;
sbflag.Append(name).Append(":").Append(a).Append(","); sbflag.Append(name).Append(":").Append(a).Append(",");
dic.Add(name, a); dic.Add(name, a);
@ -353,6 +359,7 @@ namespace FreeSql.Internal.CommonProvider
for (var a = 0; a < fetch.Object.FieldCount; a++) for (var a = 0; a < fetch.Object.FieldCount; a++)
{ {
var name = fetch.Object.GetName(a); var name = fetch.Object.GetName(a);
if (DataType == DataType.ClickHouse && name.Contains(".")) name = name.Substring(name.IndexOf('.') + 1);
if (dic.ContainsKey(name)) continue; if (dic.ContainsKey(name)) continue;
sbflag.Append(name).Append(":").Append(a).Append(","); sbflag.Append(name).Append(":").Append(a).Append(",");
dic.Add(name, a); dic.Add(name, a);
@ -370,6 +377,7 @@ namespace FreeSql.Internal.CommonProvider
for (var a = 0; a < fetch.Object.FieldCount; a++) for (var a = 0; a < fetch.Object.FieldCount; a++)
{ {
var name = fetch.Object.GetName(a); var name = fetch.Object.GetName(a);
if (DataType == DataType.ClickHouse && name.Contains(".")) name = name.Substring(name.IndexOf('.') + 1);
if (dic.ContainsKey(name)) continue; if (dic.ContainsKey(name)) continue;
sbflag.Append(name).Append(":").Append(a).Append(","); sbflag.Append(name).Append(":").Append(a).Append(",");
dic.Add(name, a); dic.Add(name, a);
@ -387,6 +395,7 @@ namespace FreeSql.Internal.CommonProvider
for (var a = 0; a < fetch.Object.FieldCount; a++) for (var a = 0; a < fetch.Object.FieldCount; a++)
{ {
var name = fetch.Object.GetName(a); var name = fetch.Object.GetName(a);
if (DataType == DataType.ClickHouse && name.Contains(".")) name = name.Substring(name.IndexOf('.') + 1);
if (dic.ContainsKey(name)) continue; if (dic.ContainsKey(name)) continue;
sbflag.Append(name).Append(":").Append(a).Append(","); sbflag.Append(name).Append(":").Append(a).Append(",");
dic.Add(name, a); dic.Add(name, a);
@ -404,6 +413,7 @@ namespace FreeSql.Internal.CommonProvider
for (var a = 0; a < fetch.Object.FieldCount; a++) for (var a = 0; a < fetch.Object.FieldCount; a++)
{ {
var name = fetch.Object.GetName(a); var name = fetch.Object.GetName(a);
if (DataType == DataType.ClickHouse && name.Contains(".")) name = name.Substring(name.IndexOf('.') + 1);
if (dic.ContainsKey(name)) continue; if (dic.ContainsKey(name)) continue;
sbflag.Append(name).Append(":").Append(a).Append(","); sbflag.Append(name).Append(":").Append(a).Append(",");
dic.Add(name, a); dic.Add(name, a);
@ -467,6 +477,7 @@ namespace FreeSql.Internal.CommonProvider
for (var a = 0; a < fetch.Object.FieldCount; a++) for (var a = 0; a < fetch.Object.FieldCount; a++)
{ {
var name = fetch.Object.GetName(a); var name = fetch.Object.GetName(a);
if (DataType == DataType.ClickHouse && name.Contains(".")) name = name.Substring(name.IndexOf('.') + 1);
if (dic.ContainsKey(name)) continue; if (dic.ContainsKey(name)) continue;
sbflag.Append(name).Append(":").Append(a).Append(","); sbflag.Append(name).Append(":").Append(a).Append(",");
dic.Add(name, a); dic.Add(name, a);
@ -484,6 +495,7 @@ namespace FreeSql.Internal.CommonProvider
for (var a = 0; a < fetch.Object.FieldCount; a++) for (var a = 0; a < fetch.Object.FieldCount; a++)
{ {
var name = fetch.Object.GetName(a); var name = fetch.Object.GetName(a);
if (DataType == DataType.ClickHouse && name.Contains(".")) name = name.Substring(name.IndexOf('.') + 1);
if (dic.ContainsKey(name)) continue; if (dic.ContainsKey(name)) continue;
sbflag.Append(name).Append(":").Append(a).Append(","); sbflag.Append(name).Append(":").Append(a).Append(",");
dic.Add(name, a); dic.Add(name, a);
@ -501,6 +513,7 @@ namespace FreeSql.Internal.CommonProvider
for (var a = 0; a < fetch.Object.FieldCount; a++) for (var a = 0; a < fetch.Object.FieldCount; a++)
{ {
var name = fetch.Object.GetName(a); var name = fetch.Object.GetName(a);
if (DataType == DataType.ClickHouse && name.Contains(".")) name = name.Substring(name.IndexOf('.') + 1);
if (dic.ContainsKey(name)) continue; if (dic.ContainsKey(name)) continue;
sbflag.Append(name).Append(":").Append(a).Append(","); sbflag.Append(name).Append(":").Append(a).Append(",");
dic.Add(name, a); dic.Add(name, a);
@ -518,6 +531,7 @@ namespace FreeSql.Internal.CommonProvider
for (var a = 0; a < fetch.Object.FieldCount; a++) for (var a = 0; a < fetch.Object.FieldCount; a++)
{ {
var name = fetch.Object.GetName(a); var name = fetch.Object.GetName(a);
if (DataType == DataType.ClickHouse && name.Contains(".")) name = name.Substring(name.IndexOf('.') + 1);
if (dic.ContainsKey(name)) continue; if (dic.ContainsKey(name)) continue;
sbflag.Append(name).Append(":").Append(a).Append(","); sbflag.Append(name).Append(":").Append(a).Append(",");
dic.Add(name, a); dic.Add(name, a);
@ -535,6 +549,7 @@ namespace FreeSql.Internal.CommonProvider
for (var a = 0; a < fetch.Object.FieldCount; a++) for (var a = 0; a < fetch.Object.FieldCount; a++)
{ {
var name = fetch.Object.GetName(a); var name = fetch.Object.GetName(a);
if (DataType == DataType.ClickHouse && name.Contains(".")) name = name.Substring(name.IndexOf('.') + 1);
if (dic.ContainsKey(name)) continue; if (dic.ContainsKey(name)) continue;
sbflag.Append(name).Append(":").Append(a).Append(","); sbflag.Append(name).Append(":").Append(a).Append(",");
dic.Add(name, a); dic.Add(name, a);

View File

@ -67,6 +67,7 @@ namespace FreeSql.Internal.CommonProvider
for (var a = 0; a < fetch.Object.FieldCount; a++) for (var a = 0; a < fetch.Object.FieldCount; a++)
{ {
var name = fetch.Object.GetName(a); var name = fetch.Object.GetName(a);
if (DataType == DataType.ClickHouse && name.Contains(".")) name = name.Substring(name.IndexOf('.') + 1);
if (dic.ContainsKey(name)) continue; if (dic.ContainsKey(name)) continue;
sbflag.Append(name).Append(":").Append(a).Append(","); sbflag.Append(name).Append(":").Append(a).Append(",");
dic.Add(name, a); dic.Add(name, a);
@ -111,6 +112,7 @@ namespace FreeSql.Internal.CommonProvider
for (var a = 0; a < fetch.Object.FieldCount; a++) for (var a = 0; a < fetch.Object.FieldCount; a++)
{ {
var name = fetch.Object.GetName(a); var name = fetch.Object.GetName(a);
if (DataType == DataType.ClickHouse && name.Contains(".")) name = name.Substring(name.IndexOf('.') + 1);
if (dic.ContainsKey(name)) continue; if (dic.ContainsKey(name)) continue;
sbflag.Append(name).Append(":").Append(a).Append(","); sbflag.Append(name).Append(":").Append(a).Append(",");
dic.Add(name, a); dic.Add(name, a);
@ -128,6 +130,7 @@ namespace FreeSql.Internal.CommonProvider
for (var a = 0; a < fetch.Object.FieldCount; a++) for (var a = 0; a < fetch.Object.FieldCount; a++)
{ {
var name = fetch.Object.GetName(a); var name = fetch.Object.GetName(a);
if (DataType == DataType.ClickHouse && name.Contains(".")) name = name.Substring(name.IndexOf('.') + 1);
if (dic.ContainsKey(name)) continue; if (dic.ContainsKey(name)) continue;
sbflag.Append(name).Append(":").Append(a).Append(","); sbflag.Append(name).Append(":").Append(a).Append(",");
dic.Add(name, a); dic.Add(name, a);
@ -180,6 +183,7 @@ namespace FreeSql.Internal.CommonProvider
for (var a = 0; a < fetch.Object.FieldCount; a++) for (var a = 0; a < fetch.Object.FieldCount; a++)
{ {
var name = fetch.Object.GetName(a); var name = fetch.Object.GetName(a);
if (DataType == DataType.ClickHouse && name.Contains(".")) name = name.Substring(name.IndexOf('.') + 1);
if (dic.ContainsKey(name)) continue; if (dic.ContainsKey(name)) continue;
sbflag.Append(name).Append(":").Append(a).Append(","); sbflag.Append(name).Append(":").Append(a).Append(",");
dic.Add(name, a); dic.Add(name, a);
@ -197,6 +201,7 @@ namespace FreeSql.Internal.CommonProvider
for (var a = 0; a < fetch.Object.FieldCount; a++) for (var a = 0; a < fetch.Object.FieldCount; a++)
{ {
var name = fetch.Object.GetName(a); var name = fetch.Object.GetName(a);
if (DataType == DataType.ClickHouse && name.Contains(".")) name = name.Substring(name.IndexOf('.') + 1);
if (dic.ContainsKey(name)) continue; if (dic.ContainsKey(name)) continue;
sbflag.Append(name).Append(":").Append(a).Append(","); sbflag.Append(name).Append(":").Append(a).Append(",");
dic.Add(name, a); dic.Add(name, a);
@ -214,6 +219,7 @@ namespace FreeSql.Internal.CommonProvider
for (var a = 0; a < fetch.Object.FieldCount; a++) for (var a = 0; a < fetch.Object.FieldCount; a++)
{ {
var name = fetch.Object.GetName(a); var name = fetch.Object.GetName(a);
if (DataType == DataType.ClickHouse && name.Contains(".")) name = name.Substring(name.IndexOf('.') + 1);
if (dic.ContainsKey(name)) continue; if (dic.ContainsKey(name)) continue;
sbflag.Append(name).Append(":").Append(a).Append(","); sbflag.Append(name).Append(":").Append(a).Append(",");
dic.Add(name, a); dic.Add(name, a);
@ -272,6 +278,7 @@ namespace FreeSql.Internal.CommonProvider
for (var a = 0; a < fetch.Object.FieldCount; a++) for (var a = 0; a < fetch.Object.FieldCount; a++)
{ {
var name = fetch.Object.GetName(a); var name = fetch.Object.GetName(a);
if (DataType == DataType.ClickHouse && name.Contains(".")) name = name.Substring(name.IndexOf('.') + 1);
if (dic.ContainsKey(name)) continue; if (dic.ContainsKey(name)) continue;
sbflag.Append(name).Append(":").Append(a).Append(","); sbflag.Append(name).Append(":").Append(a).Append(",");
dic.Add(name, a); dic.Add(name, a);
@ -289,6 +296,7 @@ namespace FreeSql.Internal.CommonProvider
for (var a = 0; a < fetch.Object.FieldCount; a++) for (var a = 0; a < fetch.Object.FieldCount; a++)
{ {
var name = fetch.Object.GetName(a); var name = fetch.Object.GetName(a);
if (DataType == DataType.ClickHouse && name.Contains(".")) name = name.Substring(name.IndexOf('.') + 1);
if (dic.ContainsKey(name)) continue; if (dic.ContainsKey(name)) continue;
sbflag.Append(name).Append(":").Append(a).Append(","); sbflag.Append(name).Append(":").Append(a).Append(",");
dic.Add(name, a); dic.Add(name, a);
@ -306,6 +314,7 @@ namespace FreeSql.Internal.CommonProvider
for (var a = 0; a < fetch.Object.FieldCount; a++) for (var a = 0; a < fetch.Object.FieldCount; a++)
{ {
var name = fetch.Object.GetName(a); var name = fetch.Object.GetName(a);
if (DataType == DataType.ClickHouse && name.Contains(".")) name = name.Substring(name.IndexOf('.') + 1);
if (dic.ContainsKey(name)) continue; if (dic.ContainsKey(name)) continue;
sbflag.Append(name).Append(":").Append(a).Append(","); sbflag.Append(name).Append(":").Append(a).Append(",");
dic.Add(name, a); dic.Add(name, a);
@ -323,6 +332,7 @@ namespace FreeSql.Internal.CommonProvider
for (var a = 0; a < fetch.Object.FieldCount; a++) for (var a = 0; a < fetch.Object.FieldCount; a++)
{ {
var name = fetch.Object.GetName(a); var name = fetch.Object.GetName(a);
if (DataType == DataType.ClickHouse && name.Contains(".")) name = name.Substring(name.IndexOf('.') + 1);
if (dic.ContainsKey(name)) continue; if (dic.ContainsKey(name)) continue;
sbflag.Append(name).Append(":").Append(a).Append(","); sbflag.Append(name).Append(":").Append(a).Append(",");
dic.Add(name, a); dic.Add(name, a);
@ -387,6 +397,7 @@ namespace FreeSql.Internal.CommonProvider
for (var a = 0; a < fetch.Object.FieldCount; a++) for (var a = 0; a < fetch.Object.FieldCount; a++)
{ {
var name = fetch.Object.GetName(a); var name = fetch.Object.GetName(a);
if (DataType == DataType.ClickHouse && name.Contains(".")) name = name.Substring(name.IndexOf('.') + 1);
if (dic.ContainsKey(name)) continue; if (dic.ContainsKey(name)) continue;
sbflag.Append(name).Append(":").Append(a).Append(","); sbflag.Append(name).Append(":").Append(a).Append(",");
dic.Add(name, a); dic.Add(name, a);
@ -404,6 +415,7 @@ namespace FreeSql.Internal.CommonProvider
for (var a = 0; a < fetch.Object.FieldCount; a++) for (var a = 0; a < fetch.Object.FieldCount; a++)
{ {
var name = fetch.Object.GetName(a); var name = fetch.Object.GetName(a);
if (DataType == DataType.ClickHouse && name.Contains(".")) name = name.Substring(name.IndexOf('.') + 1);
if (dic.ContainsKey(name)) continue; if (dic.ContainsKey(name)) continue;
sbflag.Append(name).Append(":").Append(a).Append(","); sbflag.Append(name).Append(":").Append(a).Append(",");
dic.Add(name, a); dic.Add(name, a);
@ -421,6 +433,7 @@ namespace FreeSql.Internal.CommonProvider
for (var a = 0; a < fetch.Object.FieldCount; a++) for (var a = 0; a < fetch.Object.FieldCount; a++)
{ {
var name = fetch.Object.GetName(a); var name = fetch.Object.GetName(a);
if (DataType == DataType.ClickHouse && name.Contains(".")) name = name.Substring(name.IndexOf('.') + 1);
if (dic.ContainsKey(name)) continue; if (dic.ContainsKey(name)) continue;
sbflag.Append(name).Append(":").Append(a).Append(","); sbflag.Append(name).Append(":").Append(a).Append(",");
dic.Add(name, a); dic.Add(name, a);
@ -438,6 +451,7 @@ namespace FreeSql.Internal.CommonProvider
for (var a = 0; a < fetch.Object.FieldCount; a++) for (var a = 0; a < fetch.Object.FieldCount; a++)
{ {
var name = fetch.Object.GetName(a); var name = fetch.Object.GetName(a);
if (DataType == DataType.ClickHouse && name.Contains(".")) name = name.Substring(name.IndexOf('.') + 1);
if (dic.ContainsKey(name)) continue; if (dic.ContainsKey(name)) continue;
sbflag.Append(name).Append(":").Append(a).Append(","); sbflag.Append(name).Append(":").Append(a).Append(",");
dic.Add(name, a); dic.Add(name, a);
@ -455,6 +469,7 @@ namespace FreeSql.Internal.CommonProvider
for (var a = 0; a < fetch.Object.FieldCount; a++) for (var a = 0; a < fetch.Object.FieldCount; a++)
{ {
var name = fetch.Object.GetName(a); var name = fetch.Object.GetName(a);
if (DataType == DataType.ClickHouse && name.Contains(".")) name = name.Substring(name.IndexOf('.') + 1);
if (dic.ContainsKey(name)) continue; if (dic.ContainsKey(name)) continue;
sbflag.Append(name).Append(":").Append(a).Append(","); sbflag.Append(name).Append(":").Append(a).Append(",");
dic.Add(name, a); dic.Add(name, a);

View File

@ -250,6 +250,29 @@ namespace FreeSql.Internal.ObjectPool
catch { } catch { }
} }
public void AutoFree()
{
if (running == false) return;
if (UnavailableException != null) return;
var list = new List<Object<T>>();
while (_freeObjects.TryPop(out var obj))
list.Add(obj);
foreach (var obj in list)
{
if (obj != null && obj.Value == null ||
obj != null && Policy.IdleTimeout > TimeSpan.Zero && DateTime.Now.Subtract(obj.LastReturnTime) > Policy.IdleTimeout)
{
if (obj.Value != null)
{
Return(obj, true);
continue;
}
}
Return(obj);
}
}
/// <summary> /// <summary>
/// 获取可用资源,或创建资源 /// 获取可用资源,或创建资源
/// </summary> /// </summary>

View File

@ -46,7 +46,7 @@ namespace FreeSql.ClickHouse.Curd
//如果存在 join 查询,则处理 from t1, t2 改为 from t1 inner join t2 on 1 = 1 //如果存在 join 查询,则处理 from t1, t2 改为 from t1 inner join t2 on 1 = 1
for (var b = 1; b < tbsfrom.Length; b++) for (var b = 1; b < tbsfrom.Length; b++)
{ {
sb.Append(" \r\nLEFT JOIN ").Append(_commonUtils.QuoteSqlName(tbUnion[tbsfrom[b].Table.Type])).Append(" ").Append(_aliasRule?.Invoke(tbsfrom[b].Table.Type, tbsfrom[b].Alias) ?? tbsfrom[b].Alias); sb.Append(" \r\nGLOBAL LEFT JOIN ").Append(_commonUtils.QuoteSqlName(tbUnion[tbsfrom[b].Table.Type])).Append(" ").Append(_aliasRule?.Invoke(tbsfrom[b].Table.Type, tbsfrom[b].Alias) ?? tbsfrom[b].Alias);
if (string.IsNullOrEmpty(tbsfrom[b].NavigateCondition) && string.IsNullOrEmpty(tbsfrom[b].On) && string.IsNullOrEmpty(tbsfrom[b].Cascade)) sb.Append(" ON 1 = 1"); if (string.IsNullOrEmpty(tbsfrom[b].NavigateCondition) && string.IsNullOrEmpty(tbsfrom[b].On) && string.IsNullOrEmpty(tbsfrom[b].Cascade)) sb.Append(" ON 1 = 1");
else else
@ -80,13 +80,13 @@ namespace FreeSql.ClickHouse.Curd
case SelectTableInfoType.RawJoin: case SelectTableInfoType.RawJoin:
continue; continue;
case SelectTableInfoType.LeftJoin: case SelectTableInfoType.LeftJoin:
sb.Append(" \r\nLEFT JOIN "); sb.Append(" \r\nGLOBAL LEFT JOIN ");
break; break;
case SelectTableInfoType.InnerJoin: case SelectTableInfoType.InnerJoin:
sb.Append(" \r\nINNER JOIN "); sb.Append(" \r\nGLOBAL INNER JOIN ");
break; break;
case SelectTableInfoType.RightJoin: case SelectTableInfoType.RightJoin:
sb.Append(" \r\nRIGHT JOIN "); sb.Append(" \r\nGLOBAL RIGHT JOIN ");
break; break;
} }
sb.Append(_commonUtils.QuoteSqlName(tbUnion[tb.Table.Type])).Append(" ").Append(_aliasRule?.Invoke(tb.Table.Type, tb.Alias) ?? tb.Alias).Append(" ON ").Append(tb.On ?? tb.NavigateCondition); sb.Append(_commonUtils.QuoteSqlName(tbUnion[tb.Table.Type])).Append(" ").Append(_aliasRule?.Invoke(tb.Table.Type, tb.Alias) ?? tb.Alias).Append(" ON ").Append(tb.On ?? tb.NavigateCondition);