From 62fb925df052b503444bb4cd14beaf35b23cbcaf Mon Sep 17 00:00:00 2001 From: sunkaixuan <610262374@qq.com> Date: Thu, 25 May 2017 02:28:47 +0800 Subject: [PATCH] Is Null Bug --- OrmTest/UnitTest/ExpressionTest/Where.cs | 6 +++--- SqlSugar/ExpressionsToSql/Common/ExpressionParameter.cs | 3 ++- SqlSugar/ExpressionsToSql/ExpressionContext.cs | 2 +- SqlSugar/ExpressionsToSql/ResolveItems/BaseResolve.cs | 6 +++--- .../ResolveItems/BinaryExpressionResolve.cs | 9 ++++++--- .../ResolveItems/ConstantExpressionResolve.cs | 5 ++++- 6 files changed, 19 insertions(+), 12 deletions(-) diff --git a/OrmTest/UnitTest/ExpressionTest/Where.cs b/OrmTest/UnitTest/ExpressionTest/Where.cs index c4af52a66..ee93d1311 100644 --- a/OrmTest/UnitTest/ExpressionTest/Where.cs +++ b/OrmTest/UnitTest/ExpressionTest/Where.cs @@ -28,7 +28,7 @@ namespace OrmTest.UnitTest whereSingle5(); whereSingle6(); whereSingle7(new Student() { Id = 1 }); - //whereSingle8(new Student() { Id = 1 }); + whereSingle8(new Student() { Id = 1 }); WhereMultiple1(); WhereMultiple2(); @@ -159,8 +159,8 @@ namespace OrmTest.UnitTest expContext.Resolve(exp, ResolveExpressType.WhereSingle); var value = expContext.Result.GetString(); var pars = expContext.Parameters; - base.Check(value, pars, "( [Name] is @Id0 )", new List() { - new SugarParameter("@Id0",1) + base.Check(value, pars, "( [Name] IS @Name0 )", new List() { + new SugarParameter("@Name0",null) }, "whereSingle8"); } } diff --git a/SqlSugar/ExpressionsToSql/Common/ExpressionParameter.cs b/SqlSugar/ExpressionsToSql/Common/ExpressionParameter.cs index fa5108bd8..b8175b8dc 100644 --- a/SqlSugar/ExpressionsToSql/Common/ExpressionParameter.cs +++ b/SqlSugar/ExpressionsToSql/Common/ExpressionParameter.cs @@ -14,9 +14,10 @@ namespace SqlSugar public Expression ChildExpression { get; set; } public Expression LeftExpression { get; set; } public Expression RightExpression { get; set; } - public Expression Expression { get; set; } + public Expression CurrentExpression { get; set; } public bool? IsLeft { get; set; } public int Index { get; set; } + public bool ValueIsNull { get; set; } public object CommonTempData { get; set; } public ExpressionResultAppendType AppendType { get; set; } public void IsAppendResult() diff --git a/SqlSugar/ExpressionsToSql/ExpressionContext.cs b/SqlSugar/ExpressionsToSql/ExpressionContext.cs index 41a0003ec..518d0058b 100644 --- a/SqlSugar/ExpressionsToSql/ExpressionContext.cs +++ b/SqlSugar/ExpressionsToSql/ExpressionContext.cs @@ -142,7 +142,7 @@ namespace SqlSugar { this.ResolveType = resolveType; this.Expression = expression; - BaseResolve resolve = new BaseResolve(new ExpressionParameter() { Expression = this.Expression, Context = this }); + BaseResolve resolve = new BaseResolve(new ExpressionParameter() { CurrentExpression = this.Expression, Context = this }); resolve.Start(); } public virtual string GetAsString(string asName, string fieldValue) diff --git a/SqlSugar/ExpressionsToSql/ResolveItems/BaseResolve.cs b/SqlSugar/ExpressionsToSql/ResolveItems/BaseResolve.cs index 96d8f2321..d92838fe6 100644 --- a/SqlSugar/ExpressionsToSql/ResolveItems/BaseResolve.cs +++ b/SqlSugar/ExpressionsToSql/ResolveItems/BaseResolve.cs @@ -21,7 +21,7 @@ namespace SqlSugar } public BaseResolve(ExpressionParameter parameter) { - this.Expression = parameter.Expression; + this.Expression = parameter.CurrentExpression; this.Context = parameter.Context; this.BaseParameter = parameter; } @@ -33,7 +33,7 @@ namespace SqlSugar ExpressionParameter parameter = new ExpressionParameter() { Context = this.Context, - Expression = expression, + CurrentExpression = expression, IsLeft = this.IsLeft, BaseExpression = this.ExactExpression, BaseParameter = this.BaseParameter, @@ -111,7 +111,7 @@ namespace SqlSugar if (parameter.BaseExpression is BinaryExpression || parameter.BaseExpression == null) { var otherExpression = isLeft == true ? parameter.BaseParameter.RightExpression : parameter.BaseParameter.LeftExpression; - if (parameter.Expression is MethodCallExpression) + if (parameter.CurrentExpression is MethodCallExpression) { var appendValue = value; if (this.Context.Result.Contains(ExpressionConst.Format0)) diff --git a/SqlSugar/ExpressionsToSql/ResolveItems/BinaryExpressionResolve.cs b/SqlSugar/ExpressionsToSql/ResolveItems/BinaryExpressionResolve.cs index bca93ade1..22eb9a5b8 100644 --- a/SqlSugar/ExpressionsToSql/ResolveItems/BinaryExpressionResolve.cs +++ b/SqlSugar/ExpressionsToSql/ResolveItems/BinaryExpressionResolve.cs @@ -51,9 +51,12 @@ namespace SqlSugar base.Expression = rightExpression; base.Start(); base.IsLeft = null; - base.Context.Result.Replace(ExpressionConst.Format1 + parameter.Index, operatorValue); - if (lsbs) { - + if (lsbs && parameter.ValueIsNull) + { + base.Context.Result.Replace(ExpressionConst.Format1 + parameter.Index, "IS"); + } + else { + base.Context.Result.Replace(ExpressionConst.Format1 + parameter.Index, operatorValue); } base.Context.Result.Append(ExpressionConst.Format4); if (parameter.BaseExpression is BinaryExpression && parameter.IsLeft == true) diff --git a/SqlSugar/ExpressionsToSql/ResolveItems/ConstantExpressionResolve.cs b/SqlSugar/ExpressionsToSql/ResolveItems/ConstantExpressionResolve.cs index ea1369e58..fab0278ec 100644 --- a/SqlSugar/ExpressionsToSql/ResolveItems/ConstantExpressionResolve.cs +++ b/SqlSugar/ExpressionsToSql/ResolveItems/ConstantExpressionResolve.cs @@ -31,9 +31,12 @@ namespace SqlSugar } else { + var parentIsBinary = parameter.BaseParameter.CurrentExpression is BinaryExpression; + if (value == null && parentIsBinary) { + parameter.BaseParameter.ValueIsNull = true; + } AppendValue(parameter, isLeft, value); } - break; case ResolveExpressType.FieldSingle: case ResolveExpressType.FieldMultiple: