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

Commit f45700e

Browse files
committed
Add SqlExpressionTests
1 parent 3c097ce commit f45700e

File tree

1 file changed

+88
-1
lines changed

1 file changed

+88
-1
lines changed

tests/ServiceStack.OrmLite.Tests/Expression/SqlExpressionTests.cs

Lines changed: 88 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,5 @@
1-
using System.Collections.Generic;
1+
using System;
2+
using System.Collections.Generic;
23
using System.Data;
34
using NUnit.Framework;
45
using ServiceStack.DataAnnotations;
@@ -14,6 +15,12 @@ public class LetterFrequency
1415
public string Letter { get; set; }
1516
}
1617

18+
public class LetterWeighting
19+
{
20+
public long LetterFrequencyId { get; set; }
21+
public int Weighting { get; set; }
22+
}
23+
1724
public class SqlExpressionTests : ExpressionsTestBase
1825
{
1926
private static void InitLetters(IDbConnection db)
@@ -70,5 +77,85 @@ public void Can_select_ColumnDistinct_with_SqlExpression()
7077
Assert.That(uniqueLetters.EquivalentTo(new[] { "A", "B", "C" }));
7178
}
7279
}
80+
81+
[Test]
82+
public void Can_select_limit_with_SqlExpression()
83+
{
84+
using (var db = OpenDbConnection())
85+
{
86+
db.DropAndCreateTable<LetterFrequency>();
87+
db.DropAndCreateTable<LetterWeighting>();
88+
89+
var letters = "A,B,C,D,E".Split(',');
90+
var i = 0;
91+
letters.Each(letter =>
92+
{
93+
var id = db.Insert(new LetterFrequency { Letter = letter }, selectIdentity: true);
94+
db.Insert(new LetterWeighting { LetterFrequencyId = id, Weighting = ++i * 10 });
95+
});
96+
97+
var results = db.Select(db.From<LetterFrequency>().Limit(3));
98+
Assert.That(results.Count, Is.EqualTo(3));
99+
100+
results = db.Select(db.From<LetterFrequency>().Skip(3));
101+
Assert.That(results.Count, Is.EqualTo(2));
102+
103+
results = db.Select(db.From<LetterFrequency>().Limit(1, 2));
104+
Assert.That(results.Count, Is.EqualTo(2));
105+
Assert.That(results.ConvertAll(x => x.Letter), Is.EquivalentTo(new[] { "B", "C" }));
106+
107+
results = db.Select(db.From<LetterFrequency>().Skip(1).Take(2));
108+
Assert.That(results.ConvertAll(x => x.Letter), Is.EquivalentTo(new[] { "B", "C" }));
109+
110+
results = db.Select(db.From<LetterFrequency>()
111+
.OrderByDescending(x => x.Letter)
112+
.Skip(1).Take(2));
113+
Assert.That(results.ConvertAll(x => x.Letter), Is.EquivalentTo(new[] { "D", "C" }));
114+
}
115+
}
116+
117+
[Test]
118+
public void Can_select_limit_with_JoinSqlBuilder()
119+
{
120+
using (var db = OpenDbConnection())
121+
{
122+
db.DropAndCreateTable<LetterFrequency>();
123+
db.DropAndCreateTable<LetterWeighting>();
124+
125+
var letters = "A,B,C,D,E".Split(',');
126+
var i = 0;
127+
letters.Each(letter =>
128+
{
129+
var id = db.Insert(new LetterFrequency { Letter = letter }, selectIdentity: true);
130+
db.Insert(new LetterWeighting { LetterFrequencyId = id, Weighting = ++i * 10 });
131+
});
132+
133+
var joinFn = new Func<JoinSqlBuilder<LetterFrequency, LetterWeighting>>(() =>
134+
new JoinSqlBuilder<LetterFrequency, LetterWeighting>()
135+
.Join<LetterFrequency, LetterWeighting>(x => x.Id, x => x.LetterFrequencyId)
136+
);
137+
138+
var results = db.Select<LetterFrequency>(joinFn());
139+
Assert.That(results.Count, Is.EqualTo(5));
140+
141+
results = db.Select<LetterFrequency>(joinFn().Limit(3));
142+
Assert.That(results.Count, Is.EqualTo(3));
143+
144+
results = db.Select<LetterFrequency>(joinFn().Skip(3));
145+
Assert.That(results.Count, Is.EqualTo(2));
146+
147+
results = db.Select<LetterFrequency>(joinFn().Limit(1, 2));
148+
Assert.That(results.Count, Is.EqualTo(2));
149+
Assert.That(results.ConvertAll(x => x.Letter), Is.EquivalentTo(new[] { "B", "C" }));
150+
151+
results = db.Select<LetterFrequency>(joinFn().Skip(1).Take(2));
152+
Assert.That(results.ConvertAll(x => x.Letter), Is.EquivalentTo(new[] { "B", "C" }));
153+
154+
results = db.Select<LetterFrequency>(joinFn()
155+
.OrderByDescending<LetterFrequency>(x => x.Letter)
156+
.Skip(1).Take(2));
157+
Assert.That(results.ConvertAll(x => x.Letter), Is.EquivalentTo(new[] { "D", "C" }));
158+
}
159+
}
73160
}
74161
}

0 commit comments

Comments
 (0)