mirror of
https://github.com/nsnail/FreeSql.git
synced 2025-04-22 02:32:50 +08:00
- 修复 WithTempQuery + Oracle 分页问题;#1519
This commit is contained in:
parent
1424649bc3
commit
98c4ce8274
@ -9,6 +9,44 @@ namespace FreeSql.Tests.SqlServer
|
|||||||
{
|
{
|
||||||
public class SqlServerSelectWithTempQueryTest
|
public class SqlServerSelectWithTempQueryTest
|
||||||
{
|
{
|
||||||
|
[Fact]
|
||||||
|
public void Issues1519()
|
||||||
|
{
|
||||||
|
var fsql = g.oracle;
|
||||||
|
|
||||||
|
var query = fsql.Select<Issues1510T1>()
|
||||||
|
.FromQuery(fsql.Select<Issues1510T2>().WithTempQuery(e => e))
|
||||||
|
.InnerJoin(t => t.t1.Id == t.t2.T1JoinId)
|
||||||
|
.WithTempQuery(t => new
|
||||||
|
{
|
||||||
|
t.t1.Id,
|
||||||
|
t.t1.Name,
|
||||||
|
T2Id = t.t2.Id,
|
||||||
|
T2Name = t.t1.Name,
|
||||||
|
});
|
||||||
|
var sql = query.ToSql();
|
||||||
|
Assert.Equal(sql, @"SELECT *
|
||||||
|
FROM (
|
||||||
|
SELECT a.""ID"", a.""NAME"", htb.""ID"" ""T2ID"", a.""NAME"" ""T2NAME""
|
||||||
|
FROM ""ISSUES1510T1"" a
|
||||||
|
INNER JOIN (
|
||||||
|
SELECT a.""ID"", a.""NAME"", a.""T1JOINID""
|
||||||
|
FROM ""ISSUES1510T2"" a ) htb ON a.""ID"" = htb.""T1JOINID"" ) a");
|
||||||
|
query.ToList();
|
||||||
|
|
||||||
|
query.Page(2, 5);
|
||||||
|
sql = query.ToSql();
|
||||||
|
Assert.Equal(sql, @"SELECT t.* FROM (SELECT a.*, ROWNUM AS ""__rownum__""
|
||||||
|
FROM (
|
||||||
|
SELECT a.""ID"", a.""NAME"", htb.""ID"" ""T2ID"", a.""NAME"" ""T2NAME""
|
||||||
|
FROM ""ISSUES1510T1"" a
|
||||||
|
INNER JOIN (
|
||||||
|
SELECT a.""ID"", a.""NAME"", a.""T1JOINID""
|
||||||
|
FROM ""ISSUES1510T2"" a ) htb ON a.""ID"" = htb.""T1JOINID"" ) a
|
||||||
|
WHERE ROWNUM < 11) t WHERE t.""__rownum__"" > 5");
|
||||||
|
query.ToList();
|
||||||
|
}
|
||||||
|
|
||||||
[Fact]
|
[Fact]
|
||||||
public void Issues1510()
|
public void Issues1510()
|
||||||
{
|
{
|
||||||
|
88
FreeSql.Tests/tests.playlist
Normal file
88
FreeSql.Tests/tests.playlist
Normal file
@ -0,0 +1,88 @@
|
|||||||
|
<Playlist Version="2.0">
|
||||||
|
<Rule Name="Includes" Match="Any">
|
||||||
|
<Rule Match="All">
|
||||||
|
<Property Name="Solution" />
|
||||||
|
<Rule Match="Any">
|
||||||
|
<Rule Match="All">
|
||||||
|
<Property Name="Project" Value="FreeSql.Tests" />
|
||||||
|
<Rule Match="Any">
|
||||||
|
<Property Name="Namespace" Value="FreeSql.ExpressionTree" />
|
||||||
|
<Property Name="Namespace" Value="FreeSql.InternalTests" />
|
||||||
|
<Property Name="Namespace" Value="FreeSql.Tests" />
|
||||||
|
<Property Name="Namespace" Value="FreeSql.Tests.AdoNetExtensions.MySqlConnectionExtensions" />
|
||||||
|
<Property Name="Namespace" Value="FreeSql.Tests.AdoNetExtensions.NpgsqlConnectionExtensions" />
|
||||||
|
<Property Name="Namespace" Value="FreeSql.Tests.AdoNetExtensions.OracleConnectionExtensions" />
|
||||||
|
<Property Name="Namespace" Value="FreeSql.Tests.AdoNetExtensions.SqlConnectionExtensions" />
|
||||||
|
<Property Name="Namespace" Value="FreeSql.Tests.AdoNetExtensions.SQLiteConnectionExtensions" />
|
||||||
|
<Property Name="Namespace" Value="FreeSql.Tests.Dameng" />
|
||||||
|
<Property Name="Namespace" Value="FreeSql.Tests.DamengExpression" />
|
||||||
|
<Property Name="Namespace" Value="FreeSql.Tests.DamengMapType" />
|
||||||
|
<Property Name="Namespace" Value="FreeSql.Tests.DataAnnotations" />
|
||||||
|
<Property Name="Namespace" Value="FreeSql.Tests.DynamicEntity" />
|
||||||
|
<Property Name="Namespace" Value="FreeSql.Tests.Extensions" />
|
||||||
|
<Property Name="Namespace" Value="FreeSql.Tests.Firebird" />
|
||||||
|
<Property Name="Namespace" Value="FreeSql.Tests.FirebirdExpression" />
|
||||||
|
<Property Name="Namespace" Value="FreeSql.Tests.FirebirdMapType" />
|
||||||
|
<Property Name="Namespace" Value="FreeSql.Tests.Internal" />
|
||||||
|
<Property Name="Namespace" Value="FreeSql.Tests.Issues" />
|
||||||
|
<Property Name="Namespace" Value="FreeSql.Tests.Linq" />
|
||||||
|
<Property Name="Namespace" Value="FreeSql.Tests.MsAccess" />
|
||||||
|
<Property Name="Namespace" Value="FreeSql.Tests.MsAccessExpression" />
|
||||||
|
<Property Name="Namespace" Value="FreeSql.Tests.MsAccessMapType" />
|
||||||
|
<Property Name="Namespace" Value="FreeSql.Tests.MySql" />
|
||||||
|
<Property Name="Namespace" Value="FreeSql.Tests.MySqlExpression" />
|
||||||
|
<Property Name="Namespace" Value="FreeSql.Tests.MySqlMapType" />
|
||||||
|
<Property Name="Namespace" Value="FreeSql.Tests.Oracle" />
|
||||||
|
<Property Name="Namespace" Value="FreeSql.Tests.OracleExpression" />
|
||||||
|
<Property Name="Namespace" Value="FreeSql.Tests.OracleMapType" />
|
||||||
|
<Property Name="Namespace" Value="FreeSql.Tests.PostgreSQL" />
|
||||||
|
<Property Name="Namespace" Value="FreeSql.Tests.PostgreSQL.PgArrayToMany" />
|
||||||
|
<Property Name="Namespace" Value="FreeSql.Tests.PostgreSQLExpression" />
|
||||||
|
<Property Name="Namespace" Value="FreeSql.Tests.PostgreSQLMapType" />
|
||||||
|
<Property Name="Namespace" Value="FreeSql.Tests.Properties" />
|
||||||
|
<Property Name="Namespace" Value="FreeSql.Tests.Sqlite" />
|
||||||
|
<Property Name="Namespace" Value="FreeSql.Tests.SqliteExpression" />
|
||||||
|
<Property Name="Namespace" Value="FreeSql.Tests.SqliteMapType" />
|
||||||
|
<Property Name="Namespace" Value="FreeSql.Tests.SqlServer" />
|
||||||
|
<Property Name="Namespace" Value="FreeSql.Tests.SqlServerExpression" />
|
||||||
|
<Property Name="Namespace" Value="FreeSql.Tests.SqlServerMapType" />
|
||||||
|
</Rule>
|
||||||
|
</Rule>
|
||||||
|
<Property Name="Project" Value="FreeSql.Tests.DbContext" />
|
||||||
|
<Property Name="Project" Value="FreeSql.Tests.PerformanceTests" />
|
||||||
|
<Property Name="Project" Value="FreeSql.Tests.Provider.Custom" />
|
||||||
|
<Property Name="Project" Value="FreeSql.Tests.Provider.MySqlConnector (net6.0)" />
|
||||||
|
<Property Name="Project" Value="FreeSql.Tests.Provider.MySqlConnector (netcoreapp3.1)" />
|
||||||
|
<Rule Match="All">
|
||||||
|
<Property Name="Project" Value="FreeSql.Tests.Provider.Odbc" />
|
||||||
|
<Rule Match="Any">
|
||||||
|
<Property Name="Namespace" Value="FreeSql.Tests.Odbc" />
|
||||||
|
<Property Name="Namespace" Value="FreeSql.Tests.Odbc.Dameng" />
|
||||||
|
<Property Name="Namespace" Value="FreeSql.Tests.Odbc.DamengExpression" />
|
||||||
|
<Property Name="Namespace" Value="FreeSql.Tests.Odbc.DamengMapType" />
|
||||||
|
<Property Name="Namespace" Value="FreeSql.Tests.Odbc.Default" />
|
||||||
|
<Property Name="Namespace" Value="FreeSql.Tests.Odbc.DefaultExpression" />
|
||||||
|
<Property Name="Namespace" Value="FreeSql.Tests.Odbc.DefaultMapType" />
|
||||||
|
<Property Name="Namespace" Value="FreeSql.Tests.Odbc.MySql" />
|
||||||
|
<Property Name="Namespace" Value="FreeSql.Tests.Odbc.MySqlExpression" />
|
||||||
|
<Property Name="Namespace" Value="FreeSql.Tests.Odbc.MySqlMapType" />
|
||||||
|
<Property Name="Namespace" Value="FreeSql.Tests.Odbc.Oracle" />
|
||||||
|
<Property Name="Namespace" Value="FreeSql.Tests.Odbc.OracleExpression" />
|
||||||
|
<Property Name="Namespace" Value="FreeSql.Tests.Odbc.OracleMapType" />
|
||||||
|
<Property Name="Namespace" Value="FreeSql.Tests.Odbc.PostgreSQL" />
|
||||||
|
<Property Name="Namespace" Value="FreeSql.Tests.Odbc.PostgreSQLExpression" />
|
||||||
|
<Property Name="Namespace" Value="FreeSql.Tests.Odbc.PostgreSQLMapType" />
|
||||||
|
<Property Name="Namespace" Value="FreeSql.Tests.Odbc.SqlServer" />
|
||||||
|
<Property Name="Namespace" Value="FreeSql.Tests.Odbc.SqlServerExpression" />
|
||||||
|
<Property Name="Namespace" Value="FreeSql.Tests.Odbc.SqlServerMapType" />
|
||||||
|
</Rule>
|
||||||
|
</Rule>
|
||||||
|
<Property Name="Project" Value="FreeSql.Tests.Provider.OracleOledb (net6.0)" />
|
||||||
|
<Property Name="Project" Value="FreeSql.Tests.Provider.OracleOledb (netcoreapp3.1)" />
|
||||||
|
<Property Name="Project" Value="FreeSql.Tests.Provider.PostgreSQL.NetTopologySuite" />
|
||||||
|
<Property Name="Project" Value="FreeSql.Tests.Provider.Sqlite.Data" />
|
||||||
|
<Property Name="Project" Value="FreeSql.Tests.VB" />
|
||||||
|
</Rule>
|
||||||
|
</Rule>
|
||||||
|
</Rule>
|
||||||
|
</Playlist>
|
@ -188,6 +188,17 @@ namespace FreeSql
|
|||||||
expContext.Value.Result = $"{expContext.Value.ParsedContent["value1"]} <= {expContext.Value.ParsedContent["value2"]}";
|
expContext.Value.Result = $"{expContext.Value.ParsedContent["value1"]} <= {expContext.Value.ParsedContent["value2"]}";
|
||||||
return false;
|
return false;
|
||||||
}
|
}
|
||||||
|
/// <summary>
|
||||||
|
/// value1 IS NULL
|
||||||
|
/// </summary>
|
||||||
|
/// <typeparam name="TValue"></typeparam>
|
||||||
|
/// <param name="value1"></param>
|
||||||
|
/// <returns></returns>
|
||||||
|
public static bool EqualIsNull<TValue>(TValue value1)
|
||||||
|
{
|
||||||
|
expContext.Value.Result = $"{expContext.Value.ParsedContent["value1"]} IS NULL";
|
||||||
|
return false;
|
||||||
|
}
|
||||||
#endregion
|
#endregion
|
||||||
|
|
||||||
/// <summary>
|
/// <summary>
|
||||||
|
@ -1377,6 +1377,14 @@
|
|||||||
</summary>
|
</summary>
|
||||||
<returns></returns>
|
<returns></returns>
|
||||||
</member>
|
</member>
|
||||||
|
<member name="M:FreeSql.SqlExt.EqualIsNull``1(``0)">
|
||||||
|
<summary>
|
||||||
|
value1 IS NULL
|
||||||
|
</summary>
|
||||||
|
<typeparam name="TValue"></typeparam>
|
||||||
|
<param name="value1"></param>
|
||||||
|
<returns></returns>
|
||||||
|
</member>
|
||||||
<member name="M:FreeSql.SqlExt.Case">
|
<member name="M:FreeSql.SqlExt.Case">
|
||||||
<summary>
|
<summary>
|
||||||
case when .. then .. end
|
case when .. then .. end
|
||||||
|
@ -32,11 +32,15 @@ namespace FreeSql.Custom.Oracle
|
|||||||
|
|
||||||
sbunion.Append(_select);
|
sbunion.Append(_select);
|
||||||
if (_distinct) sbunion.Append("DISTINCT ");
|
if (_distinct) sbunion.Append("DISTINCT ");
|
||||||
sbunion.Append(field);
|
|
||||||
if (string.IsNullOrEmpty(_orderby) && _skip > 0) sbunion.Append(", ROWNUM AS \"__rownum__\"");
|
|
||||||
sbunion.Append(" \r\nFROM ");
|
|
||||||
var tbsjoin = _tables.Where(a => a.Type != SelectTableInfoType.From).ToArray();
|
var tbsjoin = _tables.Where(a => a.Type != SelectTableInfoType.From).ToArray();
|
||||||
var tbsfrom = _tables.Where(a => a.Type == SelectTableInfoType.From).ToArray();
|
var tbsfrom = _tables.Where(a => a.Type == SelectTableInfoType.From).ToArray();
|
||||||
|
|
||||||
|
var isRownum = string.IsNullOrEmpty(_orderby) && _skip > 0;
|
||||||
|
if (isRownum && field == "*") sbunion.Append(tbsfrom[0].Alias).Append("."); //#1519 bug
|
||||||
|
sbunion.Append(field);
|
||||||
|
if (isRownum) sbunion.Append(", ROWNUM AS \"__rownum__\"");
|
||||||
|
sbunion.Append(" \r\nFROM ");
|
||||||
|
|
||||||
for (var a = 0; a < tbsfrom.Length; a++)
|
for (var a = 0; a < tbsfrom.Length; a++)
|
||||||
{
|
{
|
||||||
sbunion.Append(_commonUtils.QuoteSqlName(tbUnion[tbsfrom[a].Table.Type])).Append(" ").Append(_aliasRule?.Invoke(tbsfrom[a].Table.Type, tbsfrom[a].Alias) ?? tbsfrom[a].Alias);
|
sbunion.Append(_commonUtils.QuoteSqlName(tbUnion[tbsfrom[a].Table.Type])).Append(" ").Append(_aliasRule?.Invoke(tbsfrom[a].Table.Type, tbsfrom[a].Alias) ?? tbsfrom[a].Alias);
|
||||||
|
@ -41,7 +41,7 @@ namespace FreeSql.Custom.SqlServer
|
|||||||
if (_distinct) sb.Append("DISTINCT ");
|
if (_distinct) sb.Append("DISTINCT ");
|
||||||
//if (_limit > 0) sb.Append("TOP ").Append(_skip + _limit).Append(" "); //TOP 会引发 __rownum__ 无序的问题
|
//if (_limit > 0) sb.Append("TOP ").Append(_skip + _limit).Append(" "); //TOP 会引发 __rownum__ 无序的问题
|
||||||
if (_skip <= 0 && _limit > 0) sb.Append("TOP ").Append(_limit).Append(" ");
|
if (_skip <= 0 && _limit > 0) sb.Append("TOP ").Append(_limit).Append(" ");
|
||||||
sb.Append(field);
|
var rownum = "";
|
||||||
|
|
||||||
if (_limit > 0 || _skip > 0)
|
if (_limit > 0 || _skip > 0)
|
||||||
{
|
{
|
||||||
@ -57,11 +57,14 @@ namespace FreeSql.Custom.SqlServer
|
|||||||
_orderby = _groupby.Replace("GROUP BY ", "ORDER BY ");
|
_orderby = _groupby.Replace("GROUP BY ", "ORDER BY ");
|
||||||
}
|
}
|
||||||
if (_skip > 0) // 注意这个判断,大于 0 才使用 ROW_NUMBER ,否则属于第一页直接使用 TOP
|
if (_skip > 0) // 注意这个判断,大于 0 才使用 ROW_NUMBER ,否则属于第一页直接使用 TOP
|
||||||
sb.Append(", ROW_NUMBER() OVER(").Append(_orderby.Trim('\r', '\n', ' ')).Append(") AS __rownum__");
|
rownum = $", ROW_NUMBER() OVER({_orderby.Trim('\r', '\n', ' ')}) AS __rownum__";
|
||||||
}
|
}
|
||||||
sb.Append(" \r\nFROM ");
|
|
||||||
var tbsjoin = _tables.Where(a => a.Type != SelectTableInfoType.From).ToArray();
|
var tbsjoin = _tables.Where(a => a.Type != SelectTableInfoType.From).ToArray();
|
||||||
var tbsfrom = _tables.Where(a => a.Type == SelectTableInfoType.From).ToArray();
|
var tbsfrom = _tables.Where(a => a.Type == SelectTableInfoType.From).ToArray();
|
||||||
|
if (string.IsNullOrEmpty(rownum) == false && field == "*")
|
||||||
|
sb.Append(tbsfrom[0].Alias).Append("."); //#1519 bug
|
||||||
|
sb.Append(field).Append(rownum);
|
||||||
|
sb.Append(" \r\nFROM ");
|
||||||
for (var a = 0; a < tbsfrom.Length; a++)
|
for (var a = 0; a < tbsfrom.Length; a++)
|
||||||
{
|
{
|
||||||
var alias = LocalGetTableAlias(tbsfrom[a].Table.Type, tbUnion[tbsfrom[a].Table.Type], tbsfrom[a].Alias, _aliasRule);
|
var alias = LocalGetTableAlias(tbsfrom[a].Table.Type, tbUnion[tbsfrom[a].Table.Type], tbsfrom[a].Alias, _aliasRule);
|
||||||
|
@ -32,11 +32,14 @@ namespace FreeSql.Dameng.Curd
|
|||||||
|
|
||||||
sbunion.Append(_select);
|
sbunion.Append(_select);
|
||||||
if (_distinct) sbunion.Append("DISTINCT ");
|
if (_distinct) sbunion.Append("DISTINCT ");
|
||||||
sbunion.Append(field);
|
|
||||||
if (string.IsNullOrEmpty(_orderby) && _skip > 0) sbunion.Append(", ROWNUM AS \"__rownum__\"");
|
|
||||||
sbunion.Append(" \r\nFROM ");
|
|
||||||
var tbsjoin = _tables.Where(a => a.Type != SelectTableInfoType.From).ToArray();
|
var tbsjoin = _tables.Where(a => a.Type != SelectTableInfoType.From).ToArray();
|
||||||
var tbsfrom = _tables.Where(a => a.Type == SelectTableInfoType.From).ToArray();
|
var tbsfrom = _tables.Where(a => a.Type == SelectTableInfoType.From).ToArray();
|
||||||
|
|
||||||
|
var isRownum = string.IsNullOrEmpty(_orderby) && _skip > 0;
|
||||||
|
if (isRownum && field == "*") sbunion.Append(tbsfrom[0].Alias).Append("."); //#1519 bug
|
||||||
|
sbunion.Append(field);
|
||||||
|
if (isRownum) sbunion.Append(", ROWNUM AS \"__rownum__\"");
|
||||||
|
sbunion.Append(" \r\nFROM ");
|
||||||
for (var a = 0; a < tbsfrom.Length; a++)
|
for (var a = 0; a < tbsfrom.Length; a++)
|
||||||
{
|
{
|
||||||
sbunion.Append(_commonUtils.QuoteSqlName(tbUnion[tbsfrom[a].Table.Type])).Append(" ").Append(_aliasRule?.Invoke(tbsfrom[a].Table.Type, tbsfrom[a].Alias) ?? tbsfrom[a].Alias);
|
sbunion.Append(_commonUtils.QuoteSqlName(tbUnion[tbsfrom[a].Table.Type])).Append(" ").Append(_aliasRule?.Invoke(tbsfrom[a].Table.Type, tbsfrom[a].Alias) ?? tbsfrom[a].Alias);
|
||||||
|
@ -32,11 +32,14 @@ namespace FreeSql.Odbc.Dameng
|
|||||||
|
|
||||||
sbunion.Append(_select);
|
sbunion.Append(_select);
|
||||||
if (_distinct) sbunion.Append("DISTINCT ");
|
if (_distinct) sbunion.Append("DISTINCT ");
|
||||||
sbunion.Append(field);
|
|
||||||
if (string.IsNullOrEmpty(_orderby) && _skip > 0) sbunion.Append(", ROWNUM AS \"__rownum__\"");
|
|
||||||
sbunion.Append(" \r\nFROM ");
|
|
||||||
var tbsjoin = _tables.Where(a => a.Type != SelectTableInfoType.From).ToArray();
|
var tbsjoin = _tables.Where(a => a.Type != SelectTableInfoType.From).ToArray();
|
||||||
var tbsfrom = _tables.Where(a => a.Type == SelectTableInfoType.From).ToArray();
|
var tbsfrom = _tables.Where(a => a.Type == SelectTableInfoType.From).ToArray();
|
||||||
|
|
||||||
|
var isRownum = string.IsNullOrEmpty(_orderby) && _skip > 0;
|
||||||
|
if (isRownum && field == "*") sbunion.Append(tbsfrom[0].Alias).Append("."); //#1519 bug
|
||||||
|
sbunion.Append(field);
|
||||||
|
if (isRownum) sbunion.Append(", ROWNUM AS \"__rownum__\"");
|
||||||
|
sbunion.Append(" \r\nFROM ");
|
||||||
for (var a = 0; a < tbsfrom.Length; a++)
|
for (var a = 0; a < tbsfrom.Length; a++)
|
||||||
{
|
{
|
||||||
sbunion.Append(_commonUtils.QuoteSqlName(tbUnion[tbsfrom[a].Table.Type])).Append(" ").Append(_aliasRule?.Invoke(tbsfrom[a].Table.Type, tbsfrom[a].Alias) ?? tbsfrom[a].Alias);
|
sbunion.Append(_commonUtils.QuoteSqlName(tbUnion[tbsfrom[a].Table.Type])).Append(" ").Append(_aliasRule?.Invoke(tbsfrom[a].Table.Type, tbsfrom[a].Alias) ?? tbsfrom[a].Alias);
|
||||||
|
@ -32,11 +32,14 @@ namespace FreeSql.Odbc.Oracle
|
|||||||
|
|
||||||
sbunion.Append(_select);
|
sbunion.Append(_select);
|
||||||
if (_distinct) sbunion.Append("DISTINCT ");
|
if (_distinct) sbunion.Append("DISTINCT ");
|
||||||
sbunion.Append(field);
|
|
||||||
if (string.IsNullOrEmpty(_orderby) && _skip > 0) sbunion.Append(", ROWNUM AS \"__rownum__\"");
|
|
||||||
sbunion.Append(" \r\nFROM ");
|
|
||||||
var tbsjoin = _tables.Where(a => a.Type != SelectTableInfoType.From).ToArray();
|
var tbsjoin = _tables.Where(a => a.Type != SelectTableInfoType.From).ToArray();
|
||||||
var tbsfrom = _tables.Where(a => a.Type == SelectTableInfoType.From).ToArray();
|
var tbsfrom = _tables.Where(a => a.Type == SelectTableInfoType.From).ToArray();
|
||||||
|
|
||||||
|
var isRownum = string.IsNullOrEmpty(_orderby) && _skip > 0;
|
||||||
|
if (isRownum && field == "*") sbunion.Append(tbsfrom[0].Alias).Append("."); //#1519 bug
|
||||||
|
sbunion.Append(field);
|
||||||
|
if (isRownum) sbunion.Append(", ROWNUM AS \"__rownum__\"");
|
||||||
|
sbunion.Append(" \r\nFROM ");
|
||||||
for (var a = 0; a < tbsfrom.Length; a++)
|
for (var a = 0; a < tbsfrom.Length; a++)
|
||||||
{
|
{
|
||||||
sbunion.Append(_commonUtils.QuoteSqlName(tbUnion[tbsfrom[a].Table.Type])).Append(" ").Append(_aliasRule?.Invoke(tbsfrom[a].Table.Type, tbsfrom[a].Alias) ?? tbsfrom[a].Alias);
|
sbunion.Append(_commonUtils.QuoteSqlName(tbUnion[tbsfrom[a].Table.Type])).Append(" ").Append(_aliasRule?.Invoke(tbsfrom[a].Table.Type, tbsfrom[a].Alias) ?? tbsfrom[a].Alias);
|
||||||
|
@ -41,7 +41,7 @@ namespace FreeSql.Odbc.SqlServer
|
|||||||
if (_distinct) sb.Append("DISTINCT ");
|
if (_distinct) sb.Append("DISTINCT ");
|
||||||
//if (_limit > 0) sb.Append("TOP ").Append(_skip + _limit).Append(" "); //TOP 会引发 __rownum__ 无序的问题
|
//if (_limit > 0) sb.Append("TOP ").Append(_skip + _limit).Append(" "); //TOP 会引发 __rownum__ 无序的问题
|
||||||
if (_skip <= 0 && _limit > 0) sb.Append("TOP ").Append(_limit).Append(" ");
|
if (_skip <= 0 && _limit > 0) sb.Append("TOP ").Append(_limit).Append(" ");
|
||||||
sb.Append(field);
|
var rownum = "";
|
||||||
|
|
||||||
if (_limit > 0 || _skip > 0)
|
if (_limit > 0 || _skip > 0)
|
||||||
{
|
{
|
||||||
@ -57,11 +57,14 @@ namespace FreeSql.Odbc.SqlServer
|
|||||||
_orderby = _groupby.Replace("GROUP BY ", "ORDER BY ");
|
_orderby = _groupby.Replace("GROUP BY ", "ORDER BY ");
|
||||||
}
|
}
|
||||||
if (_skip > 0) // 注意这个判断,大于 0 才使用 ROW_NUMBER ,否则属于第一页直接使用 TOP
|
if (_skip > 0) // 注意这个判断,大于 0 才使用 ROW_NUMBER ,否则属于第一页直接使用 TOP
|
||||||
sb.Append(", ROW_NUMBER() OVER(").Append(_orderby.Trim('\r', '\n', ' ')).Append(") AS __rownum__");
|
rownum = $", ROW_NUMBER() OVER({_orderby.Trim('\r', '\n', ' ')}) AS __rownum__";
|
||||||
}
|
}
|
||||||
sb.Append(" \r\nFROM ");
|
|
||||||
var tbsjoin = _tables.Where(a => a.Type != SelectTableInfoType.From).ToArray();
|
var tbsjoin = _tables.Where(a => a.Type != SelectTableInfoType.From).ToArray();
|
||||||
var tbsfrom = _tables.Where(a => a.Type == SelectTableInfoType.From).ToArray();
|
var tbsfrom = _tables.Where(a => a.Type == SelectTableInfoType.From).ToArray();
|
||||||
|
if (string.IsNullOrEmpty(rownum) == false && field == "*")
|
||||||
|
sb.Append(tbsfrom[0].Alias).Append("."); //#1519 bug
|
||||||
|
sb.Append(field).Append(rownum);
|
||||||
|
sb.Append(" \r\nFROM ");
|
||||||
for (var a = 0; a < tbsfrom.Length; a++)
|
for (var a = 0; a < tbsfrom.Length; a++)
|
||||||
{
|
{
|
||||||
var alias = LocalGetTableAlias(tbsfrom[a].Table.Type, tbUnion[tbsfrom[a].Table.Type], tbsfrom[a].Alias, _aliasRule);
|
var alias = LocalGetTableAlias(tbsfrom[a].Table.Type, tbUnion[tbsfrom[a].Table.Type], tbsfrom[a].Alias, _aliasRule);
|
||||||
|
@ -32,11 +32,15 @@ namespace FreeSql.Oracle.Curd
|
|||||||
|
|
||||||
sbunion.Append(_select);
|
sbunion.Append(_select);
|
||||||
if (_distinct) sbunion.Append("DISTINCT ");
|
if (_distinct) sbunion.Append("DISTINCT ");
|
||||||
sbunion.Append(field);
|
|
||||||
if (string.IsNullOrEmpty(_orderby) && _skip > 0) sbunion.Append(", ROWNUM AS \"__rownum__\"");
|
|
||||||
sbunion.Append(" \r\nFROM ");
|
|
||||||
var tbsjoin = _tables.Where(a => a.Type != SelectTableInfoType.From).ToArray();
|
var tbsjoin = _tables.Where(a => a.Type != SelectTableInfoType.From).ToArray();
|
||||||
var tbsfrom = _tables.Where(a => a.Type == SelectTableInfoType.From).ToArray();
|
var tbsfrom = _tables.Where(a => a.Type == SelectTableInfoType.From).ToArray();
|
||||||
|
|
||||||
|
var isRownum = string.IsNullOrEmpty(_orderby) && _skip > 0;
|
||||||
|
if (isRownum && field == "*") sbunion.Append(tbsfrom[0].Alias).Append("."); //#1519 bug
|
||||||
|
sbunion.Append(field);
|
||||||
|
if (isRownum) sbunion.Append(", ROWNUM AS \"__rownum__\"");
|
||||||
|
sbunion.Append(" \r\nFROM ");
|
||||||
|
|
||||||
for (var a = 0; a < tbsfrom.Length; a++)
|
for (var a = 0; a < tbsfrom.Length; a++)
|
||||||
{
|
{
|
||||||
sbunion.Append(_commonUtils.QuoteSqlName(tbUnion[tbsfrom[a].Table.Type])).Append(" ").Append(_aliasRule?.Invoke(tbsfrom[a].Table.Type, tbsfrom[a].Alias) ?? tbsfrom[a].Alias);
|
sbunion.Append(_commonUtils.QuoteSqlName(tbUnion[tbsfrom[a].Table.Type])).Append(" ").Append(_aliasRule?.Invoke(tbsfrom[a].Table.Type, tbsfrom[a].Alias) ?? tbsfrom[a].Alias);
|
||||||
|
@ -41,7 +41,7 @@ namespace FreeSql.SqlServer.Curd
|
|||||||
if (_distinct) sb.Append("DISTINCT ");
|
if (_distinct) sb.Append("DISTINCT ");
|
||||||
//if (_limit > 0) sb.Append("TOP ").Append(_skip + _limit).Append(" "); //TOP 会引发 __rownum__ 无序的问题
|
//if (_limit > 0) sb.Append("TOP ").Append(_skip + _limit).Append(" "); //TOP 会引发 __rownum__ 无序的问题
|
||||||
if (_skip <= 0 && _limit > 0) sb.Append("TOP ").Append(_limit).Append(" ");
|
if (_skip <= 0 && _limit > 0) sb.Append("TOP ").Append(_limit).Append(" ");
|
||||||
sb.Append(field);
|
var rownum = "";
|
||||||
|
|
||||||
if (_limit > 0 || _skip > 0)
|
if (_limit > 0 || _skip > 0)
|
||||||
{
|
{
|
||||||
@ -57,11 +57,14 @@ namespace FreeSql.SqlServer.Curd
|
|||||||
_orderby = _groupby.Replace("GROUP BY ", "ORDER BY ");
|
_orderby = _groupby.Replace("GROUP BY ", "ORDER BY ");
|
||||||
}
|
}
|
||||||
if (_skip > 0) // 注意这个判断,大于 0 才使用 ROW_NUMBER ,否则属于第一页直接使用 TOP
|
if (_skip > 0) // 注意这个判断,大于 0 才使用 ROW_NUMBER ,否则属于第一页直接使用 TOP
|
||||||
sb.Append(", ROW_NUMBER() OVER(").Append(_orderby.Trim('\r', '\n', ' ')).Append(") AS __rownum__");
|
rownum = $", ROW_NUMBER() OVER({_orderby.Trim('\r', '\n', ' ')}) AS __rownum__";
|
||||||
}
|
}
|
||||||
sb.Append(" \r\nFROM ");
|
|
||||||
var tbsjoin = _tables.Where(a => a.Type != SelectTableInfoType.From).ToArray();
|
var tbsjoin = _tables.Where(a => a.Type != SelectTableInfoType.From).ToArray();
|
||||||
var tbsfrom = _tables.Where(a => a.Type == SelectTableInfoType.From).ToArray();
|
var tbsfrom = _tables.Where(a => a.Type == SelectTableInfoType.From).ToArray();
|
||||||
|
if (string.IsNullOrEmpty(rownum) == false && field == "*")
|
||||||
|
sb.Append(tbsfrom[0].Alias).Append("."); //#1519 bug
|
||||||
|
sb.Append(field).Append(rownum);
|
||||||
|
sb.Append(" \r\nFROM ");
|
||||||
for (var a = 0; a < tbsfrom.Length; a++)
|
for (var a = 0; a < tbsfrom.Length; a++)
|
||||||
{
|
{
|
||||||
var alias = LocalGetTableAlias(tbsfrom[a].Table.Type, tbUnion[tbsfrom[a].Table.Type], tbsfrom[a].Alias, _aliasRule);
|
var alias = LocalGetTableAlias(tbsfrom[a].Table.Type, tbUnion[tbsfrom[a].Table.Type], tbsfrom[a].Alias, _aliasRule);
|
||||||
|
Loading…
x
Reference in New Issue
Block a user