Update Core

This commit is contained in:
sunkaixuan 2017-07-14 12:47:53 +08:00
parent f7880bf3ac
commit eef317a3b7
10 changed files with 48 additions and 30 deletions

View File

@ -39,7 +39,7 @@ namespace OrmTest.UnitTest
base.Check("SELECT `ID`,`SchoolId`,`Name`,`CreateTime` FROM `STudent` ORDER BY `ID` ASC", null, t3.Key, null, "single t3 Error"); base.Check("SELECT `ID`,`SchoolId`,`Name`,`CreateTime` FROM `STudent` ORDER BY `ID` ASC", null, t3.Key, null, "single t3 Error");
var t4 = db.Queryable<Student>().OrderBy(it => it.Id).Take(3).ToSql(); var t4 = db.Queryable<Student>().OrderBy(it => it.Id).Take(3).ToSql();
base.Check(@"SELECT `ID`,`SchoolId`,`Name`,`CreateTime` FROM `STudent` ORDER BY `ID` ASC LIMIT 1,3", null, t4.Key, null, "single t4 Error"); base.Check(@"SELECT `ID`,`SchoolId`,`Name`,`CreateTime` FROM `STudent` ORDER BY `ID` ASC LIMIT 0,3", null, t4.Key, null, "single t4 Error");
var t5 = db.Queryable<Student>().OrderBy(it => it.Id).Skip(3).ToSql(); var t5 = db.Queryable<Student>().OrderBy(it => it.Id).Skip(3).ToSql();
base.Check(@"SELECT `ID`,`SchoolId`,`Name`,`CreateTime` FROM `STudent` LIMIT 3,9223372036854775807", null, t5.Key,null, "single t5 Error"); base.Check(@"SELECT `ID`,`SchoolId`,`Name`,`CreateTime` FROM `STudent` LIMIT 3,9223372036854775807", null, t5.Key,null, "single t5 Error");

View File

