Skip to content

Commit f42dabb

Browse files
committed
Add MSSQL Example tests
1 parent 943d925 commit f42dabb

File tree

2 files changed

+75
-0
lines changed

2 files changed

+75
-0
lines changed

scalasql/test/src/ExampleTests.scala

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -11,5 +11,6 @@ object ExampleTests extends TestSuite {
1111
test("h2") - example.H2Example.main(Array())
1212
test("sqlite") - example.SqliteExample.main(Array())
1313
test("hikari") - example.HikariCpExample.main(Array())
14+
test("mssql") - example.MsSqlExample.main(Array())
1415
}
1516
}
Lines changed: 74 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,74 @@
1+
package scalasql.example
2+
3+
import org.testcontainers.containers.MSSQLServerContainer
4+
import scalasql.Table
5+
import scalasql.MsSqlDialect._
6+
7+
object MsSqlExample {
8+
case class ExampleProduct[T[_]](
9+
id: T[Int],
10+
kebabCaseName: T[String],
11+
name: T[String],
12+
price: T[Double]
13+
)
14+
15+
object ExampleProduct extends Table[ExampleProduct]
16+
17+
lazy val mssql = {
18+
println("Initializing MsSql")
19+
val mssql = new MSSQLServerContainer("mcr.microsoft.com/mssql/server:2022-CU14-ubuntu-22.04")
20+
mssql.acceptLicense()
21+
mssql.start()
22+
mssql
23+
}
24+
25+
val dataSource = new com.microsoft.sqlserver.jdbc.SQLServerDataSource
26+
dataSource.setURL(mssql.getJdbcUrl)
27+
dataSource.setUser(mssql.getUsername)
28+
dataSource.setPassword(mssql.getPassword)
29+
30+
lazy val mssqlClient = new scalasql.DbClient.DataSource(
31+
dataSource,
32+
config = new scalasql.Config {}
33+
)
34+
35+
def main(args: Array[String]): Unit = {
36+
mssqlClient.transaction { db =>
37+
db.updateRaw("""
38+
CREATE TABLE example_product (
39+
id INT PRIMARY KEY IDENTITY(1, 1),
40+
kebab_case_name VARCHAR(256),
41+
name VARCHAR(256),
42+
price DECIMAL(20, 2)
43+
);
44+
""")
45+
46+
val inserted = db.run(
47+
ExampleProduct.insert.batched(_.kebabCaseName, _.name, _.price)(
48+
("face-mask", "Face Mask", 8.88),
49+
("guitar", "Guitar", 300),
50+
("socks", "Socks", 3.14),
51+
("skate-board", "Skate Board", 123.45),
52+
("camera", "Camera", 1000.00),
53+
("cookie", "Cookie", 0.10)
54+
)
55+
)
56+
57+
assert(inserted == 6)
58+
59+
val result =
60+
db.run(ExampleProduct.select.filter(_.price > 10).sortBy(_.price).desc.map(_.name))
61+
62+
assert(result == Seq("Camera", "Guitar", "Skate Board"))
63+
64+
db.run(ExampleProduct.update(_.name === "Cookie").set(_.price := 11.0))
65+
66+
db.run(ExampleProduct.delete(_.name === "Guitar"))
67+
68+
val result2 =
69+
db.run(ExampleProduct.select.filter(_.price > 10).sortBy(_.price).desc.map(_.name))
70+
71+
assert(result2 == Seq("Camera", "Skate Board", "Cookie"))
72+
}
73+
}
74+
}

0 commit comments

Comments
 (0)