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

Commit 54f2ece

Browse files
committed
Add async version of CustomSqlTests
1 parent dceb2f3 commit 54f2ece

File tree

2 files changed

+102
-0
lines changed

2 files changed

+102
-0
lines changed
Lines changed: 101 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,101 @@
1+
using System.Data;
2+
using System.Threading.Tasks;
3+
using NUnit.Framework;
4+
using ServiceStack.DataAnnotations;
5+
6+
namespace ServiceStack.OrmLite.Tests
7+
{
8+
public class LetterFrequency
9+
{
10+
[AutoIncrement]
11+
public int Id { get; set; }
12+
13+
public string Letter { get; set; }
14+
}
15+
16+
[TestFixture]
17+
public class CustomSqlTestsAsync : OrmLiteTestBase
18+
{
19+
private const string DropProcedureSql = @"
20+
IF OBJECT_ID('spSearchLetters') IS NOT NULL
21+
DROP PROCEDURE spSearchLetters";
22+
23+
private const string CreateProcedureSql = @"
24+
CREATE PROCEDURE spSearchLetters
25+
(
26+
@pLetter varchar(10),
27+
@pTotal int OUT
28+
)
29+
AS
30+
BEGIN
31+
SELECT @pTotal = COUNT(*) FROM LetterFrequency WHERE Letter = @pLetter
32+
SELECT * FROM LetterFrequency WHERE Letter = @pLetter
33+
END";
34+
35+
[Test]
36+
public async Task Can_execute_stored_procedure_using_SqlList_with_out_params()
37+
{
38+
using (var db = OpenDbConnection())
39+
{
40+
db.DropAndCreateTable<LetterFrequency>();
41+
42+
var rows = "A,B,B,C,C,C,D,D,E".Split(',').Map(x => new LetterFrequency { Letter = x });
43+
await db.InsertAllAsync(rows);
44+
45+
await db.ExecuteSqlAsync(DropProcedureSql);
46+
await db.ExecuteSqlAsync(CreateProcedureSql);
47+
48+
IDbDataParameter pTotal = null;
49+
var results = await db.SqlListAsync<LetterFrequency>("spSearchLetters",
50+
cmd => {
51+
cmd.CommandType = CommandType.StoredProcedure;
52+
cmd.AddParam("pLetter", "C");
53+
pTotal = cmd.AddParam("pTotal", direction: ParameterDirection.Output);
54+
});
55+
56+
Assert.That(results.Count, Is.EqualTo(3));
57+
Assert.That(pTotal.Value, Is.EqualTo("3"));
58+
}
59+
}
60+
61+
[Test]
62+
public async Task Can_execute_stored_procedure_using_SqlProc_with_out_params()
63+
{
64+
using (var db = OpenDbConnection())
65+
{
66+
db.DropAndCreateTable<LetterFrequency>();
67+
68+
var rows = "A,B,B,C,C,C,D,D,E".Split(',').Map(x => new LetterFrequency { Letter = x });
69+
await db.InsertAllAsync(rows);
70+
71+
await db.ExecuteSqlAsync(DropProcedureSql);
72+
await db.ExecuteSqlAsync(CreateProcedureSql);
73+
74+
var cmd = db.SqlProc("spSearchLetters", new { pLetter = "C" });
75+
76+
Assert.That(((OrmLiteCommand)cmd).IsDisposed, Is.False);
77+
78+
var pTotal = cmd.AddParam("pTotal", direction: ParameterDirection.Output);
79+
var results = await cmd.ConvertToListAsync<LetterFrequency>();
80+
81+
Assert.That(results.Count, Is.EqualTo(3));
82+
Assert.That(pTotal.Value, Is.EqualTo("3"));
83+
}
84+
}
85+
86+
[Test]
87+
public async Task Can_execute_stored_proceduce_returning_scalars()
88+
{
89+
using (var db = OpenDbConnection())
90+
{
91+
using (var cmd = db.SqlProc(
92+
"GetUserIdsFromEmailAddresses", new { EmailAddresses = "[email protected]" }))
93+
{
94+
var userIds = await cmd.ConvertToListAsync<int>();
95+
96+
Assert.That(userIds.Count, Is.GreaterThan(0));
97+
}
98+
}
99+
}
100+
}
101+
}

tests/ServiceStack.OrmLiteV45.Tests/ServiceStack.OrmLiteV45.Tests.csproj

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -68,6 +68,7 @@
6868
<Compile Include="ApiSqlServerTestsAsync.cs" />
6969
<Compile Include="AsyncTests.cs" />
7070
<Compile Include="ApiMySqlTestsAsync.cs" />
71+
<Compile Include="CustomSqlTestsAsync.cs" />
7172
<Compile Include="LoadReferencesTests.cs" />
7273
<Compile Include="OrmLiteContextTests.cs" />
7374
<Compile Include="OrmLiteTestBase.cs" />

0 commit comments

Comments
 (0)