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");
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();
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()
{
string oldOrderBy=this.OrderByValue;
string oldOrderBy = this.OrderByValue;
string externalOrderBy = oldOrderBy;
if (!IsDisabledGobalFilter && this.Context.QueryFilter.GeFilterList.IsValuable())
{
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.Replace("{$:OrderByString:$}", isRowNumber ? (this.IsCount ? null : rowNumberString) : null);
if (IsCount) { return sql.ToString(); }
var result= ToPageSql(sql.ToString(),this.Take,this.Skip);
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);
var result = ToPageSql(sql.ToString(), this.Take, this.Skip);
if (ExternalPageIndex > 0)
{
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;
return result;
}
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)
public virtual string ToCountSql(string sql)
{
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)
{
return string.Format(temp, sql.ToString(), skip.ObjToInt() + 1, long.MaxValue);
@ -283,7 +289,13 @@ namespace SqlSugar
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)
{
return string.Format(

View File

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

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
[assembly: Guid("1c022a5c-4e4d-4026-a8a3-f659b9740a1a")]
[assembly: AssemblyVersion("4.2.0.5")]
[assembly: AssemblyFileVersion("4.2.0.5")]
[assembly: AssemblyVersion("4.2.0.6")]
[assembly: AssemblyFileVersion("4.2.0.6")]

View File

@ -48,7 +48,7 @@ namespace SqlSugar
else if (Skip == null && Take != null)
{
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)
{

View File

@ -48,7 +48,7 @@ namespace SqlSugar
else if (Skip == null && Take != null)
{
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)
{

View File

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

View File

@ -8,6 +8,6 @@ namespace OrmTest
{
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");
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();
base.Check(@"SELECT `ID`,`SchoolId`,`Name`,`CreateTime` FROM `STudent` LIMIT 3,9223372036854775807", null, t5.Key,null, "single t5 Error");