diff --git a/.vs/SqlSugar/v14/.suo b/.vs/SqlSugar/v14/.suo index 3f12d94c7..63a493758 100644 Binary files a/.vs/SqlSugar/v14/.suo and b/.vs/SqlSugar/v14/.suo differ diff --git a/OrmTest/ExpressionTest/ExpTestBase.cs b/OrmTest/ExpressionTest/ExpTestBase.cs new file mode 100644 index 000000000..84fda26de --- /dev/null +++ b/OrmTest/ExpressionTest/ExpTestBase.cs @@ -0,0 +1,49 @@ +using System; +using System.Collections.Generic; +using SqlSugar; +using System.Linq; +namespace OrmTest.ExpressionTest +{ + public class ExpTestBase + { + public int Count { get; set; } + private DateTime BeginTime { get; set; } + private DateTime EndTime { get; set; } + + public void Begin() + { + this.BeginTime = DateTime.Now; + } + + public void End(string title) + { + this.EndTime = DateTime.Now; + Console.WriteLine(title + " \r\nCount: " + this.Count + "\r\nTime: " + (this.EndTime - this.BeginTime).TotalSeconds + " Seconds \r\n"); + } + + internal void CheckSelect(string selectorValue, List pars, string validValue, List validPars, string errorMessage) + { + if (selectorValue.Trim() != validValue.Trim()) + { + throw new Exception(errorMessage); + } + if (pars != null && pars.Count > 0) + { + if (pars.Count != validPars.Count) + { + throw new Exception(errorMessage); + } + else + { + foreach (var item in pars) + { + if (!validPars.Any(it => it.ParameterName.Equals(item.ParameterName) && it.Value.Equals(item.Value))) + { + throw new Exception(errorMessage); + } + } + } + } + } + } +} \ No newline at end of file diff --git a/OrmTest/ExpressionTest/Select.cs b/OrmTest/ExpressionTest/Select.cs index 84aad5e7d..e67c1065c 100644 --- a/OrmTest/ExpressionTest/Select.cs +++ b/OrmTest/ExpressionTest/Select.cs @@ -9,61 +9,91 @@ using System.Threading.Tasks; namespace OrmTest.ExpressionTest { - public class Select + public class Select : ExpTestBase { - internal static void Init() + private Select() { } + public Select(int eachCount) { - DateTime b = DateTime.Now; - int count = 1; - for (int i = 0; i < count; i++) + this.Count = eachCount; + } + internal void Init() + { + base.Begin(); + for (int i = 0; i < base.Count; i++) { single(); Multiple(); singleDynamic(); MultipleDynamic(); } - DateTime e = DateTime.Now; - Console.WriteLine("Count: " + count + "\r\nTime: " + (e - b).TotalSeconds + " Seconds "); + base.End("Select Test"); } - private static void Multiple() + private void Multiple() { - Expression> exp = (it, school) => new Student() { Name = "a", Id = it.Id, SchoolId = school.Id,TestId=it.Id+1 }; + Expression> exp = (it, school) => new Student() { Name = "a", Id = it.Id, SchoolId = school.Id, TestId = it.Id + 1 }; ExpressionContext expContext = new ExpressionContext(exp, ResolveExpressType.SelectMultiple); expContext.Resolve(); var selectorValue = expContext.Result.GetString(); var pars = expContext.Parameters; - if (selectorValue.Trim() != " @constant1 AS Name , it.Id AS Id , school.Id AS SchoolId ".Trim()) - { - throw new Exception("Multiple Error"); - } + base.CheckSelect( + selectorValue, + pars, + @" @constant1 AS Name , it.Id AS Id , school.Id AS SchoolId , ( it.Id + 1 ) AS TestId ", + new List(){ + new SugarParameter("@constant1","a")}, + "Select.Multiple Error"); } - private static void MultipleDynamic() + + private void MultipleDynamic() { Expression> exp = (it, school) => new { Name = "a", Id = it.Id / 2, SchoolId = school.Id }; ExpressionContext expContext = new ExpressionContext(exp, ResolveExpressType.SelectMultiple); expContext.Resolve(); var selectorValue = expContext.Result.GetString(); var pars = expContext.Parameters; + base.CheckSelect( + selectorValue, + pars, + @" @constant1 AS Name , ( it.Id / 2 ) AS Id , school.Id AS SchoolId ", + new List(){ + new SugarParameter("@constant1","a")}, + "Select.MultipleDynamic Error"); } - private static void single() + private void single() { int p = 1; - Expression> exp = it => new Student() { Name = "a", Id = it.Id, SchoolId = p }; + Expression> exp = it => new Student() { Name = "a", Id = it.Id, SchoolId = p,TestId=it.Id+1 }; ExpressionContext expContext = new ExpressionContext(exp, ResolveExpressType.SelectSingle); expContext.Resolve(); var selectorValue = expContext.Result.GetString(); var pars = expContext.Parameters; + base.CheckSelect( + selectorValue, + pars, + @" @constant1 AS Name , Id AS Id , @constant3 AS SchoolId , ( Id + 1 ) AS TestId ", + new List(){ + new SugarParameter("@constant1","a"), + new SugarParameter("@constant3",1)}, + "Select.single Error"); } - private static void singleDynamic() + private void singleDynamic() { string a = "a"; - Expression> exp = it => new { x = it.Id, shoolid = 1, name = a }; + Expression> exp = it => new { x = it.Id, shoolid = 1, name = a,p=it.Id*1 }; ExpressionContext expContext = new ExpressionContext(exp, ResolveExpressType.SelectSingle); expContext.Resolve(); var selectorValue = expContext.Result.GetString(); var pars = expContext.Parameters; + base.CheckSelect( + selectorValue, + pars, + @" Id AS x , @constant2 AS shoolid , @constant3 AS name , ( Id * 1 ) AS p ", + new List(){ + new SugarParameter("@constant2",1), + new SugarParameter("@constant3","a")}, + "Select.single Error"); } } } diff --git a/OrmTest/OrmTest.csproj b/OrmTest/OrmTest.csproj index 687c92b34..c286d65e0 100644 --- a/OrmTest/OrmTest.csproj +++ b/OrmTest/OrmTest.csproj @@ -43,6 +43,7 @@ + diff --git a/OrmTest/Program.cs b/OrmTest/Program.cs index 51954f9ca..4dda4aa50 100644 --- a/OrmTest/Program.cs +++ b/OrmTest/Program.cs @@ -14,61 +14,56 @@ namespace OrmTest class Program { - public static string GetName() { - return "a"; - } - public string x = "2"; - public static string id { get; set;} static void Main(string[] args) { - - - OrmTest.ExpressionTest.Select.Init(); + int eachCount = 1; + new OrmTest.ExpressionTest.Select(eachCount).Init(); OrmTest.ExpressionTest.Field.Init(); - Program.id = "xx"; - string x = "1"; - Expression> exp = it => new Program() { x=it.Name }; - // Expression> exp = it => it.Name; - ExpressionContext expContext = new ExpressionContext(exp, ResolveExpressType.WhereSingle); - // var x = expContext.GetFiledName(); - // var xx = expContext.ToResultString(); + // Program.id = "xx"; + // string x = "1"; + // Expression> exp = it => new Program() { x=it.Name }; + //// Expression> exp = it => it.Name; + // ExpressionContext expContext = new ExpressionContext(exp, ResolveExpressType.WhereSingle); + // var x = expContext.GetFiledName(); + // var xx = expContext.ToResultString(); - var b = DateTime.Now; - var config = new AttrbuitesCofnig() - { - DbType = DbType.SqlServer, - ConnectionString = "server=.;uid=sa;pwd=sasa;database=SqlSugar4XTest", - EntityNamespace = "OrmTest.Models", - IsAutoCloseConnection = false - }; - SqlSugarClient db = new SqlSugarClient(config); - for (int i = 0; i < 1; i++) - { - db.Database.IsEnableLogEvent = true; - db.Database.LogEventStarting = (sql, par) => - { - Console.WriteLine(sql + " " + par); - }; + // var b = DateTime.Now; + // var config = new AttrbuitesCofnig() + // { + // DbType = DbType.SqlServer, + // ConnectionString = "server=.;uid=sa;pwd=sasa;database=SqlSugar4XTest", + // EntityNamespace = "OrmTest.Models", + // IsAutoCloseConnection = false + // }; + // SqlSugarClient db = new SqlSugarClient(config); + // for (int i = 0; i < 1; i++) + // { + // db.Database.IsEnableLogEvent = true; + // db.Database.LogEventStarting = (sql, par) => + // { + // Console.WriteLine(sql + " " + par); + // }; - var tb = db.Database.DbMaintenance.GetTableInfoList(); - var tc = db.Database.DbMaintenance.GetColumnInfosByTableName("student"); + // var tb = db.Database.DbMaintenance.GetTableInfoList(); + // var tc = db.Database.DbMaintenance.GetColumnInfosByTableName("student"); - //var list = db.Queryable() - // .JoinTable((st,sc)=>st.SchoolId==sc.Id) - // .Where("id=2").Where(it => it.Name == "id").Where(it => it.Id > 0).ToList(); + // //var list = db.Queryable() + // // .JoinTable((st,sc)=>st.SchoolId==sc.Id) + // // .Where("id=2").Where(it => it.Name == "id").Where(it => it.Id > 0).ToList(); - //var list2 = db.Queryable().Where(it => it.Name == "id").Where(it => it.Id > 0).ToList(); - //var xx = db.SqlQuery("select * from Student"); - //var cl = db.Database.DbMaintenance.GetColumnInfosByTableName("student"); + // //var list2 = db.Queryable().Where(it => it.Name == "id").Where(it => it.Id > 0).ToList(); + // //var xx = db.SqlQuery("select * from Student"); + // //var cl = db.Database.DbMaintenance.GetColumnInfosByTableName("student"); - } - var e = DateTime.Now; - var t = (e - b).TotalMilliseconds; + // } + // var e = DateTime.Now; + // var t = (e - b).TotalMilliseconds; + //} } } } diff --git a/OrmTest/bin/Debug/OrmTest.exe b/OrmTest/bin/Debug/OrmTest.exe index f446ff732..25ebdfe4b 100644 Binary files a/OrmTest/bin/Debug/OrmTest.exe and b/OrmTest/bin/Debug/OrmTest.exe differ diff --git a/OrmTest/bin/Debug/OrmTest.pdb b/OrmTest/bin/Debug/OrmTest.pdb index ec773bb5b..3b2933bd2 100644 Binary files a/OrmTest/bin/Debug/OrmTest.pdb and b/OrmTest/bin/Debug/OrmTest.pdb differ diff --git a/OrmTest/bin/Debug/SqlSugar.dll b/OrmTest/bin/Debug/SqlSugar.dll index b31560b51..d272f7d5c 100644 Binary files a/OrmTest/bin/Debug/SqlSugar.dll and b/OrmTest/bin/Debug/SqlSugar.dll differ diff --git a/OrmTest/bin/Debug/SqlSugar.pdb b/OrmTest/bin/Debug/SqlSugar.pdb index 2bc4f8479..f326250db 100644 Binary files a/OrmTest/bin/Debug/SqlSugar.pdb and b/OrmTest/bin/Debug/SqlSugar.pdb differ diff --git a/SqlSugar/ExpressionsToSql/Common/ExpressionResult.cs b/SqlSugar/ExpressionsToSql/Common/ExpressionResult.cs index d475cb53d..236650772 100644 --- a/SqlSugar/ExpressionsToSql/Common/ExpressionResult.cs +++ b/SqlSugar/ExpressionsToSql/Common/ExpressionResult.cs @@ -17,7 +17,7 @@ namespace SqlSugar } set { - Check.Exception(value!=null&&IsLockCurrentParameter, "CurrentParameter is locked."); + Check.Exception(value != null && IsLockCurrentParameter, "CurrentParameter is locked."); this._CurrentParameter = value; this.IsLockCurrentParameter = false; } @@ -70,6 +70,12 @@ namespace SqlSugar return this.Result.ToString(); } + public void TrimEnd() + { + if (this._Result == null) return; + this.Result=this.Result.Remove(this.Result.Length-1,1); + } + public void Append(object parameter) { if (this.CurrentParameter.IsValuable() && this.CurrentParameter.AppendType.IsIn(ExpressionResultAppendType.AppendTempDate)) diff --git a/SqlSugar/ExpressionsToSql/ResolveItems/MemberInitExpressionResolve.cs b/SqlSugar/ExpressionsToSql/ResolveItems/MemberInitExpressionResolve.cs index 8fc104512..19fef0f7d 100644 --- a/SqlSugar/ExpressionsToSql/ResolveItems/MemberInitExpressionResolve.cs +++ b/SqlSugar/ExpressionsToSql/ResolveItems/MemberInitExpressionResolve.cs @@ -80,6 +80,7 @@ namespace SqlSugar base.Start(); parameter.CommonTempData = null; parameter.IsAppendResult(); + this.Context.Result.TrimEnd(); base.Context.Result.Append(base.Context.GetAsString(memberName, parameter.CommonTempData.ObjToString())); base.Context.Result.CurrentParameter = null; } diff --git a/SqlSugar/ExpressionsToSql/ResolveItems/NewExpressionResolve.cs b/SqlSugar/ExpressionsToSql/ResolveItems/NewExpressionResolve.cs index 1756f10dd..c6333955e 100644 --- a/SqlSugar/ExpressionsToSql/ResolveItems/NewExpressionResolve.cs +++ b/SqlSugar/ExpressionsToSql/ResolveItems/NewExpressionResolve.cs @@ -76,6 +76,7 @@ namespace SqlSugar base.Start(); parameter.CommonTempData = null; parameter.IsAppendResult(); + this.Context.Result.TrimEnd(); base.Context.Result.Append(base.Context.GetAsString(memberName, parameter.CommonTempData.ObjToString())); base.Context.Result.CurrentParameter = null; } diff --git a/SqlSugar/ExpressionsToSql/ResolveItems/SimpleBinaryExpressionResolve.cs b/SqlSugar/ExpressionsToSql/ResolveItems/SimpleBinaryExpressionResolve.cs index eaa2dcae5..ff96208e5 100644 --- a/SqlSugar/ExpressionsToSql/ResolveItems/SimpleBinaryExpressionResolve.cs +++ b/SqlSugar/ExpressionsToSql/ResolveItems/SimpleBinaryExpressionResolve.cs @@ -21,10 +21,10 @@ namespace SqlSugar var rightValue = parameter.CommonTempData; base.Expression = expression.Left; base.Start(); - var leftValue = parameter.CommonTempData; + var leftValue = parameter.Context.Result.CurrentParameter.CommonTempData; var operatorValue = ExpressionTool.GetOperator(expression.NodeType); this.Context.Result.CurrentParameter = null; - this.Context.Result.AppendFormat(ExpressionConst.BinaryFormatString, leftValue, operatorValue, rightValue); + this.Context.Result.AppendFormat(ExpressionConst.BinaryFormatString, leftValue, operatorValue, rightValue.ObjToString()); break; case ResolveExpressType.WhereSingle: case ResolveExpressType.WhereMultiple: