mirror of
https://gitee.com/dotnetchina/SqlSugar.git
synced 2025-05-03 12:18:00 +08:00
Synchronization code
This commit is contained in:
parent
505ec864b6
commit
ce46021b26
@ -0,0 +1,14 @@
|
||||
using System;
|
||||
using System.Collections.Generic;
|
||||
using System.Linq;
|
||||
using System.Text;
|
||||
using System.Threading.Tasks;
|
||||
|
||||
namespace SqlSugar
|
||||
{
|
||||
internal class ReSetValueBySqlExpListModel
|
||||
{
|
||||
public string DbColumnName { get; set; }
|
||||
public string Sql { get; set; }
|
||||
}
|
||||
}
|
@ -36,7 +36,8 @@ namespace SqlSugar
|
||||
public List<string> UpdateColumns { get; set; }
|
||||
public List<JoinQueryInfo> JoinInfos { get; set; }
|
||||
public string ShortName { get; set; }
|
||||
|
||||
internal Dictionary<string, ReSetValueBySqlExpListModel> ReSetValueBySqlExpList { get; set; }
|
||||
public virtual string ReSetValueBySqlExpListType { get; set; }
|
||||
public virtual string SqlTemplate
|
||||
{
|
||||
get
|
||||
@ -423,11 +424,15 @@ namespace SqlSugar
|
||||
{
|
||||
return LambdaExpressions.DbMehtods.GetDate();
|
||||
}
|
||||
else if (IsListSetExp(columnInfo)|| IsSingleSetExp(columnInfo))
|
||||
{
|
||||
return this.ReSetValueBySqlExpList[columnInfo.PropertyName].Sql;
|
||||
}
|
||||
else if (columnInfo.UpdateSql.HasValue())
|
||||
{
|
||||
return columnInfo.UpdateSql;
|
||||
}
|
||||
else if (columnInfo.SqlParameterDbType is Type&& (Type)columnInfo.SqlParameterDbType == UtilConstants.SqlConvertType)
|
||||
else if (columnInfo.SqlParameterDbType is Type && (Type)columnInfo.SqlParameterDbType == UtilConstants.SqlConvertType)
|
||||
{
|
||||
var type = columnInfo.SqlParameterDbType as Type;
|
||||
var ParameterConverter = type.GetMethod("ParameterConverter").MakeGenericMethod(typeof(string));
|
||||
@ -440,13 +445,13 @@ namespace SqlSugar
|
||||
var type = columnInfo.SqlParameterDbType as Type;
|
||||
var ParameterConverter = type.GetMethod("ParameterConverter").MakeGenericMethod(columnInfo.PropertyType);
|
||||
var obj = Activator.CreateInstance(type);
|
||||
var p = ParameterConverter.Invoke(obj,new object[] { columnInfo.Value, GetDbColumnIndex }) as SugarParameter;
|
||||
var p = ParameterConverter.Invoke(obj, new object[] { columnInfo.Value, GetDbColumnIndex }) as SugarParameter;
|
||||
GetDbColumnIndex++;
|
||||
//this.Parameters.RemoveAll(it => it.ParameterName == it.ParameterName);
|
||||
this.Parameters.Add(p);
|
||||
return p.ParameterName;
|
||||
}
|
||||
else if (columnInfo.PropertyType!=null&&columnInfo.PropertyType.Name == "TimeOnly" && name != null && !name.ObjToString().StartsWith(Builder.SqlParameterKeyWord))
|
||||
else if (columnInfo.PropertyType != null && columnInfo.PropertyType.Name == "TimeOnly" && name != null && !name.ObjToString().StartsWith(Builder.SqlParameterKeyWord))
|
||||
{
|
||||
var timeSpan = UtilMethods.TimeOnlyToTimeSpan(columnInfo.Value);
|
||||
var pname = Builder.SqlParameterKeyWord + columnInfo.DbColumnName + "_ts" + GetDbColumnIndex;
|
||||
@ -481,6 +486,17 @@ namespace SqlSugar
|
||||
return name + "";
|
||||
}
|
||||
}
|
||||
private bool IsSingleSetExp(DbColumnInfo columnInfo)
|
||||
{
|
||||
return this.ReSetValueBySqlExpList != null &&
|
||||
this.ReSetValueBySqlExpList.ContainsKey(columnInfo.PropertyName) &&
|
||||
this.IsListUpdate == null&&
|
||||
DbColumnInfoList.GroupBy(it => it.TableId).Count()==1;
|
||||
}
|
||||
private bool IsListSetExp(DbColumnInfo columnInfo)
|
||||
{
|
||||
return this.ReSetValueBySqlExpListType != null && this.ReSetValueBySqlExpList != null && this.ReSetValueBySqlExpList.ContainsKey(columnInfo.PropertyName);
|
||||
}
|
||||
//public virtual string GetDbColumn(DbColumnInfo columnInfo, string name)
|
||||
//{
|
||||
// if (columnInfo.UpdateServerTime)
|
||||
|
@ -359,7 +359,37 @@ namespace SqlSugar
|
||||
this.UpdateBuilder.DbColumnInfoList = this.UpdateBuilder.DbColumnInfoList.Where(it => oldColumns.Contains(it.PropertyName)).ToList();
|
||||
}
|
||||
return this;
|
||||
}
|
||||
}
|
||||
|
||||
public IUpdateable<T> PublicSetColumns(Expression<Func<T, object>> filedNameExpression, Expression<Func<T, object>> ValueExpExpression)
|
||||
{
|
||||
if (UpdateParameterIsNull == true)
|
||||
{
|
||||
return SetColumns(filedNameExpression, ValueExpExpression);
|
||||
}
|
||||
else
|
||||
{
|
||||
var name = ExpressionTool.GetMemberName(filedNameExpression);
|
||||
if (name == null)
|
||||
{
|
||||
Check.ExceptionEasy(filedNameExpression + " format error ", filedNameExpression + "参数格式错误");
|
||||
}
|
||||
var value = this.UpdateBuilder.GetExpressionValue(ValueExpExpression, ResolveExpressType.WhereSingle).GetResultString();
|
||||
if (this.UpdateBuilder.ReSetValueBySqlExpList == null)
|
||||
{
|
||||
this.UpdateBuilder.ReSetValueBySqlExpList = new Dictionary<string, ReSetValueBySqlExpListModel>();
|
||||
}
|
||||
if (!this.UpdateBuilder.ReSetValueBySqlExpList.ContainsKey(name))
|
||||
{
|
||||
this.UpdateBuilder.ReSetValueBySqlExpList.Add(name, new ReSetValueBySqlExpListModel()
|
||||
{
|
||||
Sql = value,
|
||||
DbColumnName =this.SqlBuilder.GetTranslationColumnName(this.EntityInfo.Columns.First(it => it.PropertyName == name).DbColumnName)
|
||||
}); ;
|
||||
}
|
||||
}
|
||||
return this;
|
||||
}
|
||||
#endregion
|
||||
|
||||
#region Update by object
|
||||
|
@ -100,6 +100,7 @@ namespace SqlSugar
|
||||
IUpdateable<T> EnableDiffLogEvent(object businessData = null);
|
||||
IUpdateable<T> EnableDiffLogEventIF(bool isEnableDiffLog,object businessData = null);
|
||||
IUpdateable<T> ReSetValue(Action<T> setValueExpression);
|
||||
IUpdateable<T> PublicSetColumns (Expression<Func<T,object>> filedNameExpression, Expression<Func<T, object>> ValueExpExpression);
|
||||
IUpdateable<T> RemoveDataCache();
|
||||
IUpdateable<T> RemoveDataCache(string likeString);
|
||||
IUpdateable<T> CallEntityMethod(Expression<Action<T>> method);
|
||||
|
@ -7,6 +7,7 @@ namespace SqlSugar
|
||||
{
|
||||
public class DmUpdateBuilder : UpdateBuilder
|
||||
{
|
||||
public override string ReSetValueBySqlExpListType { get; set; } = "dm";
|
||||
protected override string GetJoinUpdate(string columnsString, ref string whereString)
|
||||
{
|
||||
var joinString = $" {Builder.GetTranslationColumnName(this.TableName)} {Builder.GetTranslationColumnName(this.ShortName)} ";
|
||||
|
@ -178,9 +178,25 @@ namespace SqlSugar
|
||||
batchUpdateSql.Replace("${0}", format);
|
||||
batchUpdateSql.Append(";");
|
||||
}
|
||||
batchUpdateSql = GetBatchUpdateSql(batchUpdateSql);
|
||||
return batchUpdateSql.ToString();
|
||||
}
|
||||
|
||||
private StringBuilder GetBatchUpdateSql(StringBuilder batchUpdateSql)
|
||||
{
|
||||
if (ReSetValueBySqlExpListType == null && ReSetValueBySqlExpList != null)
|
||||
{
|
||||
var result = batchUpdateSql.ToString();
|
||||
foreach (var item in ReSetValueBySqlExpList)
|
||||
{
|
||||
var dbColumnName = item.Value.DbColumnName;
|
||||
result = result.Replace($"{dbColumnName}=T.{dbColumnName}", $"{dbColumnName}={item.Value.Sql.Replace(dbColumnName, $"{Builder.GetTranslationColumnName(this.TableName)}.{dbColumnName}")}");
|
||||
batchUpdateSql = new StringBuilder(result);
|
||||
}
|
||||
}
|
||||
|
||||
return batchUpdateSql;
|
||||
}
|
||||
protected override string GetJoinUpdate(string columnsString, ref string whereString)
|
||||
{
|
||||
var formString = $" {Builder.GetTranslationColumnName(this.TableName)} AS {Builder.GetTranslationColumnName(this.ShortName)} ";
|
||||
|
@ -97,8 +97,25 @@ namespace SqlSugar
|
||||
batchUpdateSql.Replace("${0}",format);
|
||||
batchUpdateSql.Append(";");
|
||||
}
|
||||
batchUpdateSql = GetBatchUpdateSql(batchUpdateSql);
|
||||
return batchUpdateSql.ToString();
|
||||
}
|
||||
|
||||
private StringBuilder GetBatchUpdateSql(StringBuilder batchUpdateSql)
|
||||
{
|
||||
if (ReSetValueBySqlExpListType == null && ReSetValueBySqlExpList != null)
|
||||
{
|
||||
var result = batchUpdateSql.ToString();
|
||||
foreach (var item in ReSetValueBySqlExpList)
|
||||
{
|
||||
var dbColumnName = item.Value.DbColumnName;
|
||||
result = result.Replace($"T.{dbColumnName}", item.Value.Sql.Replace(dbColumnName, "S." + dbColumnName));
|
||||
batchUpdateSql = new StringBuilder(result);
|
||||
}
|
||||
}
|
||||
|
||||
return batchUpdateSql;
|
||||
}
|
||||
int i = 0;
|
||||
public object FormatValue(object value,string name)
|
||||
{
|
||||
|
@ -8,6 +8,7 @@ namespace SqlSugar
|
||||
{
|
||||
public class OracleUpdateBuilder : UpdateBuilder
|
||||
{
|
||||
public override string ReSetValueBySqlExpListType { get; set; } = "oracle";
|
||||
protected override string TomultipleSqlString(List<IGrouping<int, DbColumnInfo>> groupList)
|
||||
{
|
||||
if (groupList.Count == 0)
|
||||
|
@ -198,8 +198,25 @@ namespace SqlSugar
|
||||
batchUpdateSql.Replace("${0}", format);
|
||||
batchUpdateSql.Append(";");
|
||||
}
|
||||
batchUpdateSql = GetBatchUpdateSql(batchUpdateSql);
|
||||
return batchUpdateSql.ToString();
|
||||
}
|
||||
|
||||
private StringBuilder GetBatchUpdateSql(StringBuilder batchUpdateSql)
|
||||
{
|
||||
if (ReSetValueBySqlExpListType == null && ReSetValueBySqlExpList != null)
|
||||
{
|
||||
var result = batchUpdateSql.ToString();
|
||||
foreach (var item in ReSetValueBySqlExpList)
|
||||
{
|
||||
var dbColumnName = item.Value.DbColumnName;
|
||||
result = result.Replace($"{dbColumnName}=T.{dbColumnName}", $"{dbColumnName}={item.Value.Sql.Replace(dbColumnName,$"{Builder.GetTranslationColumnName( this.TableName)}.{dbColumnName}")}");
|
||||
batchUpdateSql = new StringBuilder(result);
|
||||
}
|
||||
}
|
||||
|
||||
return batchUpdateSql;
|
||||
}
|
||||
protected override string GetJoinUpdate(string columnsString, ref string whereString)
|
||||
{
|
||||
var formString = $" {Builder.GetTranslationColumnName(this.TableName)} AS {Builder.GetTranslationColumnName(this.ShortName)} ";
|
||||
|
@ -8,6 +8,7 @@ namespace SqlSugar
|
||||
{
|
||||
public class QuestDBUpdateBuilder : UpdateBuilder
|
||||
{
|
||||
public override string ReSetValueBySqlExpListType { get; set; } = "questdb";
|
||||
protected override string TomultipleSqlString(List<IGrouping<int, DbColumnInfo>> groupList)
|
||||
{
|
||||
StringBuilder sb = new StringBuilder();
|
||||
|
@ -42,7 +42,7 @@ namespace SqlSugar
|
||||
{
|
||||
updateTable.Append(SqlTemplateBatchUnion);
|
||||
}
|
||||
updateTable.Append("\r\n SELECT " + string.Join(",", columns.Select(it => string.Format(base.SqlTemplateBatchSelect,base.GetDbColumn(it,GetValue(it)), Builder.GetTranslationColumnName(it.DbColumnName)))));
|
||||
updateTable.Append("\r\n SELECT " + string.Join(",", columns.Select(it => string.Format(base.SqlTemplateBatchSelect, base.GetDbColumn(it, GetValue(it)), Builder.GetTranslationColumnName(it.DbColumnName)))));
|
||||
++i;
|
||||
}
|
||||
pageIndex++;
|
||||
@ -68,9 +68,26 @@ namespace SqlSugar
|
||||
}
|
||||
batchUpdateSql.AppendFormat(SqlTemplateJoin, updateTable, whereString);
|
||||
}
|
||||
batchUpdateSql = GetBatchUpdateSql(batchUpdateSql);
|
||||
return batchUpdateSql.ToString();
|
||||
}
|
||||
|
||||
private StringBuilder GetBatchUpdateSql(StringBuilder batchUpdateSql)
|
||||
{
|
||||
if (ReSetValueBySqlExpListType == null && ReSetValueBySqlExpList != null)
|
||||
{
|
||||
var result = batchUpdateSql.ToString();
|
||||
foreach (var item in ReSetValueBySqlExpList)
|
||||
{
|
||||
var dbColumnName = item.Value.DbColumnName;
|
||||
result = result.Replace($"T.{dbColumnName}", item.Value.Sql.Replace(dbColumnName,"S."+ dbColumnName));
|
||||
batchUpdateSql = new StringBuilder(result);
|
||||
}
|
||||
}
|
||||
|
||||
return batchUpdateSql;
|
||||
}
|
||||
|
||||
private object GetValue(DbColumnInfo it)
|
||||
{
|
||||
if (it.SqlParameterDbType!=null&&it.SqlParameterDbType.Equals(System.Data.DbType.AnsiString))
|
||||
|
@ -7,6 +7,7 @@ namespace SqlSugar
|
||||
{
|
||||
public class SqliteUpdateBuilder : UpdateBuilder
|
||||
{
|
||||
public override string ReSetValueBySqlExpListType { get; set; }="sqlite";
|
||||
protected override string TomultipleSqlString(List<IGrouping<int, DbColumnInfo>> groupList)
|
||||
{
|
||||
StringBuilder sb = new StringBuilder();
|
||||
|
Loading…
Reference in New Issue
Block a user