QuestDBUpdateBuilder.cs 4.3 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107
  1. using System;
  2. using System.Collections.Generic;
  3. using System.Linq;
  4. using System.Text;
  5. using System.Text.RegularExpressions;
  6. namespace SqlSugar
  7. {
  8. public class QuestDBUpdateBuilder : UpdateBuilder
  9. {
  10. public override string ReSetValueBySqlExpListType { get; set; } = "questdb";
  11. protected override string TomultipleSqlString(List<IGrouping<int, DbColumnInfo>> groupList)
  12. {
  13. StringBuilder sb = new StringBuilder();
  14. int i = 0;
  15. sb.AppendLine(string.Join("\r\n", groupList.Select(t =>
  16. {
  17. var updateTable = string.Format("UPDATE {0} SET", base.GetTableNameStringNoWith);
  18. var setValues = string.Join(",", t.Where(s => !s.IsPrimarykey).Select(m => GetOracleUpdateColums(i, m, false)).ToArray());
  19. var pkList = t.Where(s => s.IsPrimarykey).ToList();
  20. List<string> whereList = new List<string>();
  21. foreach (var item in pkList)
  22. {
  23. var isFirst = pkList.First() == item;
  24. var whereString = "";
  25. whereString += GetOracleUpdateColums(i, item, true);
  26. whereList.Add(whereString);
  27. }
  28. i++;
  29. return string.Format("{0} {1} WHERE {2};", updateTable, setValues, string.Join(" AND", whereList));
  30. }).ToArray()));
  31. return sb.ToString();
  32. }
  33. private string GetOracleUpdateColums(int i, DbColumnInfo m, bool iswhere)
  34. {
  35. return string.Format(" \"{0}\"={1}", m.DbColumnName.ToUpper(),base.GetDbColumn(m, FormatValue(i, m.DbColumnName, m.Value, iswhere)));
  36. }
  37. public object FormatValue(int i, string name, object value, bool iswhere)
  38. {
  39. if (value == null)
  40. {
  41. return "NULL";
  42. }
  43. else
  44. {
  45. var type = UtilMethods.GetUnderType(value.GetType());
  46. if (type == UtilConstants.DateType && iswhere == false)
  47. {
  48. var date = value.ObjToDate();
  49. if (date < UtilMethods.GetMinDate(this.Context.CurrentConnectionConfig))
  50. {
  51. date = UtilMethods.GetMinDate(this.Context.CurrentConnectionConfig);
  52. }
  53. if (this.Context.CurrentConnectionConfig?.MoreSettings?.DisableMillisecond == true)
  54. {
  55. return "'" + date.ToString("yyyy-MM-dd HH:mm:ss") + "'";
  56. }
  57. else
  58. {
  59. return "'" + date.ToString("yyyy-MM-dd HH:mm:ss.fff") + "'";
  60. }
  61. }
  62. else if (type == UtilConstants.DateType && iswhere)
  63. {
  64. var parameterName = this.Builder.SqlParameterKeyWord + name + i;
  65. this.Parameters.Add(new SugarParameter(parameterName, value));
  66. return parameterName;
  67. }
  68. else if (type.IsEnum())
  69. {
  70. if (this.Context.CurrentConnectionConfig.MoreSettings?.TableEnumIsString == true)
  71. {
  72. return value.ToSqlValue();
  73. }
  74. else
  75. {
  76. return Convert.ToInt64(value);
  77. }
  78. }
  79. else if (type == UtilConstants.ByteArrayType)
  80. {
  81. var parameterName = this.Builder.SqlParameterKeyWord + name + i;
  82. this.Parameters.Add(new SugarParameter(parameterName, value));
  83. return parameterName;
  84. }
  85. else if (value is double||value is int || value is long || value is short || value is short || value is byte)
  86. {
  87. return value;
  88. }
  89. else if (value is bool)
  90. {
  91. return value.ObjToString().ToLower();
  92. }
  93. else if (type == UtilConstants.StringType || type == UtilConstants.ObjType)
  94. {
  95. return "'" + value.ToString().ToSqlFilter() + "'";
  96. }
  97. else
  98. {
  99. return "'" + value.ToString() + "'";
  100. }
  101. }
  102. }
  103. }
  104. }