OscarUpdateBuilder.cs 3.4 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107
  1. using System;
  2. using System.Collections.Generic;
  3. using System.Linq;
  4. using System.Text;
  5. namespace SqlSugar
  6. {
  7. public class OscarUpdateBuilder : UpdateBuilder
  8. {
  9. public override string SqlTemplateBatch
  10. {
  11. get
  12. {
  13. return @"UPDATE {1} {2} SET {0} FROM ${{0}} ";
  14. }
  15. }
  16. public override string SqlTemplateJoin
  17. {
  18. get
  19. {
  20. return @" (VALUES
  21. {0}
  22. ) AS T ({2}) WHERE {1}
  23. ";
  24. }
  25. }
  26. public override string SqlTemplateBatchUnion
  27. {
  28. get
  29. {
  30. return ",";
  31. }
  32. }
  33. public override object FormatValue(object value)
  34. {
  35. if (value == null)
  36. {
  37. return "NULL";
  38. }
  39. else
  40. {
  41. var type = value.GetType();
  42. if (type == UtilConstants.DateType)
  43. {
  44. var date = value.ObjToDate();
  45. if (date < Convert.ToDateTime("1900-1-1"))
  46. {
  47. date = Convert.ToDateTime("1900-1-1");
  48. }
  49. return "'" + date.ToString("yyyy-MM-dd HH:mm:ss.fff") + "'";
  50. }
  51. else if (type == UtilConstants.ByteArrayType)
  52. {
  53. string bytesString = "0x" + BitConverter.ToString((byte[])value);
  54. return bytesString;
  55. }
  56. else if (type.IsEnum())
  57. {
  58. return Convert.ToInt64(value);
  59. }
  60. else if (type == UtilConstants.BoolType)
  61. {
  62. return value.ObjToBool() ? "1" : "0";
  63. }
  64. else if (type == UtilConstants.StringType || type == UtilConstants.ObjType)
  65. {
  66. return "'" + value.ToString().ToSqlFilter() + "'";
  67. }
  68. else
  69. {
  70. return "'" + value.ToString() + "'";
  71. }
  72. }
  73. }
  74. protected override string TomultipleSqlString(List<IGrouping<int, DbColumnInfo>> groupList)
  75. {
  76. StringBuilder sb = new StringBuilder();
  77. int i = 0;
  78. sb.AppendLine(string.Join("\r\n", groupList.Select(t =>
  79. {
  80. var updateTable = string.Format("UPDATE {0} SET", base.GetTableNameStringNoWith);
  81. var setValues = string.Join(",", t.Where(s => !s.IsPrimarykey).Select(m => GetOracleUpdateColums(i, m)).ToArray());
  82. var pkList = t.Where(s => s.IsPrimarykey).ToList();
  83. List<string> whereList = new List<string>();
  84. foreach (var item in pkList)
  85. {
  86. var isFirst = pkList.First() == item;
  87. var whereString = "";
  88. whereString += GetOracleUpdateColums(i, item);
  89. whereList.Add(whereString);
  90. }
  91. i++;
  92. return string.Format("{0} {1} WHERE {2};", updateTable, setValues, string.Join("AND", whereList));
  93. }).ToArray()));
  94. return sb.ToString();
  95. }
  96. private string GetOracleUpdateColums(int i, DbColumnInfo m)
  97. {
  98. return string.Format("\"{0}\"={1}", m.DbColumnName.ToUpper(), base.GetDbColumn(m,FormatValue(m.Value)));
  99. }
  100. }
  101. }