Skip to content
This repository was archived by the owner on Dec 24, 2022. It is now read-only.

Commit bb7ee31

Browse files
committed
Merge pull request #316 from jamescrowley/limit
Fixed SQL Server support for LIMIT and DISTINCT
2 parents e2b3367 + d19d7a7 commit bb7ee31

File tree

2 files changed

+11
-2
lines changed

2 files changed

+11
-2
lines changed

src/ServiceStack.OrmLite.SqlServer/SqlServerExpressionVisitor.cs

Lines changed: 3 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -26,7 +26,9 @@ public override string ToSelectStatement()
2626

2727
sql = base.ToSelectStatement();
2828
if (sql == null || sql.Length < "SELECT".Length) return sql;
29-
sql = "SELECT TOP " + take + " " + sql.Substring("SELECT".Length, sql.Length - "SELECT".Length);
29+
bool hasDistinctInBaseQuery = sql.StartsWithIgnoreCase("SELECT DISTINCT");
30+
string stringToRemoveFromBaseQuery = hasDistinctInBaseQuery ? "SELECT DISTINCT" : "SELECT";
31+
sql = stringToRemoveFromBaseQuery + " TOP " + take + " " + sql.Substring(stringToRemoveFromBaseQuery.Length, sql.Length - stringToRemoveFromBaseQuery.Length);
3032
return sql;
3133
}
3234

src/ServiceStack.OrmLite.SqlServerTests/Expressions/AuthorUseCase.cs

Lines changed: 8 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -224,12 +224,19 @@ public void AuthorUsesCases()
224224
Assert.AreEqual("Rodger Contreras".ToUpper(), author.Name);
225225

226226
// select distinct..
227-
ev.Limit().OrderBy(); // clear limit, clear order for postres
227+
ev.Limit().OrderBy(); // clear limit, clear orde
228228
ev.SelectDistinct(r => r.City);
229229
expected = 6;
230230
result = db.Select(ev);
231231
Assert.AreEqual(expected, result.Count);
232232

233+
// select distinct with limit
234+
ev.Limit(0, 4);
235+
ev.SelectDistinct(r => r.City);
236+
expected = 4;
237+
result = db.Select(ev);
238+
Assert.AreEqual(expected, result.Count);
239+
233240
ev.Select(r => Sql.As(Sql.Max(r.Birthday), "Birthday"));
234241
result = db.Select(ev);
235242
var expectedResult = authors.Max(r => r.Birthday);

0 commit comments

Comments
 (0)