This commit is contained in:
sunkaixuan
2017-01-27 18:35:48 +08:00
parent 4553bae9b0
commit 79af494bfa
13 changed files with 146 additions and 63 deletions

Binary file not shown.

View File

@@ -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<SugarParameter> pars, string validValue, List<SugarParameter> 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);
}
}
}
}
}
}
}

View File

@@ -9,61 +9,91 @@ using System.Threading.Tasks;
namespace OrmTest.ExpressionTest namespace OrmTest.ExpressionTest
{ {
public class Select public class Select : ExpTestBase
{ {
internal static void Init() private Select() { }
public Select(int eachCount)
{ {
DateTime b = DateTime.Now; this.Count = eachCount;
int count = 1; }
for (int i = 0; i < count; i++) internal void Init()
{
base.Begin();
for (int i = 0; i < base.Count; i++)
{ {
single(); single();
Multiple(); Multiple();
singleDynamic(); singleDynamic();
MultipleDynamic(); MultipleDynamic();
} }
DateTime e = DateTime.Now; base.End("Select Test");
Console.WriteLine("Count: " + count + "\r\nTime: " + (e - b).TotalSeconds + " Seconds ");
} }
private static void Multiple() private void Multiple()
{ {
Expression<Func<Student, School, object>> exp = (it, school) => new Student() { Name = "a", Id = it.Id, SchoolId = school.Id,TestId=it.Id+1 }; Expression<Func<Student, School, object>> exp = (it, school) => new Student() { Name = "a", Id = it.Id, SchoolId = school.Id, TestId = it.Id + 1 };
ExpressionContext expContext = new ExpressionContext(exp, ResolveExpressType.SelectMultiple); ExpressionContext expContext = new ExpressionContext(exp, ResolveExpressType.SelectMultiple);
expContext.Resolve(); expContext.Resolve();
var selectorValue = expContext.Result.GetString(); var selectorValue = expContext.Result.GetString();
var pars = expContext.Parameters; var pars = expContext.Parameters;
if (selectorValue.Trim() != " @constant1 AS Name , it.Id AS Id , school.Id AS SchoolId ".Trim()) base.CheckSelect(
{ selectorValue,
throw new Exception("Multiple Error"); pars,
} @" @constant1 AS Name , it.Id AS Id , school.Id AS SchoolId , ( it.Id + 1 ) AS TestId ",
new List<SugarParameter>(){
new SugarParameter("@constant1","a")},
"Select.Multiple Error");
} }
private static void MultipleDynamic()
private void MultipleDynamic()
{ {
Expression<Func<Student, School, object>> exp = (it, school) => new { Name = "a", Id = it.Id / 2, SchoolId = school.Id }; Expression<Func<Student, School, object>> exp = (it, school) => new { Name = "a", Id = it.Id / 2, SchoolId = school.Id };
ExpressionContext expContext = new ExpressionContext(exp, ResolveExpressType.SelectMultiple); ExpressionContext expContext = new ExpressionContext(exp, ResolveExpressType.SelectMultiple);
expContext.Resolve(); expContext.Resolve();
var selectorValue = expContext.Result.GetString(); var selectorValue = expContext.Result.GetString();
var pars = expContext.Parameters; var pars = expContext.Parameters;
base.CheckSelect(
selectorValue,
pars,
@" @constant1 AS Name , ( it.Id / 2 ) AS Id , school.Id AS SchoolId ",
new List<SugarParameter>(){
new SugarParameter("@constant1","a")},
"Select.MultipleDynamic Error");
} }
private static void single() private void single()
{ {
int p = 1; int p = 1;
Expression<Func<Student, object>> exp = it => new Student() { Name = "a", Id = it.Id, SchoolId = p }; Expression<Func<Student, object>> exp = it => new Student() { Name = "a", Id = it.Id, SchoolId = p,TestId=it.Id+1 };
ExpressionContext expContext = new ExpressionContext(exp, ResolveExpressType.SelectSingle); ExpressionContext expContext = new ExpressionContext(exp, ResolveExpressType.SelectSingle);
expContext.Resolve(); expContext.Resolve();
var selectorValue = expContext.Result.GetString(); var selectorValue = expContext.Result.GetString();
var pars = expContext.Parameters; var pars = expContext.Parameters;
base.CheckSelect(
selectorValue,
pars,
@" @constant1 AS Name , Id AS Id , @constant3 AS SchoolId , ( Id + 1 ) AS TestId ",
new List<SugarParameter>(){
new SugarParameter("@constant1","a"),
new SugarParameter("@constant3",1)},
"Select.single Error");
} }
private static void singleDynamic() private void singleDynamic()
{ {
string a = "a"; string a = "a";
Expression<Func<Student, object>> exp = it => new { x = it.Id, shoolid = 1, name = a }; Expression<Func<Student, object>> exp = it => new { x = it.Id, shoolid = 1, name = a,p=it.Id*1 };
ExpressionContext expContext = new ExpressionContext(exp, ResolveExpressType.SelectSingle); ExpressionContext expContext = new ExpressionContext(exp, ResolveExpressType.SelectSingle);
expContext.Resolve(); expContext.Resolve();
var selectorValue = expContext.Result.GetString(); var selectorValue = expContext.Result.GetString();
var pars = expContext.Parameters; var pars = expContext.Parameters;
base.CheckSelect(
selectorValue,
pars,
@" Id AS x , @constant2 AS shoolid , @constant3 AS name , ( Id * 1 ) AS p ",
new List<SugarParameter>(){
new SugarParameter("@constant2",1),
new SugarParameter("@constant3","a")},
"Select.single Error");
} }
} }
} }

