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

Commit d8a7820

Browse files
committed
Add MySqlExecFilter example
1 parent 399c5bd commit d8a7820

File tree

1 file changed

+66
-30
lines changed

1 file changed

+66
-30
lines changed
Lines changed: 66 additions & 30 deletions
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,11 @@
1-
using System.Data;
1+
using System;
2+
using System.Collections.Generic;
3+
using System.Data;
4+
using System.Linq;
5+
using MySql.Data.MySqlClient;
26
using NUnit.Framework;
37
using ServiceStack.DataAnnotations;
8+
using ServiceStack.Text;
49

510
namespace ServiceStack.OrmLite.MySql.Tests
611
{
@@ -25,51 +30,82 @@ CREATE PROCEDURE spSearchLetters (IN pLetter varchar(10), OUT pTotal int)
2530
[Test]
2631
public void Can_execute_stored_procedure_using_SqlList_with_out_params()
2732
{
28-
using (var db = OpenDbConnection())
29-
{
30-
db.DropAndCreateTable<LetterFrequency>();
33+
using var db = OpenDbConnection();
34+
db.DropAndCreateTable<LetterFrequency>();
3135

32-
var rows = "A,B,B,C,C,C,D,D,E".Split(',').Map(x => new LetterFrequency { Letter = x });
33-
db.InsertAll(rows);
36+
var rows = "A,B,B,C,C,C,D,D,E".Split(',').Map(x => new LetterFrequency { Letter = x });
37+
db.InsertAll(rows);
3438

35-
db.ExecuteSql(spSql);
39+
db.ExecuteSql(spSql);
3640

37-
IDbDataParameter pTotal = null;
38-
var results = db.SqlList<LetterFrequency>("spSearchLetters",
39-
cmd =>
40-
{
41-
cmd.CommandType = CommandType.StoredProcedure;
42-
cmd.AddParam("pLetter", "C");
43-
pTotal = cmd.AddParam("pTotal", direction: ParameterDirection.Output);
44-
});
41+
IDbDataParameter pTotal = null;
42+
var results = db.SqlList<LetterFrequency>("spSearchLetters",
43+
cmd =>
44+
{
45+
cmd.CommandType = CommandType.StoredProcedure;
46+
cmd.AddParam("pLetter", "C");
47+
pTotal = cmd.AddParam("pTotal", direction: ParameterDirection.Output);
48+
});
4549

46-
Assert.That(results.Count, Is.EqualTo(3));
47-
Assert.That(pTotal.Value, Is.EqualTo(3));
48-
}
50+
Assert.That(results.Count, Is.EqualTo(3));
51+
Assert.That(pTotal.Value, Is.EqualTo(3));
4952
}
5053

5154
[Test]
5255
public void Can_execute_stored_procedure_using_SqlProc_with_out_params()
5356
{
54-
using (var db = OpenDbConnection())
55-
{
56-
db.DropAndCreateTable<LetterFrequency>();
57+
using var db = OpenDbConnection();
58+
db.DropAndCreateTable<LetterFrequency>();
5759

58-
var rows = "A,B,B,C,C,C,D,D,E".Split(',').Map(x => new LetterFrequency { Letter = x });
59-
db.InsertAll(rows);
60+
var rows = "A,B,B,C,C,C,D,D,E".Split(',').Map(x => new LetterFrequency { Letter = x });
61+
db.InsertAll(rows);
6062

61-
db.ExecuteSql(spSql);
63+
db.ExecuteSql(spSql);
6264

63-
var cmd = db.SqlProc("spSearchLetters", new { pLetter = "C" });
65+
var cmd = db.SqlProc("spSearchLetters", new { pLetter = "C" });
6466

65-
Assert.That(((OrmLiteCommand)cmd).IsDisposed, Is.False);
67+
Assert.That(((OrmLiteCommand)cmd).IsDisposed, Is.False);
6668

67-
var pTotal = cmd.AddParam("pTotal", direction: ParameterDirection.Output);
68-
var results = cmd.ConvertToList<LetterFrequency>();
69+
var pTotal = cmd.AddParam("pTotal", direction: ParameterDirection.Output);
70+
var results = cmd.ConvertToList<LetterFrequency>();
6971

70-
Assert.That(results.Count, Is.EqualTo(3));
71-
Assert.That(pTotal.Value, Is.EqualTo(3));
72+
Assert.That(results.Count, Is.EqualTo(3));
73+
Assert.That(pTotal.Value, Is.EqualTo(3));
74+
}
75+
76+
public class MySqlExecFilter : OrmLiteExecFilter
77+
{
78+
public override IEnumerable<T> ExecLazy<T>(IDbConnection dbConn, Func<IDbCommand, IEnumerable<T>> filter)
79+
{
80+
var dbCmd = CreateCommand(dbConn);
81+
var mysqlCmd = (MySqlCommand) dbCmd.ToDbCommand();
82+
83+
try
84+
{
85+
var results = filter(dbCmd);
86+
87+
foreach (var item in results)
88+
{
89+
yield return item;
90+
}
91+
}
92+
finally
93+
{
94+
DisposeCommand(dbCmd, dbConn);
95+
}
7296
}
7397
}
98+
99+
// [Test]
100+
public void Can_access_MySqlConnection_in_ExecFilter()
101+
{
102+
MySqlDialect.Instance.ExecFilter = new MySqlExecFilter();
103+
104+
using var db = OpenDbConnection();
105+
db.DropAndCreateTable<LetterFrequency>();
106+
107+
var results = db.SelectLazy<LetterFrequency>().ToList();
108+
}
109+
74110
}
75111
}

0 commit comments

Comments
 (0)