Ecosyste.ms: Awesome
An open API service indexing awesome lists of open source software.
https://github.com/gitbucket/blocking-slick
Slick2 compatible blocking API for Slick3
https://github.com/gitbucket/blocking-slick
database scala slick sql
Last synced: about 2 months ago
JSON representation
Slick2 compatible blocking API for Slick3
- Host: GitHub
- URL: https://github.com/gitbucket/blocking-slick
- Owner: gitbucket
- License: apache-2.0
- Created: 2016-08-10T02:29:26.000Z (over 8 years ago)
- Default Branch: master
- Last Pushed: 2024-04-15T16:23:25.000Z (9 months ago)
- Last Synced: 2024-04-16T11:18:04.378Z (9 months ago)
- Topics: database, scala, slick, sql
- Language: Scala
- Homepage:
- Size: 181 KB
- Stars: 55
- Watchers: 6
- Forks: 16
- Open Issues: 3
-
Metadata Files:
- Readme: README.md
- License: LICENSE.txt
- Codeowners: .github/CODEOWNERS
Awesome Lists containing this project
README
blocking-slick [![Scala CI](https://github.com/gitbucket/blocking-slick/actions/workflows/scala.yml/badge.svg)](https://github.com/gitbucket/blocking-slick/actions/workflows/scala.yml)
==============Provides Slick2 compatible blocking API for Slick3.
Setup
-----Add following dependency to your `build.sbt`:
```scala
// for Slick 3.5 (Scala 2 / Scala 3)
libraryDependencies += "com.github.takezoe" %% "blocking-slick" % "0.0.15-RC2"// for Slick 3.4 (Scala 2)
libraryDependencies += "com.github.takezoe" %% "blocking-slick" % "0.0.14"// for Slick 3.3
libraryDependencies += "com.github.takezoe" %% "blocking-slick-33" % "0.0.13"// for Slick 3.2
libraryDependencies += "com.github.takezoe" %% "blocking-slick-32" % "0.0.11"// for Slick 3.1
libraryDependencies += "com.github.takezoe" %% "blocking-slick-31" % "0.0.7"
```You can enable blocking API by import the blocking driver as follows:
```scala
import com.github.takezoe.slick.blocking.BlockingH2Driver.blockingApi._
```Slick2 style blocking API
----See the example of use of blocking API provided by blocking-slick:
```scala
val db = Database.forURL("jdbc:h2:mem:test")db.withSession { implicit session =>
// Create tables
models.Tables.schema.create// Insert
Users.insert(UsersRow(1, "takezoe"))
// Insert returning new id
val newID: Long = (Users returning Users.map(_.id)).insert(UsersRow(1, "takezoe"))// Select
val users: Seq[UserRow] = Users.list
// Select single record
val user: UserRow = Users.filter(_.id === "takezoe".bind).first
// Select single record with Option
val user: Option[UserRow] = Users.filter(_.id === "takezoe".bind).firstOption// Update
Users.filter(t => t.id === 1.bind).update(UsersRow(1, "naoki"))
// Delete
Users.filter(t => t.id === 1.bind).delete
// Drop tables
models.Tables.schema.remove
}
```Plain sql can be executed synchronously as well.
```scala
val id = 1
val name = "takezoe"
val insert = sqlu"INSERT INTO USERS (ID, NAME) VALUES (${id1}, ${name1})"
insert.execute
```Transaction is available by using `withTransaction` instead of `withSession`:
```scala
// Transaction
db.withTransaction { implicit session =>
...
}
```DBIO support
----blocking-slick also provides a way to run `DBIO` synchronously. It would help to rewrite Slick2 style code to Slick3 style code gradually.
```scala
db.withSession { implicit session =>
val id1 = 1
val id2 = 2
val name1 = "takezoe"
val name2 = "chibochibo"
val insert1 = sqlu"INSERT INTO USERS (ID, NAME) VALUES (${id1}, ${name1})" andThen
sqlu"INSERT INTO USERS (ID, NAME) VALUES (${id2}, ${name2})"
insert1.runval query = for {
count <- sql"SELECT COUNT(*) FROM USERS".as[Int].head
max <- sql"SELECT MAX(ID) FROM USERS".as[Int].head
} yield (count, max)
val (count1, max1) = query.run
assert(count1 == 2)
assert(max1 == 2)
}
```Note that using `flatMap` and `andThen` requires an `ExecutionContext`, but if you run that code synchronously that value will be ignored.
Resources
----You can see actual codes in [the testcase](https://github.com/gitbucket/blocking-slick/blob/master/src/test/scala/com/github/takezoe/slick/blocking/SlickBlockingAPISpec.scala), and also a blocking-slick with Play2 and play-slick example is available at [here](https://github.com/takezoe/blocking-slick-play2).