Skip to content

Commit e56e6db

Browse files
Add more execution test for InlineTable, Variable
1 parent d5f0797 commit e56e6db

File tree

1 file changed

+108
-48
lines changed

1 file changed

+108
-48
lines changed

QueryBuilder.Tests/MySqlExecutionTest.cs

Lines changed: 108 additions & 48 deletions
Original file line numberDiff line numberDiff line change
@@ -4,6 +4,8 @@
44
using MySql.Data.MySqlClient;
55
using System;
66
using System.Linq;
7+
using static SqlKata.Expressions;
8+
using System.Collections.Generic;
79

810
namespace 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

Comments
 (0)