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 ;
2
6
using NUnit . Framework ;
3
7
using ServiceStack . DataAnnotations ;
8
+ using ServiceStack . Text ;
4
9
5
10
namespace ServiceStack . OrmLite . MySql . Tests
6
11
{
@@ -25,51 +30,82 @@ CREATE PROCEDURE spSearchLetters (IN pLetter varchar(10), OUT pTotal int)
25
30
[ Test ]
26
31
public void Can_execute_stored_procedure_using_SqlList_with_out_params ( )
27
32
{
28
- using ( var db = OpenDbConnection ( ) )
29
- {
30
- db . DropAndCreateTable < LetterFrequency > ( ) ;
33
+ using var db = OpenDbConnection ( ) ;
34
+ db . DropAndCreateTable < LetterFrequency > ( ) ;
31
35
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 ) ;
34
38
35
- db . ExecuteSql ( spSql ) ;
39
+ db . ExecuteSql ( spSql ) ;
36
40
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
+ } ) ;
45
49
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 ) ) ;
49
52
}
50
53
51
54
[ Test ]
52
55
public void Can_execute_stored_procedure_using_SqlProc_with_out_params ( )
53
56
{
54
- using ( var db = OpenDbConnection ( ) )
55
- {
56
- db . DropAndCreateTable < LetterFrequency > ( ) ;
57
+ using var db = OpenDbConnection ( ) ;
58
+ db . DropAndCreateTable < LetterFrequency > ( ) ;
57
59
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 ) ;
60
62
61
- db . ExecuteSql ( spSql ) ;
63
+ db . ExecuteSql ( spSql ) ;
62
64
63
- var cmd = db . SqlProc ( "spSearchLetters" , new { pLetter = "C" } ) ;
65
+ var cmd = db . SqlProc ( "spSearchLetters" , new { pLetter = "C" } ) ;
64
66
65
- Assert . That ( ( ( OrmLiteCommand ) cmd ) . IsDisposed , Is . False ) ;
67
+ Assert . That ( ( ( OrmLiteCommand ) cmd ) . IsDisposed , Is . False ) ;
66
68
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 > ( ) ;
69
71
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
+ }
72
96
}
73
97
}
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
+
74
110
}
75
111
}
0 commit comments