@ -223,7 +223,8 @@ namespace SqlSugar
} }
public virtual string ToSqlString() public virtual string ToSqlString()
{ {
string oldOrderBy=this.OrderByValue; string oldOrderBy = this.OrderByValue;
string externalOrderBy = oldOrderBy;
if (!IsDisabledGobalFilter && this.Context.QueryFilter.GeFilterList.IsValuable()) if (!IsDisabledGobalFilter && this.Context.QueryFilter.GeFilterList.IsValuable())
{ {
var gobalFilterList = this.Context.QueryFilter.GeFilterList.Where(it => it.FilterName.IsNullOrEmpty()).ToList(); var gobalFilterList = this.Context.QueryFilter.GeFilterList.Where(it => it.FilterName.IsNullOrEmpty()).ToList();
@ -249,23 +250,28 @@ namespace SqlSugar
sql.AppendFormat(SqlTemplate, GetSelectValue, GetTableNameString, GetWhereValueString, GetGroupByString + HavingInfos, (!isRowNumber && this.OrderByValue.IsValuable()) ? GetOrderByString : null); sql.AppendFormat(SqlTemplate, GetSelectValue, GetTableNameString, GetWhereValueString, GetGroupByString + HavingInfos, (!isRowNumber && this.OrderByValue.IsValuable()) ? GetOrderByString : null);
sql.Replace("{$:OrderByString:$}", isRowNumber ? (this.IsCount ? null : rowNumberString) : null); sql.Replace("{$:OrderByString:$}", isRowNumber ? (this.IsCount ? null : rowNumberString) : null);
if (IsCount) { return sql.ToString(); } if (IsCount) { return sql.ToString(); }
var result= ToPageSql(sql.ToString(),this.Take,this.Skip); var result = ToPageSql(sql.ToString(), this.Take, this.Skip);
if (ExternalPageIndex > 0) { if (ExternalPageIndex > 0)
result = string.Format("SELECT *,ROW_NUMBER() OVER(ORDER BY GETDATE()) AS RowIndex2 FROM ({0}) ExternalTable ", result); {
result = ToPageSql(result, (ExternalPageIndex-1)*ExternalPageSize,ExternalPageSize,true); if (externalOrderBy.IsNullOrEmpty()) {
externalOrderBy = " ORDER BY GetDate() ";
}
result = string.Format("SELECT *,ROW_NUMBER() OVER({0}) AS RowIndex2 FROM ({1}) ExternalTable ", externalOrderBy,result);
result = ToPageSql2(result,ExternalPageIndex, ExternalPageSize, true);
} }
this.OrderByValue = oldOrderBy; this.OrderByValue = oldOrderBy;
return result; return result;
} }
public virtual string ToCountSql(string sql) { public virtual string ToCountSql(string sql)
return string.Format(" SELECT COUNT(1) FROM ({0}) CountTable ",sql);
}
public virtual string ToPageSql(string sql,int? take,int? skip,bool isExternal=false)
{ {
string temp = isExternal?ExternalPageTempalte:PageTempalte;
return string.Format(" SELECT COUNT(1) FROM ({0}) CountTable ", sql);
}
public virtual string ToPageSql(string sql, int? take, int? skip, bool isExternal = false)
{
string temp = isExternal ? ExternalPageTempalte : PageTempalte;
if (skip != null && take == null) if (skip != null && take == null)
{ {
return string.Format(temp, sql.ToString(), skip.ObjToInt() + 1, long.MaxValue); return string.Format(temp, sql.ToString(), skip.ObjToInt() + 1, long.MaxValue);
@ -283,7 +289,13 @@ namespace SqlSugar
return sql.ToString(); return sql.ToString();
} }
} }
public virtual string ToPageSql2(string sql, int? pageIndex, int? pageSize, bool isExternal = false)
{
string temp = isExternal ? ExternalPageTempalte : PageTempalte;
return string.Format(temp, sql.ToString(), (pageIndex - 1) * pageSize+1, pageIndex * pageSize);
}
public virtual string ToJoinString(JoinQueryInfo joinInfo) public virtual string ToJoinString(JoinQueryInfo joinInfo)
{ {
return string.Format( return string.Format(

View File

@ -70,10 +70,10 @@ namespace SqlSugar
var memberInfos = new Stack<MemberInfo>(); var memberInfos = new Stack<MemberInfo>();
var fieldInfo = member as System.Reflection.FieldInfo; var fieldInfo = member as System.Reflection.FieldInfo;
object reval = null; object reval = null;
// "descend" toward's the root object reference: MemberExpression memberExpr = null;
while (expression is MemberExpression) while (expression is MemberExpression)
{ {
var memberExpr = expression as MemberExpression; memberExpr = expression as MemberExpression;
memberInfos.Push(memberExpr.Member); memberInfos.Push(memberExpr.Member);
if (memberExpr.Expression == null) if (memberExpr.Expression == null)
{ {
@ -106,18 +106,24 @@ namespace SqlSugar
var objProp = objReference.GetType().GetProperty(mi.Name); var objProp = objReference.GetType().GetProperty(mi.Name);
if (objProp == null) if (objProp == null)
{ {
objReference = DynamicInvoke(expression,memberExpr);
}
else
{
objReference = objProp.GetValue(objReference, null);
} }
objReference = objProp.GetValue(objReference, null);
} }
else if (mi.MemberType == MemberTypes.Field) else if (mi.MemberType == MemberTypes.Field)
{ {
var objField = objReference.GetType().GetField(mi.Name); var objField = objReference.GetType().GetField(mi.Name);
if (objField == null) if (objField == null)
{ {
objReference = DynamicInvoke(expression, memberExpr);
}
else
{
objReference = objField.GetValue(objReference);
} }
objReference = objField.GetValue(objReference);
} }
} }
reval = objReference; reval = objReference;
@ -194,12 +200,12 @@ namespace SqlSugar
return reval; return reval;
} }
public static object DynamicInvoke(Expression expression) public static object DynamicInvoke(Expression expression,MemberExpression memberExpression=null)
{ {
object value = Expression.Lambda(expression).Compile().DynamicInvoke(); object value = Expression.Lambda(expression).Compile().DynamicInvoke();
if (value != null && value.GetType().IsClass() && value.GetType() != ExpressionConst.StringType) if (value != null && value.GetType().IsClass() && value.GetType() != ExpressionConst.StringType&& memberExpression!=null)
{ {
value = Expression.Lambda(expression).Compile().DynamicInvoke(); value = Expression.Lambda(memberExpression).Compile().DynamicInvoke();
} }
return value; return value;

View File

@ -17,5 +17,5 @@ using System.Runtime.InteropServices;
// The following GUID is for the ID of the typelib if this project is exposed to COM // 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: Guid("1c022a5c-4e4d-4026-a8a3-f659b9740a1a")]
[assembly: AssemblyVersion("4.2.0.5")] [assembly: AssemblyVersion("4.2.0.6")]
[assembly: AssemblyFileVersion("4.2.0.5")] [assembly: AssemblyFileVersion("4.2.0.6")]

View File

@ -48,7 +48,7 @@ namespace SqlSugar
else if (Skip == null && Take != null) else if (Skip == null && Take != null)
{ {
if (this.OrderByValue == "ORDER BY ") this.OrderByValue += GetSelectValue.Split(',')[0]; if (this.OrderByValue == "ORDER BY ") this.OrderByValue += GetSelectValue.Split(',')[0];
result = string.Format(PageTempalte, GetSelectValue, GetTableNameString, GetWhereValueString, GetGroupByString + HavingInfos, GetOrderByString, 1, Take.ObjToInt()); result = string.Format(PageTempalte, GetSelectValue, GetTableNameString, GetWhereValueString, GetGroupByString + HavingInfos, GetOrderByString, 0, Take.ObjToInt());
} }
else if (Skip != null && Take != null) else if (Skip != null && Take != null)
{ {

View File

@ -48,7 +48,7 @@ namespace SqlSugar
else if (Skip == null && Take != null) else if (Skip == null && Take != null)
{ {
if (this.OrderByValue == "ORDER BY ") this.OrderByValue += GetSelectValue.Split(',')[0]; if (this.OrderByValue == "ORDER BY ") this.OrderByValue += GetSelectValue.Split(',')[0];
result= string.Format(PageTempalte, GetSelectValue, GetTableNameString, GetWhereValueString, GetGroupByString + HavingInfos, GetOrderByString, 1, Take.ObjToInt()); result= string.Format(PageTempalte, GetSelectValue, GetTableNameString, GetWhereValueString, GetGroupByString + HavingInfos, GetOrderByString, 0, Take.ObjToInt());
} }
else if (Skip != null && Take != null) else if (Skip != null && Take != null)
{ {

View File

@ -2,7 +2,7 @@
<package > <package >
<metadata> <metadata>
<id>sqlSugarCore</id> <id>sqlSugarCore</id>
<version>4.2.0.5</version> <version>4.2.0.6</version>
<authors>sunkaixuan</authors> <authors>sunkaixuan</authors>
<owners>Landa</owners> <owners>Landa</owners>
<licenseUrl>http://www.apache.org/licenses/LICENSE-2.0.html</licenseUrl> <licenseUrl>http://www.apache.org/licenses/LICENSE-2.0.html</licenseUrl>

View File

@ -8,6 +8,6 @@ namespace OrmTest
{ {
public class Config 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";
} }
} }

View File

@ -39,7 +39,7 @@ namespace OrmTest.UnitTest
base.Check("SELECT `ID`,`SchoolId`,`Name`,`CreateTime` FROM `STudent` ORDER BY `ID` ASC", null, t3.Key, null, "single t3 Error"); base.Check("SELECT `ID`,`SchoolId`,`Name`,`CreateTime` FROM `STudent` ORDER BY `ID` ASC", null, t3.Key, null, "single t3 Error");
var t4 = db.Queryable<Student>().OrderBy(it => it.Id).Take(3).ToSql(); var t4 = db.Queryable<Student>().OrderBy(it => it.Id).Take(3).ToSql();
base.Check(@"SELECT `ID`,`SchoolId`,`Name`,`CreateTime` FROM `STudent` ORDER BY `ID` ASC LIMIT 1,3", null, t4.Key, null, "single t4 Error"); base.Check(@"SELECT `ID`,`SchoolId`,`Name`,`CreateTime` FROM `STudent` ORDER BY `ID` ASC LIMIT 0,3", null, t4.Key, null, "single t4 Error");
var t5 = db.Queryable<Student>().OrderBy(it => it.Id).Skip(3).ToSql(); var t5 = db.Queryable<Student>().OrderBy(it => it.Id).Skip(3).ToSql();
base.Check(@"SELECT `ID`,`SchoolId`,`Name`,`CreateTime` FROM `STudent` LIMIT 3,9223372036854775807", null, t5.Key,null, "single t5 Error"); base.Check(@"SELECT `ID`,`SchoolId`,`Name`,`CreateTime` FROM `STudent` LIMIT 3,9223372036854775807", null, t5.Key,null, "single t5 Error");