View File

@@ -43,6 +43,7 @@
<Reference Include="System.Xml" /> <Reference Include="System.Xml" />
</ItemGroup> </ItemGroup>
<ItemGroup> <ItemGroup>
<Compile Include="ExpressionTest\ExpTestBase.cs" />
<Compile Include="ExpressionTest\Field.cs" /> <Compile Include="ExpressionTest\Field.cs" />
<Compile Include="ExpressionTest\Select.cs" /> <Compile Include="ExpressionTest\Select.cs" />
<Compile Include="ExpressionTest\Where.cs" /> <Compile Include="ExpressionTest\Where.cs" />

View File

@@ -14,61 +14,56 @@ namespace OrmTest
class Program class Program
{ {
public static string GetName() {
return "a";
}
public string x = "2";
public static string id { get; set;}
static void Main(string[] args) static void Main(string[] args)
{ {
int eachCount = 1;
new OrmTest.ExpressionTest.Select(eachCount).Init();
OrmTest.ExpressionTest.Select.Init();
OrmTest.ExpressionTest.Field.Init(); OrmTest.ExpressionTest.Field.Init();
Program.id = "xx"; // Program.id = "xx";
string x = "1"; // string x = "1";
Expression<Func<Student, object>> exp = it => new Program() { x=it.Name }; // Expression<Func<Student, object>> exp = it => new Program() { x=it.Name };
// Expression<Func<Student, object>> exp = it => it.Name; //// Expression<Func<Student, object>> exp = it => it.Name;
ExpressionContext expContext = new ExpressionContext(exp, ResolveExpressType.WhereSingle); // ExpressionContext expContext = new ExpressionContext(exp, ResolveExpressType.WhereSingle);
// var x = expContext.GetFiledName(); // var x = expContext.GetFiledName();
// var xx = expContext.ToResultString(); // var xx = expContext.ToResultString();
var b = DateTime.Now; // var b = DateTime.Now;
var config = new AttrbuitesCofnig() // var config = new AttrbuitesCofnig()
{ // {
DbType = DbType.SqlServer, // DbType = DbType.SqlServer,
ConnectionString = "server=.;uid=sa;pwd=sasa;database=SqlSugar4XTest", // ConnectionString = "server=.;uid=sa;pwd=sasa;database=SqlSugar4XTest",
EntityNamespace = "OrmTest.Models", // EntityNamespace = "OrmTest.Models",
IsAutoCloseConnection = false // IsAutoCloseConnection = false
}; // };
SqlSugarClient db = new SqlSugarClient(config); // SqlSugarClient db = new SqlSugarClient(config);
for (int i = 0; i < 1; i++) // for (int i = 0; i < 1; i++)
{ // {
db.Database.IsEnableLogEvent = true; // db.Database.IsEnableLogEvent = true;
db.Database.LogEventStarting = (sql, par) => // db.Database.LogEventStarting = (sql, par) =>
{ // {
Console.WriteLine(sql + " " + par); // Console.WriteLine(sql + " " + par);
}; // };
var tb = db.Database.DbMaintenance.GetTableInfoList(); // var tb = db.Database.DbMaintenance.GetTableInfoList();
var tc = db.Database.DbMaintenance.GetColumnInfosByTableName("student"); // var tc = db.Database.DbMaintenance.GetColumnInfosByTableName("student");
//var list = db.Queryable<Student>() // //var list = db.Queryable<Student>()
// .JoinTable<School>((st,sc)=>st.SchoolId==sc.Id) // // .JoinTable<School>((st,sc)=>st.SchoolId==sc.Id)
// .Where("id=2").Where(it => it.Name == "id").Where(it => it.Id > 0).ToList(); // // .Where("id=2").Where(it => it.Name == "id").Where(it => it.Id > 0).ToList();
//var list2 = db.Queryable<Student>().Where(it => it.Name == "id").Where(it => it.Id > 0).ToList(); // //var list2 = db.Queryable<Student>().Where(it => it.Name == "id").Where(it => it.Id > 0).ToList();
//var xx = db.SqlQuery<Student>("select * from Student"); // //var xx = db.SqlQuery<Student>("select * from Student");
//var cl = db.Database.DbMaintenance.GetColumnInfosByTableName("student"); // //var cl = db.Database.DbMaintenance.GetColumnInfosByTableName("student");
} // }
var e = DateTime.Now; // var e = DateTime.Now;
var t = (e - b).TotalMilliseconds; // var t = (e - b).TotalMilliseconds;
//}
} }
} }
} }

