SqliteUpdateBuilder.cs 4.8 KB

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