mirror of
https://gitee.com/dotnetchina/SqlSugar.git
synced 2025-11-10 19:35:09 +08:00
Update Core
This commit is contained in:
Binary file not shown.
@@ -116,10 +116,10 @@ namespace OrmTest.UnitTest
|
||||
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` = @const3 WHERE ( `ID` = @Id1 )", new List<SugarParameter>() {
|
||||
new SugarParameter("@const3","x"),
|
||||
new SugarParameter("@Const0",18),
|
||||
new SugarParameter("@Id1",11)},
|
||||
`SchoolId` = @Const1 , `Name` = @Const0 WHERE ( `ID` = @Id2 )", new List<SugarParameter>() {
|
||||
new SugarParameter("@Const0","x"),
|
||||
new SugarParameter("@Const1",18),
|
||||
new SugarParameter("@Id2",11)},
|
||||
t10.Key,
|
||||
t10.Value,
|
||||
"Update 10 error"
|
||||
|
||||
@@ -116,10 +116,10 @@ namespace OrmTest.UnitTest
|
||||
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] = @const3 WHERE ( [ID] = @Id1 )", new List<SugarParameter>() {
|
||||
new SugarParameter("@const3","x"),
|
||||
new SugarParameter("@Const0",18),
|
||||
new SugarParameter("@Id1",11)},
|
||||
[SchoolId] = @Const1 , [Name] = @Const0 WHERE ( [ID] = @Id2 )", new List<SugarParameter>() {
|
||||
new SugarParameter("@Const1",18),
|
||||
new SugarParameter("@Const0","x"),
|
||||
new SugarParameter("@Id2",11)},
|
||||
t10.Key,
|
||||
t10.Value,
|
||||
"Update 10 error"
|
||||
|
||||
@@ -258,6 +258,20 @@ namespace SqlSugar
|
||||
}
|
||||
return In(expression, inValues.ToArray());
|
||||
}
|
||||
|
||||
public virtual ISugarQueryable<T> In<FieldType>(Expression<Func<T, object>> expression, ISugarQueryable<FieldType> childQueryExpression) {
|
||||
var sqlObj=childQueryExpression.ToSql();
|
||||
if (sqlObj.Value.IsValuable()) {
|
||||
this.QueryBuilder.Parameters.AddRange(sqlObj.Value);
|
||||
}
|
||||
var isSingle = QueryBuilder.IsSingle();
|
||||
var lamResult = QueryBuilder.GetExpressionValue(expression, isSingle ? ResolveExpressType.FieldSingle : ResolveExpressType.FieldMultiple);
|
||||
var fieldName = lamResult.GetResultString();
|
||||
var whereSql = string.Format(this.QueryBuilder.InTemplate, fieldName, sqlObj.Key);
|
||||
this.QueryBuilder.WhereInfos.Add(SqlBuilder.AppendWhereOrAnd(this.QueryBuilder.WhereInfos.IsNullOrEmpty(),whereSql));
|
||||
return this;
|
||||
}
|
||||
|
||||
public virtual ISugarQueryable<T> OrderBy(string orderFileds)
|
||||
{
|
||||
var orderByValue = QueryBuilder.OrderByValue;
|
||||
@@ -370,7 +384,9 @@ namespace SqlSugar
|
||||
public virtual bool Any(Expression<Func<T, bool>> expression)
|
||||
{
|
||||
_Where(expression);
|
||||
return Any();
|
||||
var result= Any();
|
||||
this.QueryBuilder.WhereInfos.Remove(this.QueryBuilder.WhereInfos.Last());
|
||||
return result;
|
||||
}
|
||||
public virtual bool Any()
|
||||
{
|
||||
|
||||
@@ -28,10 +28,49 @@ namespace SqlSugar
|
||||
#endregion
|
||||
|
||||
#region abstract Methods
|
||||
public abstract string GetTranslationTableName(string name);
|
||||
public abstract string GetTranslationColumnName(string entityName, string propertyName);
|
||||
public abstract string GetTranslationColumnName(string propertyName);
|
||||
public abstract string GetNoTranslationColumnName(string name);
|
||||
public virtual string GetTranslationTableName(string name)
|
||||
{
|
||||
Check.ArgumentNullException(name, string.Format(ErrorMessage.ObjNotExist, "Table Name"));
|
||||
if (name.IsContainsIn("(", ")", SqlTranslationLeft))
|
||||
{
|
||||
return name;
|
||||
}
|
||||
var context = this.Context;
|
||||
var mappingInfo = context
|
||||
.MappingTables
|
||||
.FirstOrDefault(it => it.EntityName.Equals(name, StringComparison.CurrentCultureIgnoreCase));
|
||||
name = (mappingInfo == null ? name : mappingInfo.DbTableName);
|
||||
if (name.IsContainsIn("(", ")", SqlTranslationLeft))
|
||||
{
|
||||
return name;
|
||||
}
|
||||
return SqlTranslationLeft + name + SqlTranslationRight;
|
||||
}
|
||||
public virtual string GetTranslationColumnName(string entityName, string propertyName)
|
||||
{
|
||||
Check.ArgumentNullException(entityName, string.Format(ErrorMessage.ObjNotExist, "Table Name"));
|
||||
Check.ArgumentNullException(propertyName, string.Format(ErrorMessage.ObjNotExist, "Column Name"));
|
||||
var context = this.Context;
|
||||
var mappingInfo = context
|
||||
.MappingColumns
|
||||
.FirstOrDefault(it =>
|
||||
it.EntityName.Equals(entityName, StringComparison.CurrentCultureIgnoreCase) &&
|
||||
it.PropertyName.Equals(propertyName, StringComparison.CurrentCultureIgnoreCase));
|
||||
return (mappingInfo == null ? SqlTranslationLeft + propertyName + SqlTranslationRight : SqlTranslationLeft + mappingInfo.DbColumnName + SqlTranslationRight);
|
||||
}
|
||||
|
||||
public virtual string GetTranslationColumnName(string propertyName)
|
||||
{
|
||||
if (propertyName.Contains(SqlTranslationLeft)) return propertyName;
|
||||
else
|
||||
return SqlTranslationLeft + propertyName + SqlTranslationRight;
|
||||
}
|
||||
|
||||
public virtual string GetNoTranslationColumnName(string name)
|
||||
{
|
||||
if (!name.Contains(SqlTranslationLeft)) return name;
|
||||
return name == null ? string.Empty : Regex.Match(name, @".*"+"\\"+SqlTranslationLeft+"(.*?)"+"\\"+SqlTranslationRight+"").Groups[1].Value;
|
||||
}
|
||||
#endregion
|
||||
|
||||
#region Common SqlTemplate
|
||||
@@ -44,6 +83,8 @@ namespace SqlSugar
|
||||
return " HAVING " + sqlString;
|
||||
}
|
||||
public virtual string SqlParameterKeyWord { get { return "@"; } }
|
||||
public abstract string SqlTranslationLeft { get; }
|
||||
public abstract string SqlTranslationRight { get; }
|
||||
public virtual string SqlFalse { get { return "1=2 "; } }
|
||||
public virtual string SqlDateNow { get { return "GETDATE()"; } }
|
||||
#endregion
|
||||
|
||||
@@ -56,6 +56,7 @@ namespace SqlSugar
|
||||
|
||||
public IUpdateable<T> ReSetValue(Expression<Func<T, bool>> setValueExpression)
|
||||
{
|
||||
Check.Exception(!IsSingle, "Batch operation not supported ReSetValue");
|
||||
var expResult = UpdateBuilder.GetExpressionValue(setValueExpression, ResolveExpressType.WhereSingle);
|
||||
var resultString = Regex.Match(expResult.GetResultString(), @"\((.+)\)").Groups[1].Value;
|
||||
LambdaExpression lambda = setValueExpression as LambdaExpression;
|
||||
|
||||
@@ -252,6 +252,9 @@ namespace SqlSugar
|
||||
protected MethodCallExpressionArgs GetMethodCallArgs(ExpressionParameter parameter, Expression item)
|
||||
{
|
||||
var newContext = this.Context.GetCopyContext();
|
||||
newContext.MappingColumns = this.Context.MappingColumns;
|
||||
newContext.MappingTables = this.Context.MappingTables;
|
||||
newContext.IgnoreComumnList = this.Context.IgnoreComumnList;
|
||||
newContext.Resolve(item, this.Context.IsJoin ? ResolveExpressType.WhereMultiple : ResolveExpressType.WhereSingle);
|
||||
this.Context.Index = newContext.Index;
|
||||
this.Context.ParameterIndex = newContext.ParameterIndex;
|
||||
|
||||
@@ -19,6 +19,8 @@ namespace SqlSugar
|
||||
var isValueBool = isValue && isBool && parameter.BaseExpression == null;
|
||||
var isLength = expression.Member.Name == "Length" && (expression.Expression as MemberExpression).Type == PubConst.StringType;
|
||||
var isDateValue = expression.Member.Name.IsIn(Enum.GetNames(typeof(DateType))) && (expression.Expression as MemberExpression).Type == PubConst.DateType;
|
||||
var isLogicOperator = ExpressionTool.IsLogicOperator(baseParameter.OperatorValue) || baseParameter.OperatorValue.IsNullOrEmpty();
|
||||
var isHasValue = isLogicOperator && expression.Member.Name == "HasValue" && expression.Expression != null && expression.NodeType == ExpressionType.MemberAccess;
|
||||
if (isLength)
|
||||
{
|
||||
var oldCommonTempDate = parameter.CommonTempData;
|
||||
@@ -37,7 +39,23 @@ namespace SqlSugar
|
||||
parameter.CommonTempData = oldCommonTempDate;
|
||||
return;
|
||||
}
|
||||
else if (isDateValue) {
|
||||
else if (isHasValue) {
|
||||
parameter.CommonTempData = CommonTempDataType.Result;
|
||||
this.Expression = expression.Expression;
|
||||
this.Start();
|
||||
var methodParamter =new MethodCallExpressionArgs() { IsMember = true, MemberName = parameter.CommonTempData, MemberValue = null };
|
||||
var result = this.Context.DbMehtods.HasValue(new MethodCallExpressionModel()
|
||||
{
|
||||
Args = new List<MethodCallExpressionArgs>() {
|
||||
methodParamter
|
||||
}
|
||||
});
|
||||
this.Context.Result.Append(result);
|
||||
parameter.CommonTempData = null;
|
||||
return;
|
||||
}
|
||||
else if (isDateValue)
|
||||
{
|
||||
var name = expression.Member.Name;
|
||||
var oldCommonTempDate = parameter.CommonTempData;
|
||||
parameter.CommonTempData = CommonTempDataType.Result;
|
||||
|
||||
@@ -59,9 +59,10 @@ namespace SqlSugar
|
||||
{
|
||||
base.Expression = item;
|
||||
base.Start();
|
||||
string parameterName = this.Context.SqlParameterKeyWord + "const" + this.ContentIndex;
|
||||
string parameterName = this.Context.SqlParameterKeyWord + ExpressionConst.Const+ this.Context.ParameterIndex;
|
||||
parameter.Context.Result.Append(base.Context.GetEqString(memberName, parameterName));
|
||||
this.Context.Parameters.Add(new SugarParameter(parameterName, parameter.CommonTempData));
|
||||
this.Context.ParameterIndex++;
|
||||
}
|
||||
else if (item is MethodCallExpression)
|
||||
{
|
||||
@@ -79,7 +80,6 @@ namespace SqlSugar
|
||||
base.Expression = item;
|
||||
base.Start();
|
||||
parameter.IsAppendResult();
|
||||
string parameterName = this.Context.SqlParameterKeyWord + "const" + +this.ContentIndex; ;
|
||||
parameter.Context.Result.Append(base.Context.GetEqString(memberName, parameter.CommonTempData.ObjToString()));
|
||||
base.Context.Result.CurrentParameter = null;
|
||||
}
|
||||
|
||||
@@ -16,16 +16,21 @@ namespace SqlSugar
|
||||
switch (parameter.Context.ResolveType)
|
||||
{
|
||||
case ResolveExpressType.WhereSingle:
|
||||
Check.ThrowNotSupportedException(expression.ToString());
|
||||
break;
|
||||
case ResolveExpressType.WhereMultiple:
|
||||
Check.ThrowNotSupportedException(expression.ToString());
|
||||
break;
|
||||
case ResolveExpressType.SelectSingle:
|
||||
Check.Exception(expression.Type == PubConst.DateType, "ThrowNotSupportedException {0} ",expression.ToString());
|
||||
Select(expression, parameter, true);
|
||||
break;
|
||||
case ResolveExpressType.SelectMultiple:
|
||||
Check.Exception(expression.Type == PubConst.DateType, "ThrowNotSupportedException {0} ", expression.ToString());
|
||||
Select(expression, parameter, false);
|
||||
break;
|
||||
case ResolveExpressType.FieldSingle:
|
||||
Check.ThrowNotSupportedException(expression.ToString());
|
||||
break;
|
||||
case ResolveExpressType.FieldMultiple:
|
||||
case ResolveExpressType.ArrayMultiple:
|
||||
@@ -50,7 +55,7 @@ namespace SqlSugar
|
||||
{
|
||||
string memberName = expression.Members[i].Name;
|
||||
++i;
|
||||
ResolveNewExpressions(parameter,item, memberName);
|
||||
ResolveNewExpressions(parameter, item, memberName);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
@@ -36,6 +36,7 @@ namespace SqlSugar
|
||||
ISugarQueryable<T> In<TParamter>(List<TParamter> pkValues);
|
||||
ISugarQueryable<T> In<FieldType>(string InFieldName, List<FieldType> inValues);
|
||||
ISugarQueryable<T> In<FieldType>(Expression<Func<T, object>> expression, List<FieldType> inValues);
|
||||
ISugarQueryable<T> In<FieldType>(Expression<Func<T, object>> expression, ISugarQueryable<FieldType> childQueryExpression);
|
||||
|
||||
ISugarQueryable<T> OrderBy(string orderFileds);
|
||||
ISugarQueryable<T> OrderBy(Expression<Func<T, object>> expression, OrderByType type = OrderByType.Asc);
|
||||
|
||||
@@ -19,5 +19,5 @@ using System.Runtime.InteropServices;
|
||||
|
||||
// The following GUID is for the ID of the typelib if this project is exposed to COM
|
||||
[assembly: Guid("1c022a5c-4e4d-4026-a8a3-f659b9740a1a")]
|
||||
[assembly: AssemblyVersion("4.3.2.6")]
|
||||
[assembly: AssemblyFileVersion("4.3.2.6")]
|
||||
[assembly: AssemblyVersion("4.3.2.7")]
|
||||
[assembly: AssemblyFileVersion("4.3.2.7")]
|
||||
|
||||
@@ -6,43 +6,7 @@ namespace SqlSugar
|
||||
{
|
||||
public class MySqlBuilder : SqlBuilderProvider
|
||||
{
|
||||
public override string GetTranslationTableName(string name)
|
||||
{
|
||||
Check.ArgumentNullException(name, string.Format(ErrorMessage.ObjNotExist, "Table Name"));
|
||||
var context = this.Context;
|
||||
var mappingInfo = context
|
||||
.MappingTables
|
||||
.FirstOrDefault(it => it.EntityName.Equals(name, StringComparison.CurrentCultureIgnoreCase));
|
||||
name = (mappingInfo == null ? name : mappingInfo.DbTableName);
|
||||
if (name.Contains("`"))
|
||||
return name;
|
||||
else
|
||||
return "`" + name + "`";
|
||||
}
|
||||
public override string GetTranslationColumnName(string entityName, string propertyName)
|
||||
{
|
||||
Check.ArgumentNullException(entityName, string.Format(ErrorMessage.ObjNotExist, "Table Name"));
|
||||
Check.ArgumentNullException(propertyName, string.Format(ErrorMessage.ObjNotExist, "Column Name"));
|
||||
var context = this.Context;
|
||||
var mappingInfo = context
|
||||
.MappingColumns
|
||||
.FirstOrDefault(it =>
|
||||
it.EntityName.Equals(entityName, StringComparison.CurrentCultureIgnoreCase) &&
|
||||
it.PropertyName.Equals(propertyName, StringComparison.CurrentCultureIgnoreCase));
|
||||
return (mappingInfo == null ? "`" + propertyName + "`" : "`" + mappingInfo.DbColumnName + "`");
|
||||
}
|
||||
|
||||
public override string GetTranslationColumnName(string propertyName)
|
||||
{
|
||||
if (propertyName.Contains("`")) return propertyName;
|
||||
else
|
||||
return "`" + propertyName + "`";
|
||||
}
|
||||
|
||||
public override string GetNoTranslationColumnName(string name)
|
||||
{
|
||||
if (!name.Contains("`")) return name;
|
||||
return name == null ? string.Empty : Regex.Match(name, @".*\`(.*?)\`").Groups[1].Value;
|
||||
}
|
||||
public override string SqlTranslationLeft { get { return "`"; } }
|
||||
public override string SqlTranslationRight { get { return "`"; } }
|
||||
}
|
||||
}
|
||||
|
||||
@@ -9,43 +9,7 @@ namespace SqlSugar
|
||||
{
|
||||
public class SqlServerBuilder : SqlBuilderProvider
|
||||
{
|
||||
public override string GetTranslationTableName(string name)
|
||||
{
|
||||
Check.ArgumentNullException(name, string.Format(ErrorMessage.ObjNotExist, "Table Name"));
|
||||
var context = this.Context;
|
||||
var mappingInfo = context
|
||||
.MappingTables
|
||||
.FirstOrDefault(it => it.EntityName.Equals(name, StringComparison.CurrentCultureIgnoreCase));
|
||||
name = (mappingInfo == null ? name : mappingInfo.DbTableName);
|
||||
if (name.Contains("["))
|
||||
return name;
|
||||
else
|
||||
return "[" + name + "]";
|
||||
}
|
||||
public override string GetTranslationColumnName(string entityName, string propertyName)
|
||||
{
|
||||
Check.ArgumentNullException(entityName, string.Format(ErrorMessage.ObjNotExist, "Table Name"));
|
||||
Check.ArgumentNullException(propertyName, string.Format(ErrorMessage.ObjNotExist, "Column Name"));
|
||||
var context = this.Context;
|
||||
var mappingInfo = context
|
||||
.MappingColumns
|
||||
.FirstOrDefault(it =>
|
||||
it.EntityName.Equals(entityName, StringComparison.CurrentCultureIgnoreCase) &&
|
||||
it.PropertyName.Equals(propertyName, StringComparison.CurrentCultureIgnoreCase));
|
||||
return (mappingInfo == null ? "[" + propertyName + "]" : "[" + mappingInfo.DbColumnName + "]");
|
||||
}
|
||||
|
||||
public override string GetTranslationColumnName(string propertyName)
|
||||
{
|
||||
if (propertyName.Contains("[")) return propertyName;
|
||||
else
|
||||
return "[" + propertyName + "]";
|
||||
}
|
||||
|
||||
public override string GetNoTranslationColumnName(string name)
|
||||
{
|
||||
if (!name.Contains("[")) return name;
|
||||
return name == null ? string.Empty : Regex.Match(name, @".*\[(.*?)\]").Groups[1].Value;
|
||||
}
|
||||
public override string SqlTranslationLeft { get { return "["; } }
|
||||
public override string SqlTranslationRight { get { return "]"; } }
|
||||
}
|
||||
}
|
||||
|
||||
@@ -6,41 +6,7 @@ namespace SqlSugar
|
||||
{
|
||||
public class SqliteBuilder : SqlBuilderProvider
|
||||
{
|
||||
|
||||
public override string GetTranslationTableName(string name)
|
||||
{
|
||||
if (name.Contains("`")) return name;
|
||||
Check.ArgumentNullException(name, string.Format(ErrorMessage.ObjNotExist, "Table Name"));
|
||||
var context = this.Context;
|
||||
var mappingInfo = context
|
||||
.MappingTables
|
||||
.FirstOrDefault(it => it.EntityName.Equals(name, StringComparison.CurrentCultureIgnoreCase));
|
||||
return "`" + (mappingInfo == null ? name : mappingInfo.DbTableName) + "`";
|
||||
}
|
||||
public override string GetTranslationColumnName(string entityName, string propertyName)
|
||||
{
|
||||
Check.ArgumentNullException(entityName, string.Format(ErrorMessage.ObjNotExist, "Table Name"));
|
||||
Check.ArgumentNullException(propertyName, string.Format(ErrorMessage.ObjNotExist, "Column Name"));
|
||||
var context = this.Context;
|
||||
var mappingInfo = context
|
||||
.MappingColumns
|
||||
.FirstOrDefault(it =>
|
||||
it.EntityName.Equals(entityName, StringComparison.CurrentCultureIgnoreCase) &&
|
||||
it.PropertyName.Equals(propertyName, StringComparison.CurrentCultureIgnoreCase));
|
||||
return (mappingInfo == null ? "`" + propertyName + "`" : "`" + mappingInfo.DbColumnName + "`");
|
||||
}
|
||||
|
||||
public override string GetTranslationColumnName(string propertyName)
|
||||
{
|
||||
if (propertyName.Contains("`")) return propertyName;
|
||||
else
|
||||
return "`" + propertyName + "`";
|
||||
}
|
||||
|
||||
public override string GetNoTranslationColumnName(string name)
|
||||
{
|
||||
if (!name.Contains("`")) return name;
|
||||
return name == null ? string.Empty : Regex.Match(name, @".*\`(.*?)\`").Groups[1].Value;
|
||||
}
|
||||
public override string SqlTranslationLeft { get { return "`"; } }
|
||||
public override string SqlTranslationRight { get { return "`"; } }
|
||||
}
|
||||
}
|
||||
|
||||
@@ -2,7 +2,7 @@
|
||||
<package >
|
||||
<metadata>
|
||||
<id>sqlSugarCore</id>
|
||||
<version>4.3.2.6</version>
|
||||
<version>4.3.2.7</version>
|
||||
<authors>sunkaixuan</authors>
|
||||
<owners>Landa</owners>
|
||||
<licenseUrl>http://www.apache.org/licenses/LICENSE-2.0.html</licenseUrl>
|
||||
|
||||
@@ -8,6 +8,6 @@ namespace OrmTest
|
||||
{
|
||||
public class Config
|
||||
{
|
||||
public static string ConnectionString = @"DataSource=F:\MyOpenSource\SqlSugar4.XNew\SqlSugar\Src\Asp.NetCore\SqlServerTest\src\SqliteTest\DataBase\SqlSugar4xTest.sqlite";
|
||||
public static string ConnectionString = @"DataSource=D:\MyGit\SqlSugar\Src\Asp.NetCore\SqlServerTest\src\SqliteTest\DataBase\SqlSugar4xTest.sqlite";
|
||||
}
|
||||
}
|
||||
|
||||
Binary file not shown.
@@ -116,10 +116,10 @@ namespace OrmTest.UnitTest
|
||||
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` = @const3 WHERE ( `ID` = @Id1 )", new List<SugarParameter>() {
|
||||
new SugarParameter("@const3","x"),
|
||||
new SugarParameter("@Const0",18),
|
||||
new SugarParameter("@Id1",11)},
|
||||
`SchoolId` = @Const1 , `Name` = @Const0 WHERE ( `ID` = @Id2 )", new List<SugarParameter>() {
|
||||
new SugarParameter("@Const0","x"),
|
||||
new SugarParameter("@Const1",18),
|
||||
new SugarParameter("@Id2",11)},
|
||||
t10.Key,
|
||||
t10.Value,
|
||||
"Update 10 error"
|
||||
|
||||
Reference in New Issue
Block a user