SqlBuilderProvider.cs 7.4 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191
  1. using System;
  2. using System.Collections.Generic;
  3. using System.Data;
  4. using System.Linq;
  5. using System.Text;
  6. using System.Text.RegularExpressions;
  7. using System.Threading.Tasks;
  8. namespace SqlSugar
  9. {
  10. public abstract partial class SqlBuilderProvider : SqlBuilderAccessory, ISqlBuilder
  11. {
  12. #region Properties
  13. public SqlSugarProvider Context { get; set; }
  14. public CommandType CommandType { get; set; }
  15. public DeleteBuilder DeleteBuilder { get; set; }
  16. public InsertBuilder InsertBuilder { get; set; }
  17. public QueryBuilder QueryBuilder { get; set; }
  18. public UpdateBuilder UpdateBuilder { get; set; }
  19. public SqlQueryBuilder SqlQueryBuilder
  20. {
  21. get
  22. {
  23. base._SqlQueryBuilder = UtilMethods.IsNullReturnNew(base._SqlQueryBuilder);
  24. return base._SqlQueryBuilder;
  25. }
  26. set { base._SqlQueryBuilder = value; }
  27. }
  28. #endregion
  29. #region abstract Methods
  30. public virtual void ChangeJsonType(SugarParameter paramter)
  31. {
  32. }
  33. public virtual string GetTranslationTableName(string name)
  34. {
  35. Check.ArgumentNullException(name, string.Format(ErrorMessage.ObjNotExist, "Table Name"));
  36. if (!name.Contains("<>f__AnonymousType") &&name.IsContainsIn("(", ")", SqlTranslationLeft)&&name!= "Dictionary`2")
  37. {
  38. var tableInfo = this.Context
  39. .MappingTables?
  40. .FirstOrDefault(it => it.EntityName.Equals(name, StringComparison.CurrentCultureIgnoreCase));
  41. if (tableInfo != null)
  42. {
  43. return GetTranslationColumnName(tableInfo.DbTableName);
  44. }
  45. return name;
  46. }
  47. if (Context.MappingTables == null)
  48. {
  49. return name;
  50. }
  51. var context = this.Context;
  52. var mappingInfo = context
  53. .MappingTables
  54. .FirstOrDefault(it => it.EntityName.Equals(name, StringComparison.CurrentCultureIgnoreCase));
  55. name = (mappingInfo == null ? name : mappingInfo.DbTableName);
  56. if (name.IsContainsIn("(", ")", SqlTranslationLeft))
  57. {
  58. return name;
  59. }
  60. if (name.Contains("."))
  61. {
  62. return string.Join(".", name.Split('.').Select(it => SqlTranslationLeft + it + SqlTranslationRight));
  63. }
  64. else
  65. {
  66. return SqlTranslationLeft + name + SqlTranslationRight;
  67. }
  68. }
  69. public virtual string GetTranslationColumnName(string entityName, string propertyName)
  70. {
  71. Check.ArgumentNullException(entityName, string.Format(ErrorMessage.ObjNotExist, "Table Name"));
  72. Check.ArgumentNullException(propertyName, string.Format(ErrorMessage.ObjNotExist, "Column Name"));
  73. var context = this.Context;
  74. var mappingInfo = context
  75. .MappingColumns
  76. .FirstOrDefault(it =>
  77. it.EntityName.Equals(entityName, StringComparison.CurrentCultureIgnoreCase) &&
  78. it.PropertyName.Equals(propertyName, StringComparison.CurrentCultureIgnoreCase));
  79. return (mappingInfo == null ? SqlTranslationLeft + propertyName + SqlTranslationRight : SqlTranslationLeft + mappingInfo.DbColumnName + SqlTranslationRight);
  80. }
  81. public virtual string GetTranslationColumnName(string propertyName)
  82. {
  83. if (propertyName.Contains(SqlTranslationLeft)) return propertyName;
  84. if (propertyName.Contains("."))
  85. {
  86. return string.Join(".", propertyName.Split('.').Select(it => SqlTranslationLeft + it + SqlTranslationRight));
  87. }
  88. else
  89. return SqlTranslationLeft + propertyName + SqlTranslationRight;
  90. }
  91. public virtual string GetNoTranslationColumnName(string name)
  92. {
  93. if (name.Contains("="))
  94. {
  95. name=name.Split('=').First();
  96. }
  97. if (!name.Contains(SqlTranslationLeft)) return name;
  98. if (!name.Contains(".")&& name.StartsWith(SqlTranslationLeft) && name.EndsWith(SqlTranslationRight))
  99. {
  100. var result= name.TrimStart(Convert.ToChar(SqlTranslationLeft)).TrimEnd(Convert.ToChar(SqlTranslationRight));
  101. return result;
  102. }
  103. return name == null ? string.Empty : Regex.Match(name, @".*" + "\\" + SqlTranslationLeft + "(.*?)" + "\\" + SqlTranslationRight + "").Groups[1].Value;
  104. }
  105. public virtual string GetPackTable(string sql, string shortName)
  106. {
  107. return UtilMethods.GetPackTable(sql, shortName);
  108. }
  109. public virtual string GetDefaultShortName()
  110. {
  111. return "t";
  112. }
  113. public string GetWhere(string fieldName,string conditionalType,int? parameterIndex=null)
  114. {
  115. return string.Format(" {0} {1} {2}{3} ",this.GetTranslationColumnName(fieldName),conditionalType,this.SqlParameterKeyWord,fieldName.Replace(".","_")+ parameterIndex);
  116. }
  117. public virtual string GetUnionAllSql(List<string> sqlList)
  118. {
  119. return string.Join(" UNION ALL \r\n", sqlList);
  120. }
  121. public virtual string GetUnionSql(List<string> sqlList)
  122. {
  123. return string.Join(" UNION \r\n", sqlList);
  124. }
  125. public virtual void RepairReplicationParameters(ref string appendSql, SugarParameter[] parameters, int addIndex)
  126. {
  127. UtilMethods.RepairReplicationParameters(ref appendSql, parameters, addIndex);
  128. }
  129. public virtual string GetUnionFomatSql(string sql)
  130. {
  131. return sql;
  132. }
  133. public virtual Type GetNullType(string tableName,string columnName)
  134. {
  135. return null;
  136. }
  137. public virtual string RemoveParentheses(string sql)
  138. {
  139. return sql;
  140. }
  141. private static object GetFieldValue(ConditionalModel item)
  142. {
  143. if (item.FieldValueConvertFunc != null)
  144. {
  145. return item.FieldValueConvertFunc(item.FieldValue);
  146. }
  147. else if (item.CSharpTypeName.HasValue())
  148. {
  149. return UtilMethods.ConvertDataByTypeName(item.CSharpTypeName,item.FieldValue);
  150. }
  151. else
  152. {
  153. return item.FieldValue;
  154. }
  155. }
  156. public virtual void FormatSaveQueueSql(StringBuilder sqlBuilder)
  157. {
  158. }
  159. public virtual string RemoveN(string sql)
  160. {
  161. return sql;
  162. }
  163. #endregion
  164. #region Common SqlTemplate
  165. public string AppendWhereOrAnd(bool isWhere, string sqlString)
  166. {
  167. return isWhere ? (" WHERE " + sqlString) : (" AND " + sqlString);
  168. }
  169. public string AppendHaving(string sqlString)
  170. {
  171. return " HAVING " + sqlString;
  172. }
  173. public virtual string SqlParameterKeyWord { get { return "@"; } }
  174. public abstract string SqlTranslationLeft { get; }
  175. public abstract string SqlTranslationRight { get; }
  176. public virtual string SqlFalse { get { return "1=2 "; } }
  177. public virtual string SqlDateNow { get { return "GETDATE()"; } }
  178. public virtual string FullSqlDateNow { get { return "SELECT GETDATE()"; } }
  179. public virtual string SqlSelectAll { get { return "*"; } }
  180. #endregion
  181. }
  182. }