PostgreSQLInserttable.cs 4.3 KB

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