Skip to content

Commit 98e303e

Browse files
committed
Fixes issue ThatRendle#250
1 parent 586cb43 commit 98e303e

2 files changed

Lines changed: 19 additions & 3 deletions

File tree

Simple.Data.SqlServer/SqlQueryPager.cs

Lines changed: 4 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -11,16 +11,17 @@ namespace Simple.Data.SqlServer
1111
[Export(typeof(IQueryPager))]
1212
public class SqlQueryPager : IQueryPager
1313
{
14-
private static readonly Regex ColumnExtract = new Regex(@"SELECT\s*(.*)\s*(FROM.*)", RegexOptions.Multiline | RegexOptions.IgnoreCase);
14+
private static readonly Regex ColumnExtract = new Regex(@"SELECT\s*(.*)\s*(\sFROM.*)", RegexOptions.Multiline | RegexOptions.IgnoreCase);
1515
private static readonly Regex SelectMatch = new Regex(@"^SELECT\s*(DISTINCT)?", RegexOptions.IgnoreCase);
1616

1717
public IEnumerable<string> ApplyLimit(string sql, int take)
1818
{
1919
yield return SelectMatch.Replace(sql, match => match.Value + " TOP " + take + " ");
2020
}
2121

22-
public IEnumerable<string> ApplyPaging(string sql, string[] keys, int skip, int take)
23-
{
22+
public IEnumerable<string> ApplyPaging(string sql, string[] keys, int skip, int take)
23+
{
24+
sql = sql.Replace(Environment.NewLine, " ");
2425
var builder = new StringBuilder("WITH __Data AS (SELECT ");
2526

2627
var match = ColumnExtract.Match(sql);

Simple.Data.SqlTest/SqlQueryPagerTest.cs

Lines changed: 15 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -77,6 +77,21 @@ public void ShouldCopeWithAliasedColumns()
7777
var modified = pagedSql.Select(x => Normalize.Replace(x, " ").ToLowerInvariant()).ToArray();
7878

7979
Assert.AreEqual(expected[0], modified[0]);
80+
}
81+
82+
[Test]
83+
public void ShouldCopeWithColumnsThatEndInFrom()
84+
{
85+
const string sql = @"SELECT [dbo].[PromoPosts].[Id],[dbo].[PromoPosts].[ActiveFrom],[dbo].[PromoPosts].[ActiveTo],[dbo].[PromoPosts].[Created],[dbo].[PromoPosts].[Updated]
86+
from [dbo].[PromoPosts]
87+
ORDER BY [dbo].[PromoPosts].[ActiveFrom]";
88+
89+
var expected = @"WITH __Data AS (SELECT [dbo].[PromoPosts].[Id],[dbo].[PromoPosts].[ActiveFrom],[dbo].[PromoPosts].[ActiveTo],[dbo].[PromoPosts].[Created],[dbo].[PromoPosts].[Updated],ROW_NUMBER() OVER(ORDER BY [dbo].[PromoPosts].[ActiveFrom]) AS [_#_] from [dbo].[PromoPosts]) SELECT [Id],[ActiveFrom],[ActiveTo],[Created],[Updated] FROM __Data WHERE [_#_] BETWEEN 1 AND 25";
90+
expected = expected.ToLowerInvariant();
91+
92+
var pagedSql = new SqlQueryPager().ApplyPaging(sql, new[] {"[dbo].[PromoPosts].[Id]"}, 0, 25).Single();
93+
var modified = Normalize.Replace(pagedSql, " ").ToLowerInvariant();
94+
Assert.AreEqual(expected, modified);
8095
}
8196
}
8297
}

0 commit comments

Comments
 (0)