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 ;
26using NUnit . Framework ;
37using ServiceStack . DataAnnotations ;
8+ using ServiceStack . Text ;
49
510namespace 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