Skip to content

Commit f14c246

Browse files
committed
Adds custom transactor for country and person tables
1 parent 4e86b5b commit f14c246

7 files changed

Lines changed: 31 additions & 33 deletions

src/main/scala/doobie/ConnectingToDatabaseSection.scala

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,6 @@
11
package doobie
22

3-
import doobie.DoobieUtils._
3+
import doobie.DoobieUtils.CountryTable._
44
import doobie.imports._
55
import org.scalaexercises.definitions.Section
66
import org.scalatest._

src/main/scala/doobie/DoobieUtils.scala

Lines changed: 26 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -11,9 +11,7 @@ import scalaz._, Scalaz._
1111

1212
object DoobieUtils {
1313

14-
// Transactor for single-use in-memory databases pre-populated with test data.
15-
val xa = new Transactor[Task] {
16-
14+
class CustomTransactor[B](implicit beforeActions: ConnectionIO[B]) extends Transactor[Task] {
1715
val driver = "org.h2.Driver"
1816
def url = "jdbc:h2:mem:"
1917
val user = "sa"
@@ -22,6 +20,11 @@ object DoobieUtils {
2220
val connect: Task[Connection] =
2321
Task.delay(Class.forName(driver)) *> FD.getConnection(url, user, pass).trans[Task]
2422

23+
override val before = super.before <* beforeActions
24+
}
25+
26+
object CountryTable {
27+
2528
val createCountryTable: ConnectionIO[Int] =
2629
sql"""
2730
CREATE TABLE IF NOT EXISTS country (
@@ -33,11 +36,28 @@ object DoobieUtils {
3336
""".update.run
3437

3538
def insertCountries(countries: List[Country]): ConnectionIO[Int] =
36-
Update[Country](s"insert into country (code, name, population, gnp) values (?,?,?,?)").updateMany(countries)
39+
Update[Country]("insert into country (code, name, population, gnp) values (?,?,?,?)")
40+
.updateMany(countries)
3741

38-
override val before =
39-
super.before <* createCountryTable <* insertCountries(countries)
42+
implicit val beforeActions = createCountryTable <* insertCountries(countries)
4043

44+
// Transactor for single-use in-memory databases pre-populated with test data.
45+
val xa = new CustomTransactor
4146
}
4247

48+
object PersonTable {
49+
50+
val createPersonTable: ConnectionIO[Int] =
51+
sql"""
52+
CREATE TABLE IF NOT EXISTS person (
53+
id IDENTITY,
54+
name VARCHAR NOT NULL UNIQUE,
55+
age INT
56+
)
57+
""".update.run
58+
59+
implicit val beforeActions = createPersonTable
60+
61+
val xa = new CustomTransactor
62+
}
4363
}

src/main/scala/doobie/MultiColumnQueriesSection.scala

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,6 @@
11
package doobie
22

3-
import doobie.DoobieUtils._
3+
import doobie.DoobieUtils.CountryTable._
44
import doobie.Model._
55
import doobie.imports._
66
import org.scalaexercises.definitions.Section

src/main/scala/doobie/ParameterizedQueriesSection.scala

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,6 @@
11
package doobie
22

3-
import doobie.DoobieUtils._
3+
import doobie.DoobieUtils.CountryTable._
44
import doobie.Model._
55
import doobie.ParameterizedQueryHelpers._
66
import doobie.imports._

src/main/scala/doobie/SelectingDataSection.scala

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,6 @@
11
package doobie
22

3-
import doobie.DoobieUtils._
3+
import doobie.DoobieUtils.CountryTable._
44
import doobie.imports._
55
import org.scalaexercises.definitions.Section
66
import org.scalatest.{FlatSpec, Matchers}

src/main/scala/doobie/UpdatesSection.scala

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,6 @@
11
package doobie
22

3+
import doobie.DoobieUtils.PersonTable._
34
import doobie.UpdatesSectionHelpers._
45
import doobie.imports._
56
import org.scalaexercises.definitions.Section

src/main/scala/doobie/UpdatesSectionHelpers.scala

Lines changed: 0 additions & 23 deletions
Original file line numberDiff line numberDiff line change
@@ -12,29 +12,6 @@ object UpdatesSectionHelpers {
1212

1313
case class Person(id: Long, name: String, age: Option[Short])
1414

15-
val xa = new Transactor[Task] {
16-
17-
val driver = "org.h2.Driver"
18-
def url = "jdbc:h2:mem:"
19-
val user = "sa"
20-
val pass = ""
21-
22-
val connect: Task[Connection] =
23-
Task.delay(Class.forName(driver)) *> FD.getConnection(url, user, pass).trans[Task]
24-
25-
val create: Update0 =
26-
sql"""
27-
CREATE TABLE person (
28-
id IDENTITY,
29-
name VARCHAR NOT NULL UNIQUE,
30-
age INT)
31-
""".update
32-
33-
override val before =
34-
super.before <* create.run
35-
36-
}
37-
3815
def insert1(name: String, age: Option[Int]): Update0 =
3916
sql"""
4017
INSERT INTO person (name, age) VALUES ($name, $age)

0 commit comments

Comments
 (0)