SqlQueryable functionality is optimized

This commit is contained in:
sunkaixuna 2021-08-05 20:26:18 +08:00
parent 587d69d41d
commit c60a4c3563
9 changed files with 23 additions and 4 deletions

View File

@ -2419,6 +2419,7 @@ namespace SqlSugar
asyncQueryableBuilder.AsTables = this.Context.Utilities.TranslateCopy(this.QueryBuilder.AsTables); asyncQueryableBuilder.AsTables = this.Context.Utilities.TranslateCopy(this.QueryBuilder.AsTables);
asyncQueryableBuilder.DisableTop = this.QueryBuilder.DisableTop; asyncQueryableBuilder.DisableTop = this.QueryBuilder.DisableTop;
asyncQueryableBuilder.Offset = this.QueryBuilder.Offset; asyncQueryableBuilder.Offset = this.QueryBuilder.Offset;
asyncQueryableBuilder.IsSqlQuery = this.QueryBuilder.IsSqlQuery;
} }
protected int SetCacheTime(int cacheDurationInSeconds) protected int SetCacheTime(int cacheDurationInSeconds)
{ {

View File

@ -35,6 +35,7 @@ namespace SqlSugar
#region Splicing basic #region Splicing basic
public List<string> IgnoreColumns { get; set; } public List<string> IgnoreColumns { get; set; }
public bool IsCount { get; set; } public bool IsCount { get; set; }
public bool IsSqlQuery { get; set; }
public int? Skip { get; set; } public int? Skip { get; set; }
public int ExternalPageIndex { get; set; } public int ExternalPageIndex { get; set; }
public int ExternalPageSize { get; set; } public int ExternalPageSize { get; set; }
@ -475,6 +476,15 @@ namespace SqlSugar
{ {
return Regex.IsMatch(sql, @"AS \[\w+\.\w+\]"); return Regex.IsMatch(sql, @"AS \[\w+\.\w+\]");
} }
public string GetSqlQuerySql(string result)
{
if (this.IsSqlQuery && (Skip == null && Take == null))
{
result = System.Text.RegularExpressions.Regex.Match(result, @"^SELECT t\.\* FROM \((.*)\) t $").Groups[1].Value;
}
return result;
}
#endregion #endregion
#region Get SQL Partial #region Get SQL Partial

View File

@ -578,7 +578,9 @@ namespace SqlSugar
public ISugarQueryable<T> SqlQueryable<T>(string sql) where T : class, new() public ISugarQueryable<T> SqlQueryable<T>(string sql) where T : class, new()
{ {
var sqlBuilder = InstanceFactory.GetSqlbuilder(this.Context.CurrentConnectionConfig); var sqlBuilder = InstanceFactory.GetSqlbuilder(this.Context.CurrentConnectionConfig);
return this.Context.Queryable<T>().AS(sqlBuilder.GetPackTable(sql, sqlBuilder.GetDefaultShortName())).With(SqlWith.Null).Select(sqlBuilder.GetDefaultShortName() + ".*"); var result= this.Context.Queryable<T>().AS(sqlBuilder.GetPackTable(sql, sqlBuilder.GetDefaultShortName())).With(SqlWith.Null).Select(sqlBuilder.GetDefaultShortName() + ".*");
result.QueryBuilder.IsSqlQuery = true;
return result;
} }
#endregion #endregion

View File

@ -48,6 +48,7 @@ namespace SqlSugar
result = ToPageSql2(result, ExternalPageIndex, ExternalPageSize, true); result = ToPageSql2(result, ExternalPageIndex, ExternalPageSize, true);
} }
this.OrderByValue = oldOrderBy; this.OrderByValue = oldOrderBy;
result = GetSqlQuerySql(result);
return result; return result;
} }
public override string ToPageSql(string sql, int? take, int? skip, bool isExternal = false) public override string ToPageSql(string sql, int? take, int? skip, bool isExternal = false)

View File

@ -61,6 +61,7 @@ namespace SqlSugar
result = sql.ToString(); result = sql.ToString();
} }
this.OrderByValue = oldOrderValue; this.OrderByValue = oldOrderValue;
result = GetSqlQuerySql(result);
return result; return result;
} }
private string ToCountSqlString() private string ToCountSqlString()

View File

@ -51,6 +51,7 @@ namespace SqlSugar
result = ToPageSql2(result, ExternalPageIndex, ExternalPageSize, true); result = ToPageSql2(result, ExternalPageIndex, ExternalPageSize, true);
} }
this.OrderByValue = oldOrderBy; this.OrderByValue = oldOrderBy;
result = GetSqlQuerySql(result);
return result; return result;
} }
public override string ToPageSql(string sql, int? take, int? skip, bool isExternal = false) public override string ToPageSql(string sql, int? take, int? skip, bool isExternal = false)

View File

@ -61,6 +61,7 @@ namespace SqlSugar
result = sql.ToString(); result = sql.ToString();
} }
this.OrderByValue = oldOrderValue; this.OrderByValue = oldOrderValue;
result = GetSqlQuerySql(result);
return result; return result;
} }

View File

@ -28,7 +28,7 @@ namespace SqlSugar
{ {
this.OrderByValue = this.PartitionByValue + this.OrderByValue; this.OrderByValue = this.PartitionByValue + this.OrderByValue;
} }
var isFirst = (Skip == 0 || Skip == null) && Take == 1&&DisableTop==false; var isFirst = (Skip == 0 || Skip == null) && Take == 1 && DisableTop == false;
var isRowNumber = (Skip != null || Take != null) && !isFirst; var isRowNumber = (Skip != null || Take != null) && !isFirst;
var rowNumberString = string.Format(",ROW_NUMBER() OVER({0}) AS RowIndex ", GetOrderByString); var rowNumberString = string.Format(",ROW_NUMBER() OVER({0}) AS RowIndex ", GetOrderByString);
string groupByValue = GetGroupByString + HavingInfos; string groupByValue = GetGroupByString + HavingInfos;
@ -48,14 +48,15 @@ namespace SqlSugar
result = ToPageSql2(result, ExternalPageIndex, ExternalPageSize, true); result = ToPageSql2(result, ExternalPageIndex, ExternalPageSize, true);
} }
this.OrderByValue = oldOrderBy; this.OrderByValue = oldOrderBy;
if (!string.IsNullOrEmpty(this.Offset)) if (!string.IsNullOrEmpty(this.Offset))
{ {
if (this.OrderByValue.IsNullOrEmpty()) if (this.OrderByValue.IsNullOrEmpty())
{ {
result += " ORDER BY GETDATE() "; result += " ORDER BY GETDATE() ";
} }
result += this.Offset; result += this.Offset;
} }
result = GetSqlQuerySql(result);
return result; return result;
} }
} }

View File

@ -61,6 +61,7 @@ namespace SqlSugar
result= sql.ToString(); result= sql.ToString();
} }
this.OrderByValue = oldOrderBy; this.OrderByValue = oldOrderBy;
result = GetSqlQuerySql(result);
return result; return result;
} }