From 88eb91b7178e4a2b2e48839af7e3a8916b9a943c Mon Sep 17 00:00:00 2001 From: sunkaixuan <610262374@qq.com> Date: Wed, 26 Feb 2025 16:17:49 +0800 Subject: [PATCH] Update TDengine --- .../TDengine/Insertable/TagInserttable.cs | 46 +++++++++++++++++-- .../Tools/UtilExtensions.cs | 1 + .../Demo/ORMTest_Partial/1_InsertUsingTag.cs | 24 ++++++++++ 3 files changed, 68 insertions(+), 3 deletions(-) diff --git a/Src/Asp.NetCore2/SqlSugar.TDengineCore/TDengine/Insertable/TagInserttable.cs b/Src/Asp.NetCore2/SqlSugar.TDengineCore/TDengine/Insertable/TagInserttable.cs index b7866e6e0..ebf207f55 100644 --- a/Src/Asp.NetCore2/SqlSugar.TDengineCore/TDengine/Insertable/TagInserttable.cs +++ b/Src/Asp.NetCore2/SqlSugar.TDengineCore/TDengine/Insertable/TagInserttable.cs @@ -12,13 +12,53 @@ namespace SqlSugar internal IInsertable thisValue; internal Func getChildTableNamefunc; + internal SqlSugarProvider Context; + public int ExecuteCommand() { - var provider = (InsertableProvider) thisValue; + var provider = (InsertableProvider)thisValue; var inserObjects = provider.InsertObjs; var attr = typeof(T).GetCustomAttribute(); - Check.ExceptionEasy(attr == null|| attr?.Tag1==null, $"", $"{nameof(T)}缺少特性STableAttribute和Tag1"); + Check.ExceptionEasy(attr == null || attr?.Tag1 == null, $"", $"{nameof(T)}缺少特性STableAttribute和Tag1"); // 根据所有非空的 Tag 进行分组 + var groups = GetGroupInfos(inserObjects, attr); + foreach (var item in groups) + { + var childTableName = getChildTableNamefunc(attr.STableName, item.First()); + this.Context.Utilities.PageEach(item, 500, pageItems => + { + var sTableName = provider.SqlBuilder.GetTranslationColumnName(attr.STableName); + var tags = new List(); + List tagValues = GetTagValues(pageItems, attr); + var tagString = string.Join(",", tagValues.Where(v => !string.IsNullOrEmpty(v)).Select(v => $"'{v.ToSqlFilter()}'")); + tags.Add(tagString); + this.Context.Ado.ExecuteCommand($"CREATE TABLE IF NOT EXISTS {childTableName} USING {sTableName} TAGS ({tagString})"); + this.Context.Insertable(pageItems).AS(childTableName).ExecuteCommand(); + }); + } + return inserObjects.Count(); + } + + private static List GetTagValues(List pageItems, STableAttribute attr) + { + var tagValues = new List(); + var obj = pageItems.First(); + if (attr.Tag1 != null) + tagValues.Add(obj.GetType().GetProperty(attr.Tag1)?.GetValue(obj)?.ToString()); + + if (attr.Tag2 != null) + tagValues.Add(obj.GetType().GetProperty(attr.Tag2)?.GetValue(obj)?.ToString()); + + if (attr.Tag3 != null) + tagValues.Add(obj.GetType().GetProperty(attr.Tag3)?.GetValue(obj)?.ToString()); + + if (attr.Tag4 != null) + tagValues.Add(obj.GetType().GetProperty(attr.Tag4)?.GetValue(obj)?.ToString()); + return tagValues; + } + + private static IEnumerable> GetGroupInfos(T[] inserObjects, STableAttribute? attr) + { var groups = inserObjects.GroupBy(it => { // 动态生成分组键 @@ -39,7 +79,7 @@ namespace SqlSugar // 将非空的 Tag 值用下划线连接作为分组键 return string.Join("_", groupKey.Where(k => !string.IsNullOrEmpty(k))); }); - return inserObjects.Count(); + return groups; } } } diff --git a/Src/Asp.NetCore2/SqlSugar.TDengineCore/Tools/UtilExtensions.cs b/Src/Asp.NetCore2/SqlSugar.TDengineCore/Tools/UtilExtensions.cs index e97bb87bf..3f9fe132e 100644 --- a/Src/Asp.NetCore2/SqlSugar.TDengineCore/Tools/UtilExtensions.cs +++ b/Src/Asp.NetCore2/SqlSugar.TDengineCore/Tools/UtilExtensions.cs @@ -13,6 +13,7 @@ namespace SqlSugar.TDengine { TagInserttable result = new TagInserttable(); result.thisValue = thisValue; + result.Context = ((InsertableProvider)thisValue).Context; result.getChildTableNamefunc = getChildTableNamefunc; return result; } diff --git a/Src/Asp.NetCore2/TDengineTest/Demo/ORMTest_Partial/1_InsertUsingTag.cs b/Src/Asp.NetCore2/TDengineTest/Demo/ORMTest_Partial/1_InsertUsingTag.cs index a9ff72c94..96d73dded 100644 --- a/Src/Asp.NetCore2/TDengineTest/Demo/ORMTest_Partial/1_InsertUsingTag.cs +++ b/Src/Asp.NetCore2/TDengineTest/Demo/ORMTest_Partial/1_InsertUsingTag.cs @@ -12,6 +12,30 @@ namespace TDengineTest public static void InsertUsingTag(SqlSugarClient db) { db.CodeFirst.InitTables(); + + db.Insertable(new List(){ + new SUsingTagModel() + { + Boolean = true, + Tag1 = "a", + Ts = DateTime.Now + + }, + new SUsingTagModel() + { + Boolean = false, + Tag1 = "a", + Ts = DateTime.Now + + }, + new SUsingTagModel() + { + Boolean = true, + Tag1 = "b", + Ts = DateTime.Now + }}) + .SetTDengineChildTableName((stableName, it) => $"{stableName}_{it.Tag1}" /*设置子表名字*/ ) + .ExecuteCommand(); } [STableAttribute(STableName = "SUsingTagModel", Tag1 = nameof(Tag1))] public class SUsingTagModel