44using MySql . Data . MySqlClient ;
55using System ;
66using System . Linq ;
7+ using static SqlKata . Expressions ;
8+ using System . Collections . Generic ;
79
810namespace SqlKata . Tests
911{
@@ -13,61 +15,48 @@ public class MySqlExecutionTest
1315 public void EmptySelect ( )
1416 {
1517
16- var db = SetupDb ( ) ;
17- var sql = @"
18- CREATE TABLE Cars(
19- Id INT PRIMARY KEY AUTO_INCREMENT,
20- Brand TEXT NOT NULL,
21- Year INT NOT NULL,
22- Color TEXT NULL
23- )
24- " ;
25- db . Statement ( sql ) ;
18+ var db = DB ( ) . Create ( "Cars" , new [ ] {
19+ "Id INT PRIMARY KEY AUTO_INCREMENT" ,
20+ "Brand TEXT NOT NULL" ,
21+ "Year INT NOT NULL" ,
22+ "Color TEXT NULL" ,
23+ } ) ;
2624
2725 var rows = db . Query ( "Cars" ) . Get ( ) ;
2826
2927 Assert . Empty ( rows ) ;
3028
31- db . Statement ( "DROP TABLE IF EXISTS ` Cars` ") ;
29+ db . Drop ( " Cars") ;
3230 }
3331
3432 [ Fact ]
3533 public void SelectWithLimit ( )
3634 {
37-
38- var db = SetupDb ( ) ;
39- var sql = @"
40- CREATE TABLE Cars(
41- Id INT PRIMARY KEY AUTO_INCREMENT,
42- Brand TEXT NOT NULL,
43- Year INT NOT NULL,
44- Color TEXT NULL
45- )
46- " ;
47- db . Statement ( sql ) ;
35+ var db = DB ( ) . Create ( "Cars" , new [ ] {
36+ "Id INT PRIMARY KEY AUTO_INCREMENT" ,
37+ "Brand TEXT NOT NULL" ,
38+ "Year INT NOT NULL" ,
39+ "Color TEXT NULL" ,
40+ } ) ;
4841
4942 db . Statement ( "INSERT INTO `Cars`(Brand, Year) VALUES ('Honda', 2020)" ) ;
5043
5144 var rows = db . Query ( "Cars" ) . Get ( ) . ToList ( ) ;
5245
5346 Assert . Equal ( 1 , rows . Count ( ) ) ;
5447
55- db . Statement ( "DROP TABLE IF EXISTS ` Cars` ") ;
48+ db . Drop ( " Cars") ;
5649 }
5750
5851 [ Fact ]
5952 public void Count ( )
6053 {
61- var db = SetupDb ( ) ;
62- var sql = @"
63- CREATE TABLE Cars(
64- Id INT PRIMARY KEY AUTO_INCREMENT,
65- Brand TEXT NOT NULL,
66- Year INT NOT NULL,
67- Color TEXT NULL
68- )
69- " ;
70- db . Statement ( sql ) ;
54+ var db = DB ( ) . Create ( "Cars" , new [ ] {
55+ "Id INT PRIMARY KEY AUTO_INCREMENT" ,
56+ "Brand TEXT NOT NULL" ,
57+ "Year INT NOT NULL" ,
58+ "Color TEXT NULL" ,
59+ } ) ;
7160
7261 db . Statement ( "INSERT INTO `Cars`(Brand, Year) VALUES ('Honda', 2020)" ) ;
7362 var count = db . Query ( "Cars" ) . Count < int > ( ) ;
@@ -83,22 +72,18 @@ Color TEXT NULL
8372 count = db . Query ( "Cars" ) . Count < int > ( ) ;
8473 Assert . Equal ( 0 , count ) ;
8574
86- db . Statement ( "DROP TABLE IF EXISTS ` Cars` ") ;
75+ db . Drop ( " Cars") ;
8776 }
8877
8978 [ Fact ]
9079 public void CloneThenCount ( )
9180 {
92- var db = SetupDb ( ) ;
93- var sql = @"
94- CREATE TABLE Cars(
95- Id INT PRIMARY KEY AUTO_INCREMENT,
96- Brand TEXT NOT NULL,
97- Year INT NOT NULL,
98- Color TEXT NULL
99- )
100- " ;
101- db . Statement ( sql ) ;
81+ var db = DB ( ) . Create ( "Cars" , new [ ] {
82+ "Id INT PRIMARY KEY AUTO_INCREMENT" ,
83+ "Brand TEXT NOT NULL" ,
84+ "Year INT NOT NULL" ,
85+ "Color TEXT NULL" ,
86+ } ) ;
10287
10388 for ( int i = 0 ; i < 10 ; i ++ )
10489 {
@@ -116,23 +101,98 @@ Color TEXT NULL
116101 Assert . Equal ( 4 , count ) ;
117102 Assert . Equal ( 4 , cloneCount ) ;
118103
119- db . Statement ( "DROP TABLE IF EXISTS ` Cars` ") ;
104+ db . Drop ( " Cars") ;
120105 }
121106
122- public QueryFactory SetupDb ( )
107+ [ Fact ]
108+ public void QueryWithVariable ( )
109+ {
110+ var db = DB ( ) . Create ( "Cars" , new [ ] {
111+ "Id INT PRIMARY KEY AUTO_INCREMENT" ,
112+ "Brand TEXT NOT NULL" ,
113+ "Year INT NOT NULL" ,
114+ "Color TEXT NULL" ,
115+ } ) ;
116+
117+ for ( int i = 0 ; i < 10 ; i ++ )
118+ {
119+ db . Query ( "Cars" ) . Insert ( new
120+ {
121+ Brand = "Brand " + i ,
122+ Year = "2020" ,
123+ } ) ;
124+ }
125+
126+
127+ var count = db . Query ( "Cars" )
128+ . Define ( "Threshold" , 5 )
129+ . Where ( "Id" , "<" , SqlKata . Expressions . Variable ( "Threshold" ) )
130+ . Count < int > ( ) ;
131+
132+ Assert . Equal ( 4 , count ) ;
133+
134+ db . Drop ( "Cars" ) ;
135+ }
136+
137+ [ Fact ]
138+ public void InlineTable ( )
139+ {
140+ var db = DB ( ) . Create ( "Transaction" , new [ ] {
141+ "Id INT PRIMARY KEY AUTO_INCREMENT" ,
142+ "Amount int NOT NULL" ,
143+ "Date DATE NOT NULL" ,
144+ } ) ;
145+
146+ db . Query ( "Transaction" ) . Insert ( new
147+ {
148+ Date = "2022-01-01" ,
149+ Amount = 10
150+ } ) ;
151+
152+
153+ var rows = db . Query ( "Transaction" )
154+ . With ( "Rates" , new [ ] { "Date" , "Rate" } , new object [ ] [ ] {
155+ new object [ ] { "2022-01-01" , 0.5 } ,
156+ } )
157+ . Join ( "Rates" , "Rates.Date" , "Transaction.Date" )
158+ . SelectRaw ( "Transaction.Amount * Rates.Rate as AmountConverted" )
159+ . Get ( ) ;
160+
161+ Assert . Equal ( 1 , rows . Count ( ) ) ;
162+ Assert . Equal ( 5 , rows . First ( ) . AmountConverted ) ;
163+
164+ db . Drop ( "Transaction" ) ;
165+ }
166+
167+ QueryFactory DB ( )
123168 {
124169 var host = System . Environment . GetEnvironmentVariable ( "SQLKATA_MYSQL_HOST" ) ;
125170 var user = System . Environment . GetEnvironmentVariable ( "SQLKATA_MYSQL_USER" ) ;
126171 var dbName = System . Environment . GetEnvironmentVariable ( "SQLKATA_MYSQL_DB" ) ;
127172 var cs = $ "server={ host } ;user={ user } ;database={ dbName } ";
128- Console . WriteLine ( $ "Using cs: { cs } ") ;
129173
130174 var connection = new MySqlConnection ( cs ) ;
131175
132176 var db = new QueryFactory ( connection , new MySqlCompiler ( ) ) ;
133177
134- db . Statement ( "DROP TABLE IF EXISTS `Cars`" ) ;
178+ return db ;
179+ }
180+
181+
182+
183+ }
184+ static class QueryFactoryExtensions
185+ {
186+ public static QueryFactory Create ( this QueryFactory db , string table , IEnumerable < string > cols )
187+ {
188+ db . Drop ( table ) ;
189+ db . Statement ( $ "CREATE TABLE `{ table } `({ string . Join ( ", " , cols ) } )") ;
190+ return db ;
191+ }
135192
193+ public static QueryFactory Drop ( this QueryFactory db , string table )
194+ {
195+ db . Statement ( $ "DROP TABLE IF EXISTS `{ table } `") ;
136196 return db ;
137197 }
138198 }
0 commit comments