TDengineInserttable.cs 4.2 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970717273747576777879808182838485868788899091929394959697
  1. using System;
  2. using System.Collections.Generic;
  3. using System.Linq;
  4. using System.Threading.Tasks;
  5. namespace SqlSugar.BzTDengineCore
  6. {
  7. public class TDengineInsertable<T> : InsertableProvider<T> where T : class, new()
  8. {
  9. public override int ExecuteReturnIdentity()
  10. {
  11. InsertBuilder.IsReturnIdentity = true;
  12. PreToSql();
  13. string identityColumn = GetIdentityColumn();
  14. string sql = InsertBuilder.ToSqlString().Replace("$PrimaryKey", SqlBuilder.GetTranslationColumnName(identityColumn));
  15. RestoreMapping();
  16. var result = Ado.GetScalar(sql, InsertBuilder.Parameters == null ? null : InsertBuilder.Parameters.ToArray()).ObjToInt();
  17. After(sql, result);
  18. return result;
  19. }
  20. public override async Task<int> ExecuteReturnIdentityAsync()
  21. {
  22. InsertBuilder.IsReturnIdentity = true;
  23. PreToSql();
  24. string identityColumn = GetIdentityColumn();
  25. string sql = InsertBuilder.ToSqlString().Replace("$PrimaryKey", SqlBuilder.GetTranslationColumnName(identityColumn));
  26. RestoreMapping();
  27. var obj = await Ado.GetScalarAsync(sql, InsertBuilder.Parameters == null ? null : InsertBuilder.Parameters.ToArray());
  28. var result = obj.ObjToInt();
  29. After(sql, result);
  30. return result;
  31. }
  32. public override KeyValuePair<string, List<SugarParameter>> ToSql()
  33. {
  34. var result = base.ToSql();
  35. var primaryKey = GetPrimaryKeys().FirstOrDefault();
  36. if (primaryKey != null)
  37. {
  38. primaryKey = SqlBuilder.GetTranslationColumnName(primaryKey);
  39. }
  40. return new KeyValuePair<string, List<SugarParameter>>(result.Key.Replace("$PrimaryKey", primaryKey), result.Value);
  41. }
  42. public override long ExecuteReturnBigIdentity()
  43. {
  44. InsertBuilder.IsReturnIdentity = true;
  45. PreToSql();
  46. string sql = InsertBuilder.ToSqlString().Replace("$PrimaryKey", SqlBuilder.GetTranslationColumnName(GetIdentityKeys().FirstOrDefault()));
  47. RestoreMapping();
  48. var result = Convert.ToInt64(Ado.GetScalar(sql, InsertBuilder.Parameters == null ? null : InsertBuilder.Parameters.ToArray()) ?? "0");
  49. After(sql, result);
  50. return result;
  51. }
  52. public override async Task<long> ExecuteReturnBigIdentityAsync()
  53. {
  54. InsertBuilder.IsReturnIdentity = true;
  55. PreToSql();
  56. string sql = InsertBuilder.ToSqlString().Replace("$PrimaryKey", SqlBuilder.GetTranslationColumnName(GetIdentityKeys().FirstOrDefault()));
  57. RestoreMapping();
  58. var result = Convert.ToInt64(await Ado.GetScalarAsync(sql, InsertBuilder.Parameters == null ? null : InsertBuilder.Parameters.ToArray()) ?? "0");
  59. After(sql, result);
  60. return result;
  61. }
  62. public override bool ExecuteCommandIdentityIntoEntity()
  63. {
  64. var result = InsertObjs.First();
  65. var identityKeys = GetIdentityKeys();
  66. if (identityKeys.Count == 0) { return ExecuteCommand() > 0; }
  67. var idValue = ExecuteReturnBigIdentity();
  68. Check.Exception(identityKeys.Count > 1, "ExecuteCommandIdentityIntoEntity does not support multiple identity keys");
  69. var identityKey = identityKeys.First();
  70. object setValue = 0;
  71. if (idValue > int.MaxValue)
  72. setValue = idValue;
  73. else
  74. setValue = Convert.ToInt32(idValue);
  75. var propertyName = Context.EntityMaintenance.GetPropertyName<T>(identityKey);
  76. typeof(T).GetProperties().First(t => t.Name.ToUpper() == propertyName.ToUpper()).SetValue(result, setValue, null);
  77. return idValue > 0;
  78. }
  79. private string GetIdentityColumn()
  80. {
  81. var identityColumn = GetIdentityKeys().FirstOrDefault();
  82. if (identityColumn == null)
  83. {
  84. var columns = Context.DbMaintenance.GetColumnInfosByTableName(InsertBuilder.GetTableNameString);
  85. identityColumn = columns.First(it => it.IsIdentity || it.IsPrimarykey).DbColumnName;
  86. }
  87. return identityColumn;
  88. }
  89. }
  90. }