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
{
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<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);
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<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 };
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<SugarParameter>(){
new SugarParameter("@constant1","a")},
"Select.MultipleDynamic Error");
}
private static void single()
private void single()
{
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);
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<SugarParameter>(){
new SugarParameter("@constant1","a"),
new SugarParameter("@constant3",1)},
"Select.single Error");
}
private static void singleDynamic()
private void singleDynamic()
{
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);
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<SugarParameter>(){
new SugarParameter("@constant2",1),
new SugarParameter("@constant3","a")},
"Select.single Error");
}
}
}

View File

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

View File

@@ -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<Func<Student, object>> exp = it => new Program() { x=it.Name };
// Expression<Func<Student, object>> 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<Func<Student, object>> exp = it => new Program() { x=it.Name };
//// Expression<Func<Student, object>> 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<Student>()
// .JoinTable<School>((st,sc)=>st.SchoolId==sc.Id)
// .Where("id=2").Where(it => it.Name == "id").Where(it => it.Id > 0).ToList();
// //var list = db.Queryable<Student>()
// // .JoinTable<School>((st,sc)=>st.SchoolId==sc.Id)
// // .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 xx = db.SqlQuery<Student>("select * from Student");
//var cl = db.Database.DbMaintenance.GetColumnInfosByTableName("student");
// //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 cl = db.Database.DbMaintenance.GetColumnInfosByTableName("student");
}
var e = DateTime.Now;
var t = (e - b).TotalMilliseconds;
// }
// var e = DateTime.Now;
// 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
{
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))

View File

@@ -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;
}

View File

@@ -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;
}

View File

@@ -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: