mirror of
https://gitee.com/dotnetchina/SqlSugar.git
synced 2025-07-15 14:04:44 +08:00
-
This commit is contained in:
parent
efe4233125
commit
cee667117a
@ -37,7 +37,7 @@ namespace OrmTest.UnitTest
|
|||||||
{
|
{
|
||||||
foreach (var item in pars)
|
foreach (var item in pars)
|
||||||
{
|
{
|
||||||
if (!validPars.Any(it => it.ParameterName.Equals(item.ParameterName) && it.Value.Equals(item.Value)))
|
if (!validPars.Any(it => it.ParameterName.Equals(item.ParameterName) && it.Value.ObjToString().Equals(item.Value.ObjToString())))
|
||||||
{
|
{
|
||||||
throw new Exception(errorMessage);
|
throw new Exception(errorMessage);
|
||||||
}
|
}
|
||||||
|
@ -98,8 +98,7 @@ UNION ALL
|
|||||||
new SugarParameter("@Id",1),
|
new SugarParameter("@Id",1),
|
||||||
new SugarParameter("@TestId",0),
|
new SugarParameter("@TestId",0),
|
||||||
new SugarParameter("@CreateTime", Convert.ToDateTime("2017-05-21 09:56:12.610")),
|
new SugarParameter("@CreateTime", Convert.ToDateTime("2017-05-21 09:56:12.610")),
|
||||||
new SugarParameter("@Const0", 1),
|
new SugarParameter("@Const0", 1)
|
||||||
new SugarParameter("@Name", "jack")
|
|
||||||
}, t8.Key, t8.Value, "Update t8 error"
|
}, t8.Key, t8.Value, "Update t8 error"
|
||||||
);
|
);
|
||||||
|
|
||||||
@ -116,7 +115,18 @@ UNION ALL
|
|||||||
new SugarParameter("@CreateTime", Convert.ToDateTime("2017-05-21 09:56:12.610")),
|
new SugarParameter("@CreateTime", Convert.ToDateTime("2017-05-21 09:56:12.610")),
|
||||||
new SugarParameter("@Name", "jack") },t9.Key,t9.Value,"Upate t9 error"
|
new SugarParameter("@Name", "jack") },t9.Key,t9.Value,"Upate t9 error"
|
||||||
);
|
);
|
||||||
|
updateObj.SchoolId = 18;
|
||||||
|
string name = "x";
|
||||||
|
var t10 = db.Updateable<Student>().UpdateColumns(it => new Student() { Name =name, SchoolId=updateObj.SchoolId }).Where(it=>it.Id==11).ToSql();
|
||||||
|
base.Check(@"UPDATE [Student] SET
|
||||||
|
[SchoolId] = [@Const0] , [Name] = [@constant1] WHERE ( [Id] = @Id1 )", new List<SugarParameter>() {
|
||||||
|
new SugarParameter("@constant1","x"),
|
||||||
|
new SugarParameter("@Const0",18),
|
||||||
|
new SugarParameter("@Id1",11)},
|
||||||
|
t10.Key,
|
||||||
|
t10.Value,
|
||||||
|
"Update 10 error"
|
||||||
|
);
|
||||||
}
|
}
|
||||||
|
|
||||||
public SqlSugarClient GetInstance()
|
public SqlSugarClient GetInstance()
|
||||||
|
@ -18,7 +18,8 @@ namespace SqlSugar
|
|||||||
public abstract string GetTranslationTableName(string name);
|
public abstract string GetTranslationTableName(string name);
|
||||||
public abstract string GetTranslationColumnName(string entityName, string propertyName);
|
public abstract string GetTranslationColumnName(string entityName, string propertyName);
|
||||||
public abstract string GetTranslationColumnName(string propertyName);
|
public abstract string GetTranslationColumnName(string propertyName);
|
||||||
|
public abstract string GetNoTranslationColumnName(string name);
|
||||||
|
|
||||||
public string AppendWhereOrAnd(bool isWhere, string sqlString)
|
public string AppendWhereOrAnd(bool isWhere, string sqlString)
|
||||||
{
|
{
|
||||||
return isWhere ? (" WHERE " + sqlString ):( " AND " + sqlString);
|
return isWhere ? (" WHERE " + sqlString ):( " AND " + sqlString);
|
||||||
|
@ -25,7 +25,7 @@ namespace SqlSugar
|
|||||||
public int ExecuteCommand()
|
public int ExecuteCommand()
|
||||||
{
|
{
|
||||||
PreToSql();
|
PreToSql();
|
||||||
return this.Ado.ExecuteCommand(UpdateBuilder.ToSqlString(), UpdateBuilder.Parameters==null?null:UpdateBuilder.Parameters.ToArray());
|
return this.Ado.ExecuteCommand(UpdateBuilder.ToSqlString(), UpdateBuilder.Parameters == null ? null : UpdateBuilder.Parameters.ToArray());
|
||||||
}
|
}
|
||||||
|
|
||||||
public IUpdateable<T> IgnoreColumns(Func<string, bool> ignoreColumMethod)
|
public IUpdateable<T> IgnoreColumns(Func<string, bool> ignoreColumMethod)
|
||||||
@ -44,7 +44,7 @@ namespace SqlSugar
|
|||||||
public IUpdateable<T> ReSetValue(Expression<Func<T, bool>> setValueExpression)
|
public IUpdateable<T> ReSetValue(Expression<Func<T, bool>> setValueExpression)
|
||||||
{
|
{
|
||||||
var expResult = UpdateBuilder.GetExpressionValue(setValueExpression, ResolveExpressType.WhereSingle);
|
var expResult = UpdateBuilder.GetExpressionValue(setValueExpression, ResolveExpressType.WhereSingle);
|
||||||
var resultString =Regex.Match(expResult.GetResultString(),@"\((.+)\)").Groups[1].Value;
|
var resultString = Regex.Match(expResult.GetResultString(), @"\((.+)\)").Groups[1].Value;
|
||||||
LambdaExpression lambda = setValueExpression as LambdaExpression;
|
LambdaExpression lambda = setValueExpression as LambdaExpression;
|
||||||
var expression = lambda.Body;
|
var expression = lambda.Body;
|
||||||
Check.Exception(!(expression is BinaryExpression), "Expression format error");
|
Check.Exception(!(expression is BinaryExpression), "Expression format error");
|
||||||
@ -74,11 +74,25 @@ namespace SqlSugar
|
|||||||
item.IsPrimarykey = true;
|
item.IsPrimarykey = true;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
this.UpdateBuilder.DbColumnInfoList = this.UpdateBuilder.DbColumnInfoList.Where(it => ignoreColumns.Contains(it.PropertyName)||it.IsPrimarykey==true).ToList();
|
this.UpdateBuilder.DbColumnInfoList = this.UpdateBuilder.DbColumnInfoList.Where(it => ignoreColumns.Contains(it.PropertyName) || it.IsPrimarykey == true).ToList();
|
||||||
|
return this;
|
||||||
|
}
|
||||||
|
public IUpdateable<T> UpdateColumns(Expression<Func<T, T>> columns)
|
||||||
|
{
|
||||||
|
var expResult = UpdateBuilder.GetExpressionValue(columns, ResolveExpressType.Update);
|
||||||
|
var resultArray=expResult.GetResultArray();
|
||||||
|
if (resultArray.IsValuable()) {
|
||||||
|
foreach (var item in resultArray)
|
||||||
|
{
|
||||||
|
string key = SqlBuilder.GetNoTranslationColumnName(item);
|
||||||
|
UpdateBuilder.SetValues.Add(new KeyValuePair<string, string>(SqlBuilder.GetTranslationColumnName(key), item));
|
||||||
|
}
|
||||||
|
}
|
||||||
|
this.UpdateBuilder.DbColumnInfoList = this.UpdateBuilder.DbColumnInfoList.Where(it => UpdateBuilder.SetValues.Any(v=> SqlBuilder.GetNoTranslationColumnName(v.Key) ==it.DbColumnName) || it.IsPrimarykey == true).ToList();
|
||||||
return this;
|
return this;
|
||||||
}
|
}
|
||||||
|
|
||||||
public IUpdateable<T> Where(bool isUpdateNull,bool IsOffIdentity=false)
|
public IUpdateable<T> Where(bool isUpdateNull, bool IsOffIdentity = false)
|
||||||
{
|
{
|
||||||
UpdateBuilder.IsOffIdentity = IsOffIdentity;
|
UpdateBuilder.IsOffIdentity = IsOffIdentity;
|
||||||
return this;
|
return this;
|
||||||
@ -115,7 +129,7 @@ namespace SqlSugar
|
|||||||
{
|
{
|
||||||
var columnInfo = new DbColumnInfo()
|
var columnInfo = new DbColumnInfo()
|
||||||
{
|
{
|
||||||
Value = column.PropertyInfo.GetValue(item,null),
|
Value = column.PropertyInfo.GetValue(item, null),
|
||||||
DbColumnName = GetDbColumnName(column.PropertyName),
|
DbColumnName = GetDbColumnName(column.PropertyName),
|
||||||
PropertyName = column.PropertyName,
|
PropertyName = column.PropertyName,
|
||||||
TableId = i
|
TableId = i
|
||||||
@ -174,7 +188,9 @@ namespace SqlSugar
|
|||||||
}
|
}
|
||||||
});
|
});
|
||||||
}
|
}
|
||||||
|
if (this.UpdateBuilder.Parameters.IsValuable()&&this.UpdateBuilder.SetValues.IsValuable()) {
|
||||||
|
this.UpdateBuilder.Parameters.RemoveAll(it => this.UpdateBuilder.SetValues.Any(v =>(SqlBuilder.SqlParameterKeyWord+SqlBuilder.GetNoTranslationColumnName(v.Key)) == it.ParameterName));
|
||||||
|
}
|
||||||
}
|
}
|
||||||
private string GetDbColumnName(string entityName)
|
private string GetDbColumnName(string entityName)
|
||||||
{
|
{
|
||||||
|
@ -103,6 +103,7 @@ namespace SqlSugar
|
|||||||
case ResolveExpressType.Array:
|
case ResolveExpressType.Array:
|
||||||
case ResolveExpressType.SelectSingle:
|
case ResolveExpressType.SelectSingle:
|
||||||
case ResolveExpressType.SelectMultiple:
|
case ResolveExpressType.SelectMultiple:
|
||||||
|
case ResolveExpressType.Update:
|
||||||
parameter = parameter + ",";
|
parameter = parameter + ",";
|
||||||
break;
|
break;
|
||||||
case ResolveExpressType.WhereSingle:
|
case ResolveExpressType.WhereSingle:
|
||||||
|
@ -14,7 +14,8 @@ namespace SqlSugar
|
|||||||
FieldSingle=5,
|
FieldSingle=5,
|
||||||
FieldMultiple=7,
|
FieldMultiple=7,
|
||||||
Join=8,
|
Join=8,
|
||||||
Array=9
|
Array=9,
|
||||||
|
Update=10
|
||||||
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -149,6 +149,12 @@ namespace SqlSugar
|
|||||||
{
|
{
|
||||||
return string.Format(" {0} {1} {2} ", GetTranslationTableName(fieldValue), "AS", GetTranslationColumnName(asName));
|
return string.Format(" {0} {1} {2} ", GetTranslationTableName(fieldValue), "AS", GetTranslationColumnName(asName));
|
||||||
}
|
}
|
||||||
|
|
||||||
|
public virtual string GetEqString(string asName, string fieldValue)
|
||||||
|
{
|
||||||
|
return string.Format(" {2} {1} {0} ", GetTranslationTableName(fieldValue), "=", GetTranslationColumnName(asName));
|
||||||
|
}
|
||||||
|
|
||||||
public virtual string GetAsString(string asName, string fieldValue, string fieldShortName)
|
public virtual string GetAsString(string asName, string fieldValue, string fieldShortName)
|
||||||
{
|
{
|
||||||
return string.Format(" {0} {1} {2} ", GetTranslationTableName(fieldShortName + "." + fieldValue), "AS", GetTranslationColumnName(asName));
|
return string.Format(" {0} {1} {2} ", GetTranslationTableName(fieldShortName + "." + fieldValue), "AS", GetTranslationColumnName(asName));
|
||||||
|
@ -19,6 +19,7 @@ namespace SqlSugar
|
|||||||
switch (parameter.Context.ResolveType)
|
switch (parameter.Context.ResolveType)
|
||||||
{
|
{
|
||||||
case ResolveExpressType.SelectSingle:
|
case ResolveExpressType.SelectSingle:
|
||||||
|
case ResolveExpressType.Update:
|
||||||
case ResolveExpressType.SelectMultiple:
|
case ResolveExpressType.SelectMultiple:
|
||||||
baseParameter.CommonTempData = value;
|
baseParameter.CommonTempData = value;
|
||||||
break;
|
break;
|
||||||
|
@ -18,6 +18,7 @@ namespace SqlSugar
|
|||||||
var isSetTempData = baseParameter.CommonTempData.IsValuable() && baseParameter.CommonTempData.Equals(CommonTempDataType.ChildNodeSet);
|
var isSetTempData = baseParameter.CommonTempData.IsValuable() && baseParameter.CommonTempData.Equals(CommonTempDataType.ChildNodeSet);
|
||||||
switch (parameter.Context.ResolveType)
|
switch (parameter.Context.ResolveType)
|
||||||
{
|
{
|
||||||
|
case ResolveExpressType.Update:
|
||||||
case ResolveExpressType.SelectSingle:
|
case ResolveExpressType.SelectSingle:
|
||||||
case ResolveExpressType.SelectMultiple:
|
case ResolveExpressType.SelectMultiple:
|
||||||
parameter.BaseParameter.CommonTempData = value;
|
parameter.BaseParameter.CommonTempData = value;
|
||||||
|
@ -28,11 +28,62 @@ namespace SqlSugar
|
|||||||
break;
|
break;
|
||||||
case ResolveExpressType.FieldMultiple:
|
case ResolveExpressType.FieldMultiple:
|
||||||
break;
|
break;
|
||||||
|
case ResolveExpressType.Update:
|
||||||
|
Update(expression, parameter);
|
||||||
|
break;
|
||||||
default:
|
default:
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
private void Update(MemberInitExpression expression, ExpressionParameter parameter)
|
||||||
|
{
|
||||||
|
int i = 0;
|
||||||
|
foreach (MemberBinding binding in expression.Bindings)
|
||||||
|
{
|
||||||
|
++i;
|
||||||
|
if (binding.BindingType != MemberBindingType.Assignment)
|
||||||
|
{
|
||||||
|
throw new NotSupportedException();
|
||||||
|
}
|
||||||
|
MemberAssignment memberAssignment = (MemberAssignment)binding;
|
||||||
|
var memberName = memberAssignment.Member.Name;
|
||||||
|
var item = memberAssignment.Expression;
|
||||||
|
if (item.NodeType == ExpressionType.Constant || (item is MemberExpression) && ((MemberExpression)item).Expression.NodeType == ExpressionType.Constant)
|
||||||
|
{
|
||||||
|
base.Expression = item;
|
||||||
|
base.Start();
|
||||||
|
string parameterName = this.Context.SqlParameterKeyWord + "constant" + i;
|
||||||
|
parameter.Context.Result.Append(base.Context.GetEqString(memberName, parameterName));
|
||||||
|
this.Context.Parameters.Add(new SugarParameter(parameterName, parameter.CommonTempData));
|
||||||
|
}
|
||||||
|
else if (item is MethodCallExpression)
|
||||||
|
{
|
||||||
|
base.Expression = item;
|
||||||
|
base.Start();
|
||||||
|
parameter.Context.Result.Append(base.Context.GetEqString(memberName, parameter.CommonTempData.ObjToString()));
|
||||||
|
}
|
||||||
|
else if (item is MemberExpression || item is UnaryExpression)
|
||||||
|
{
|
||||||
|
if (base.Context.Result.IsLockCurrentParameter == false)
|
||||||
|
{
|
||||||
|
base.Context.Result.CurrentParameter = parameter;
|
||||||
|
base.Context.Result.IsLockCurrentParameter = true;
|
||||||
|
parameter.IsAppendTempDate();
|
||||||
|
base.Expression = item;
|
||||||
|
base.Start();
|
||||||
|
parameter.IsAppendResult();
|
||||||
|
base.Context.Result.Append(base.Context.GetEqString(memberName, parameter.CommonTempData.ObjToString()));
|
||||||
|
base.Context.Result.CurrentParameter = null;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
else if (item is BinaryExpression)
|
||||||
|
{
|
||||||
|
Check.ThrowNotSupportedException(item.GetType().Name);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
public void Select(MemberInitExpression expression, ExpressionParameter parameter, bool isSingle)
|
public void Select(MemberInitExpression expression, ExpressionParameter parameter, bool isSingle)
|
||||||
{
|
{
|
||||||
int i = 0;
|
int i = 0;
|
||||||
|
@ -26,6 +26,7 @@ namespace SqlSugar
|
|||||||
break;
|
break;
|
||||||
case ResolveExpressType.SelectSingle:
|
case ResolveExpressType.SelectSingle:
|
||||||
case ResolveExpressType.SelectMultiple:
|
case ResolveExpressType.SelectMultiple:
|
||||||
|
case ResolveExpressType.Update:
|
||||||
SelectMethod(parameter, isLeft, name, args, model);
|
SelectMethod(parameter, isLeft, name, args, model);
|
||||||
break;
|
break;
|
||||||
case ResolveExpressType.FieldSingle:
|
case ResolveExpressType.FieldSingle:
|
||||||
|
@ -15,6 +15,7 @@ namespace SqlSugar
|
|||||||
{
|
{
|
||||||
case ResolveExpressType.SelectSingle:
|
case ResolveExpressType.SelectSingle:
|
||||||
case ResolveExpressType.SelectMultiple:
|
case ResolveExpressType.SelectMultiple:
|
||||||
|
case ResolveExpressType.Update:
|
||||||
|
|
||||||
base.Expression = expression.Right;
|
base.Expression = expression.Right;
|
||||||
base.Start();
|
base.Start();
|
||||||
|
@ -20,6 +20,7 @@ namespace SqlSugar
|
|||||||
break;
|
break;
|
||||||
case ResolveExpressType.SelectSingle:
|
case ResolveExpressType.SelectSingle:
|
||||||
case ResolveExpressType.SelectMultiple:
|
case ResolveExpressType.SelectMultiple:
|
||||||
|
case ResolveExpressType.Update:
|
||||||
parameter.BaseParameter.CommonTempData = expression.Name;
|
parameter.BaseParameter.CommonTempData = expression.Name;
|
||||||
break;
|
break;
|
||||||
case ResolveExpressType.FieldSingle:
|
case ResolveExpressType.FieldSingle:
|
||||||
|
@ -19,6 +19,7 @@ namespace SqlSugar
|
|||||||
case ResolveExpressType.FieldMultiple:
|
case ResolveExpressType.FieldMultiple:
|
||||||
case ResolveExpressType.SelectSingle:
|
case ResolveExpressType.SelectSingle:
|
||||||
case ResolveExpressType.SelectMultiple:
|
case ResolveExpressType.SelectMultiple:
|
||||||
|
case ResolveExpressType.Update:
|
||||||
base.Expression = expression.Operand;
|
base.Expression = expression.Operand;
|
||||||
if (base.Expression is BinaryExpression||parameter.BaseExpression is BinaryExpression)
|
if (base.Expression is BinaryExpression||parameter.BaseExpression is BinaryExpression)
|
||||||
{
|
{
|
||||||
|
@ -23,5 +23,6 @@ namespace SqlSugar
|
|||||||
string GetTranslationTableName(string name);
|
string GetTranslationTableName(string name);
|
||||||
string GetTranslationColumnName(string entityName, string propertyName);
|
string GetTranslationColumnName(string entityName, string propertyName);
|
||||||
string GetTranslationColumnName(string propertyName);
|
string GetTranslationColumnName(string propertyName);
|
||||||
|
string GetNoTranslationColumnName(string name);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -14,6 +14,7 @@ namespace SqlSugar
|
|||||||
IUpdateable<T> Where(bool isUpdateNull,bool IsOffIdentity = false);
|
IUpdateable<T> Where(bool isUpdateNull,bool IsOffIdentity = false);
|
||||||
IUpdateable<T> Where(Expression<Func<T, bool>> expression);
|
IUpdateable<T> Where(Expression<Func<T, bool>> expression);
|
||||||
IUpdateable<T> UpdateColumns(Expression<Func<T, object>> columns);
|
IUpdateable<T> UpdateColumns(Expression<Func<T, object>> columns);
|
||||||
|
IUpdateable<T> UpdateColumns(Expression<Func<T, T>> columns);
|
||||||
IUpdateable<T> IgnoreColumns(Expression<Func<T, object>> columns);
|
IUpdateable<T> IgnoreColumns(Expression<Func<T, object>> columns);
|
||||||
IUpdateable<T> IgnoreColumns(Func<string, bool> ignoreColumMethod);
|
IUpdateable<T> IgnoreColumns(Func<string, bool> ignoreColumMethod);
|
||||||
IUpdateable<T> ReSetValue(Expression<Func<T, bool>> setValueExpression);
|
IUpdateable<T> ReSetValue(Expression<Func<T, bool>> setValueExpression);
|
||||||
|
@ -2,6 +2,7 @@
|
|||||||
using System.Collections.Generic;
|
using System.Collections.Generic;
|
||||||
using System.Linq;
|
using System.Linq;
|
||||||
using System.Text;
|
using System.Text;
|
||||||
|
using System.Text.RegularExpressions;
|
||||||
using System.Threading.Tasks;
|
using System.Threading.Tasks;
|
||||||
|
|
||||||
namespace SqlSugar
|
namespace SqlSugar
|
||||||
@ -24,15 +25,20 @@ namespace SqlSugar
|
|||||||
var context = this.Context;
|
var context = this.Context;
|
||||||
var mappingInfo = context
|
var mappingInfo = context
|
||||||
.MappingColumns
|
.MappingColumns
|
||||||
.FirstOrDefault(it =>
|
.FirstOrDefault(it =>
|
||||||
it.EntityName.Equals(entityName, StringComparison.CurrentCultureIgnoreCase)&&
|
it.EntityName.Equals(entityName, StringComparison.CurrentCultureIgnoreCase) &&
|
||||||
it.PropertyName.Equals(propertyName, StringComparison.CurrentCultureIgnoreCase));
|
it.PropertyName.Equals(propertyName, StringComparison.CurrentCultureIgnoreCase));
|
||||||
return (mappingInfo == null ? "["+ propertyName + "]" : "["+mappingInfo.DbColumnName+"]");
|
return (mappingInfo == null ? "[" + propertyName + "]" : "[" + mappingInfo.DbColumnName + "]");
|
||||||
}
|
}
|
||||||
|
|
||||||
public override string GetTranslationColumnName(string propertyName)
|
public override string GetTranslationColumnName(string propertyName)
|
||||||
{
|
{
|
||||||
return "[" + propertyName + "]";
|
return "[" + propertyName + "]";
|
||||||
}
|
}
|
||||||
|
|
||||||
|
public override string GetNoTranslationColumnName(string name)
|
||||||
|
{
|
||||||
|
return name == null ? string.Empty : Regex.Match(name, @"\[(.*?)\]").Groups[1].Value;
|
||||||
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
Loading…
Reference in New Issue
Block a user