Binary file not shown.

Binary file not shown.

Binary file not shown.

Binary file not shown.

View File

@@ -17,7 +17,7 @@ namespace SqlSugar
} }
set set
{ {
Check.Exception(value!=null&&IsLockCurrentParameter, "CurrentParameter is locked."); Check.Exception(value != null && IsLockCurrentParameter, "CurrentParameter is locked.");
this._CurrentParameter = value; this._CurrentParameter = value;
this.IsLockCurrentParameter = false; this.IsLockCurrentParameter = false;
} }
@@ -70,6 +70,12 @@ namespace SqlSugar
return this.Result.ToString(); 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) public void Append(object parameter)
{ {
if (this.CurrentParameter.IsValuable() && this.CurrentParameter.AppendType.IsIn(ExpressionResultAppendType.AppendTempDate)) if (this.CurrentParameter.IsValuable() && this.CurrentParameter.AppendType.IsIn(ExpressionResultAppendType.AppendTempDate))

View File

@@ -80,6 +80,7 @@ namespace SqlSugar
base.Start(); base.Start();
parameter.CommonTempData = null; parameter.CommonTempData = null;
parameter.IsAppendResult(); parameter.IsAppendResult();
this.Context.Result.TrimEnd();
base.Context.Result.Append(base.Context.GetAsString(memberName, parameter.CommonTempData.ObjToString())); base.Context.Result.Append(base.Context.GetAsString(memberName, parameter.CommonTempData.ObjToString()));
base.Context.Result.CurrentParameter = null; base.Context.Result.CurrentParameter = null;
} }

View File

@@ -76,6 +76,7 @@ namespace SqlSugar
base.Start(); base.Start();
parameter.CommonTempData = null; parameter.CommonTempData = null;
parameter.IsAppendResult(); parameter.IsAppendResult();
this.Context.Result.TrimEnd();
base.Context.Result.Append(base.Context.GetAsString(memberName, parameter.CommonTempData.ObjToString())); base.Context.Result.Append(base.Context.GetAsString(memberName, parameter.CommonTempData.ObjToString()));
base.Context.Result.CurrentParameter = null; base.Context.Result.CurrentParameter = null;
} }

View File

@@ -21,10 +21,10 @@ namespace SqlSugar
var rightValue = parameter.CommonTempData; var rightValue = parameter.CommonTempData;
base.Expression = expression.Left; base.Expression = expression.Left;
base.Start(); base.Start();
var leftValue = parameter.CommonTempData; var leftValue = parameter.Context.Result.CurrentParameter.CommonTempData;
var operatorValue = ExpressionTool.GetOperator(expression.NodeType); var operatorValue = ExpressionTool.GetOperator(expression.NodeType);
this.Context.Result.CurrentParameter = null; 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; break;
case ResolveExpressType.WhereSingle: case ResolveExpressType.WhereSingle:
case ResolveExpressType.WhereMultiple: case ResolveExpressType.WhereMultiple: