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

Commit 01f6978

Browse files
committed
Added SqlServerProviderTestsAsync tests
1 parent 4dfbee9 commit 01f6978

File tree

2 files changed

+259
-0
lines changed

2 files changed

+259
-0
lines changed

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

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -80,6 +80,7 @@
8080
<SubType>Code</SubType>
8181
</Compile>
8282
<Compile Include="SqlExpressionTests.cs" />
83+
<Compile Include="SqlServerProviderTestsAsync.cs" />
8384
<Compile Include="T4\OrmLite.Poco.cs">
8485
<AutoGen>True</AutoGen>
8586
<DesignTime>True</DesignTime>
Lines changed: 258 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,258 @@
1+
using System.Collections.Generic;
2+
using System.Data;
3+
using System.Linq;
4+
using System.Threading.Tasks;
5+
using NUnit.Framework;
6+
using ServiceStack.Text;
7+
8+
namespace ServiceStack.OrmLite.Tests
9+
{
10+
public class DummyTable
11+
{
12+
public int Id { get; set; }
13+
public string Name { get; set; }
14+
}
15+
16+
[TestFixture]
17+
public class SqlServerProviderTestsAsync
18+
{
19+
private IDbConnection db;
20+
21+
[TestFixtureSetUp]
22+
public void TestFixtureSetUp()
23+
{
24+
db = Config.OpenDbConnection();
25+
}
26+
27+
[TestFixtureTearDown]
28+
public void TearDown()
29+
{
30+
db.Dispose();
31+
}
32+
33+
[Test]
34+
public async Task Can_SqlList_StoredProc_returning_Table_Async()
35+
{
36+
var sql = @"CREATE PROCEDURE dbo.DummyTable
37+
@Times integer
38+
AS
39+
BEGIN
40+
SET NOCOUNT ON;
41+
42+
CREATE TABLE #Temp
43+
(
44+
Id integer NOT NULL,
45+
Name nvarchar(50) COLLATE DATABASE_DEFAULT NOT NULL
46+
);
47+
48+
declare @i int
49+
set @i=1
50+
WHILE @i < @Times
51+
BEGIN
52+
INSERT INTO #Temp (Id, Name) VALUES (@i, CAST(@i as nvarchar))
53+
SET @i = @i + 1
54+
END
55+
56+
SELECT * FROM #Temp;
57+
58+
DROP TABLE #Temp;
59+
END;";
60+
await db.ExecuteSqlAsync("IF OBJECT_ID('DummyTable') IS NOT NULL DROP PROC DummyTable");
61+
await db.ExecuteSqlAsync(sql);
62+
63+
var expected = 0;
64+
10.Times(i => expected += i);
65+
66+
var results = await db.SqlListAsync<DummyTable>("EXEC DummyTable @Times", new { Times = 10 });
67+
results.PrintDump();
68+
Assert.That(results.Sum(x => x.Id), Is.EqualTo(expected));
69+
70+
results = await db.SqlListAsync<DummyTable>("EXEC DummyTable 10");
71+
Assert.That(results.Sum(x => x.Id), Is.EqualTo(expected));
72+
73+
results = await db.SqlListAsync<DummyTable>("EXEC DummyTable @Times", new Dictionary<string, object> { { "Times", 10 } });
74+
Assert.That(results.Sum(x => x.Id), Is.EqualTo(expected));
75+
}
76+
77+
[Test]
78+
public async Task Can_SqlColumn_StoredProc_returning_Column_Async()
79+
{
80+
var sql = @"CREATE PROCEDURE dbo.DummyColumn
81+
@Times integer
82+
AS
83+
BEGIN
84+
SET NOCOUNT ON;
85+
86+
CREATE TABLE #Temp
87+
(
88+
Id integer NOT NULL,
89+
);
90+
91+
declare @i int
92+
set @i=1
93+
WHILE @i < @Times
94+
BEGIN
95+
INSERT INTO #Temp (Id) VALUES (@i)
96+
SET @i = @i + 1
97+
END
98+
99+
SELECT * FROM #Temp;
100+
101+
DROP TABLE #Temp;
102+
END;";
103+
await db.ExecuteSqlAsync("IF OBJECT_ID('DummyColumn') IS NOT NULL DROP PROC DummyColumn");
104+
await db.ExecuteSqlAsync(sql);
105+
106+
var expected = 0;
107+
10.Times(i => expected += i);
108+
109+
var results = await db.SqlColumnAsync<int>("EXEC DummyColumn @Times", new { Times = 10 });
110+
results.PrintDump();
111+
Assert.That(results.Sum(), Is.EqualTo(expected));
112+
113+
results = await db.SqlColumnAsync<int>("EXEC DummyColumn 10");
114+
Assert.That(results.Sum(), Is.EqualTo(expected));
115+
116+
results = await db.SqlColumnAsync<int>("EXEC DummyColumn @Times", new Dictionary<string, object> { { "Times", 10 } });
117+
Assert.That(results.Sum(), Is.EqualTo(expected));
118+
}
119+
120+
[Test]
121+
public async Task Can_SqlColumn_StoredProc_returning_StringColumn_Async()
122+
{
123+
var sql = @"CREATE PROCEDURE dbo.DummyColumn
124+
@Times integer
125+
AS
126+
BEGIN
127+
SET NOCOUNT ON;
128+
129+
CREATE TABLE #Temp
130+
(
131+
Name nvarchar(50) not null
132+
);
133+
134+
declare @i int
135+
set @i=0
136+
WHILE @i < @Times
137+
BEGIN
138+
INSERT INTO #Temp (Name) VALUES (CAST(NEWID() AS nvarchar(50)))
139+
SET @i = @i + 1
140+
END
141+
142+
SELECT * FROM #Temp;
143+
144+
DROP TABLE #Temp;
145+
END;";
146+
await db.ExecuteSqlAsync("IF OBJECT_ID('DummyColumn') IS NOT NULL DROP PROC DummyColumn");
147+
await db.ExecuteSqlAsync(sql);
148+
149+
// This produces a compiler error
150+
var results = await db.SqlColumnAsync<string>("EXEC DummyColumn @Times", new { Times = 10 });
151+
results.PrintDump();
152+
Assert.That(results.Count, Is.EqualTo(10));
153+
}
154+
155+
[Test]
156+
public async Task Can_SqlScalar_StoredProc_returning_Scalar_Async()
157+
{
158+
var sql = @"CREATE PROCEDURE dbo.DummyScalar
159+
@Times integer
160+
AS
161+
BEGIN
162+
SET NOCOUNT ON;
163+
164+
SELECT @Times AS Id
165+
END;";
166+
await db.ExecuteSqlAsync("IF OBJECT_ID('DummyScalar') IS NOT NULL DROP PROC DummyScalar");
167+
await db.ExecuteSqlAsync(sql);
168+
169+
const int expected = 10;
170+
171+
var result = await db.SqlScalarAsync<int>("EXEC DummyScalar @Times", new { Times = 10 });
172+
result.PrintDump();
173+
Assert.That(result, Is.EqualTo(expected));
174+
175+
result = await db.SqlScalarAsync<int>("EXEC DummyScalar 10");
176+
Assert.That(result, Is.EqualTo(expected));
177+
178+
result = await db.SqlScalarAsync<int>("EXEC DummyScalar @Times", new Dictionary<string, object> { { "Times", 10 } });
179+
Assert.That(result, Is.EqualTo(expected));
180+
181+
result = await db.SqlScalarAsync<int>("SELECT 10");
182+
Assert.That(result, Is.EqualTo(expected));
183+
}
184+
185+
[Test]
186+
public async Task Can_SqlScalar_StoredProc_passing_null_parameter_Async()
187+
{
188+
const string sql = @"CREATE PROCEDURE dbo.DummyScalar
189+
@Times integer
190+
AS
191+
BEGIN
192+
SET NOCOUNT ON;
193+
194+
SELECT @Times AS Id
195+
END;";
196+
await db.ExecuteSqlAsync("IF OBJECT_ID('DummyScalar') IS NOT NULL DROP PROC DummyScalar");
197+
await db.ExecuteSqlAsync(sql);
198+
199+
var result = await db.SqlScalarAsync<int?>("EXEC DummyScalar @Times", new { Times = (int?)null });
200+
Assert.That(result, Is.Null);
201+
202+
result = await db.SqlScalarAsync<int?>("EXEC DummyScalar NULL");
203+
Assert.That(result, Is.Null);
204+
205+
result = await db.SqlScalarAsync<int?>("EXEC DummyScalar @Times", new Dictionary<string, object> { { "Times", null } });
206+
Assert.That(result, Is.Null);
207+
208+
result = await db.SqlScalarAsync<int?>("SELECT NULL");
209+
Assert.That(result, Is.Null);
210+
}
211+
212+
[Test]
213+
public async Task Can_SqlList_StoredProc_passing_null_parameter_Async()
214+
{
215+
const string sql = @"CREATE PROCEDURE dbo.DummyProc
216+
@Name nvarchar(50)
217+
AS
218+
BEGIN
219+
SET NOCOUNT ON;
220+
221+
SELECT 1 AS Id, 'Name_1' AS Name WHERE @Name IS NULL
222+
UNION ALL
223+
SELECT 2 AS Id, 'Name_2' AS Name WHERE @Name IS NOT NULL
224+
UNION ALL
225+
SELECT 3 AS Id, 'Name_3' AS Name WHERE @Name IS NULL
226+
227+
END;";
228+
await db.ExecuteSqlAsync("IF OBJECT_ID('DummyProc') IS NOT NULL DROP PROC DummyProc");
229+
await db.ExecuteSqlAsync(sql);
230+
231+
var results = await db.SqlColumnAsync<DummyTable>("EXEC DummyProc @Name", new { Name = (string)null });
232+
Assert.That(results.Count, Is.EqualTo(2));
233+
Assert.That(results[0].Name, Is.EqualTo("Name_1"));
234+
Assert.That(results[1].Name, Is.EqualTo("Name_3"));
235+
}
236+
237+
[Test]
238+
public async Task Can_SqlList_StoredProc_receiving_only_first_column_and_null_Async()
239+
{
240+
const string sql = @"CREATE PROCEDURE dbo.DummyScalar
241+
AS
242+
BEGIN
243+
SET NOCOUNT ON;
244+
245+
SELECT NULL AS Id, 'Name_1' AS Name
246+
UNION ALL
247+
SELECT NULL AS Id, 'Name_2' AS Name
248+
END;";
249+
await db.ExecuteSqlAsync("IF OBJECT_ID('DummyScalar') IS NOT NULL DROP PROC DummyScalar");
250+
await db.ExecuteSqlAsync(sql);
251+
252+
var results = await db.SqlColumnAsync<int?>("EXEC DummyScalar");
253+
Assert.That(results.Count, Is.EqualTo(2));
254+
Assert.That(results[0], Is.Null);
255+
Assert.That(results[1], Is.Null);
256+
}
257+
}
258+
}

0 commit comments

Comments
 (0)