From 153dfc24a0855ff1f3d7ed91a4dffc8a6b87b86c Mon Sep 17 00:00:00 2001 From: sunkaixuan <610262374@qq.com> Date: Thu, 19 Sep 2024 11:27:32 +0800 Subject: [PATCH] Clickhouse Final --- .../SqlBuilder/ClickHouseQueryBuilder.cs | 20 ++++++++++++++++++- .../SqlSugar/Entities/ConnMoreSettings.cs | 1 + .../SqlSugar/Utilities/UtilMethods.cs | 3 ++- 3 files changed, 22 insertions(+), 2 deletions(-) diff --git a/Src/Asp.NetCore2/SqlSugar.ClickHouseCore/ClickHouse/SqlBuilder/ClickHouseQueryBuilder.cs b/Src/Asp.NetCore2/SqlSugar.ClickHouseCore/ClickHouse/SqlBuilder/ClickHouseQueryBuilder.cs index 053e0f073..7c3c6ae8c 100644 --- a/Src/Asp.NetCore2/SqlSugar.ClickHouseCore/ClickHouse/SqlBuilder/ClickHouseQueryBuilder.cs +++ b/Src/Asp.NetCore2/SqlSugar.ClickHouseCore/ClickHouse/SqlBuilder/ClickHouseQueryBuilder.cs @@ -39,7 +39,25 @@ namespace SqlSugar.ClickHouse string oldOrderValue = this.OrderByValue; string result = ""; sql = new StringBuilder(); - sql.AppendFormat(SqlTemplate, GetSelectValue, GetTableNameString, GetWhereValueString, GetGroupByString + HavingInfos, (Skip != null || Take != null) ? null : GetOrderByString); + var isFinal = this.Context.CurrentConnectionConfig?.MoreSettings?.ClickHouseEnableFinal==true; + var final = " Final "; + var finalGlobal = " FINAL GLOBAL "; + if (isFinal&&this.IsSingle()) + { + sql.AppendFormat(SqlTemplate, GetSelectValue, GetTableNameString+" "+ final, GetWhereValueString, GetGroupByString + HavingInfos, (Skip != null || Take != null) ? null : GetOrderByString); + } + else if (isFinal && !this.IsSingle()) + { + var tableName = GetTableNameString; + var shortName = $" {this.Builder.GetTranslationColumnName(this.TableShortName)} "; + tableName = tableName.Replace(shortName, shortName+finalGlobal); + tableName = tableName.Replace("\" ON ( \"", "\" "+final+" ON ( \""); + sql.AppendFormat(SqlTemplate, GetSelectValue, tableName, GetWhereValueString, GetGroupByString + HavingInfos, (Skip != null || Take != null) ? null : GetOrderByString); + } + else + { + sql.AppendFormat(SqlTemplate, GetSelectValue, GetTableNameString, GetWhereValueString, GetGroupByString + HavingInfos, (Skip != null || Take != null) ? null : GetOrderByString); + } if (IsCount) { return sql.ToString(); } if (Skip != null && Take == null) { diff --git a/Src/Asp.NetCore2/SqlSugar/Entities/ConnMoreSettings.cs b/Src/Asp.NetCore2/SqlSugar/Entities/ConnMoreSettings.cs index bc1effcf2..92eba05e9 100644 --- a/Src/Asp.NetCore2/SqlSugar/Entities/ConnMoreSettings.cs +++ b/Src/Asp.NetCore2/SqlSugar/Entities/ConnMoreSettings.cs @@ -36,5 +36,6 @@ namespace SqlSugar public int MaxParameterNameLength { get; set; } public bool DisableQueryWhereColumnRemoveTrim { get; set; } public DbType? DatabaseModel { get;set; } + public bool ClickHouseEnableFinal { get; set; } } } diff --git a/Src/Asp.NetCore2/SqlSugar/Utilities/UtilMethods.cs b/Src/Asp.NetCore2/SqlSugar/Utilities/UtilMethods.cs index 91b75dc64..79de6004e 100644 --- a/Src/Asp.NetCore2/SqlSugar/Utilities/UtilMethods.cs +++ b/Src/Asp.NetCore2/SqlSugar/Utilities/UtilMethods.cs @@ -711,7 +711,8 @@ namespace SqlSugar MaxParameterNameLength=it.MoreSettings.MaxParameterNameLength, DisableQueryWhereColumnRemoveTrim=it.MoreSettings.DisableQueryWhereColumnRemoveTrim, DatabaseModel=it.MoreSettings.DatabaseModel, - EnableILike=it.MoreSettings.EnableILike + EnableILike=it.MoreSettings.EnableILike, + ClickHouseEnableFinal=it.MoreSettings.ClickHouseEnableFinal }, SqlMiddle = it.SqlMiddle == null ? null : new SqlMiddle