-
Notifications
You must be signed in to change notification settings - Fork 2
Expand file tree
/
Copy pathpackage.scala
More file actions
83 lines (57 loc) · 1.89 KB
/
package.scala
File metadata and controls
83 lines (57 loc) · 1.89 KB
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
package com.zengularity.querymonad.module
import java.sql.Connection
import scala.language.higherKinds
import scala.concurrent.Future
import cats.Applicative
import com.zengularity.querymonad.core.database.{
Query,
QueryE,
QueryO,
QueryRunner,
QueryT,
WithResource
}
package object sql {
// Query aliases
type SqlQuery[A] = Query[Connection, A]
object SqlQuery {
def pure[A](a: A) = Query.pure[Connection, A](a)
val ask = Query.ask[Connection]
def apply[A](f: Connection => A) = new SqlQuery(f)
}
// Query transformer aliases
type SqlQueryT[F[_], A] = QueryT[F, Connection, A]
object SqlQueryT {
def apply[M[_], A](run: Connection => M[A]) =
QueryT.apply[M, Connection, A](run)
def pure[M[_]: Applicative, A](a: A) =
QueryT.pure[M, Connection, A](a)
def ask[M[_]: Applicative] = QueryT.ask[M, Connection]
def liftF[M[_], A](ma: M[A]) = QueryT.liftF[M, Connection, A](ma)
def lift[M[_], A](
query: SqlQuery[A]
)(implicit F: Applicative[M]) =
SqlQueryT[M, A](query.map(F.pure).run)
def fromQuery[M[_], A](query: SqlQuery[M[A]]) =
QueryT.fromQuery[M, Connection, A](query)
def liftQuery[M[_]: Applicative, A](query: SqlQuery[A]) =
QueryT.liftQuery[M, Connection, A](query)
}
type SqlQueryO[A] = QueryO[Connection, A]
type SqlQueryE[A, Err] = QueryE[Connection, A, Err]
// Query runner aliases
type WithSqlConnection[F[_]] = WithResource[F, Connection]
type SqlQueryRunner[F[_]] = QueryRunner[F, Connection]
object SqlQueryRunner {
def apply[F[_]](wc: WithSqlConnection[F]): SqlQueryRunner[F] =
QueryRunner[F, Connection](wc)
}
object future {
type WithSqlConnectionF = WithSqlConnection[Future]
type SqlQueryRunnerF = SqlQueryRunner[Future]
object SqlQueryRunnerF {
def apply(wc: WithSqlConnectionF): SqlQueryRunnerF =
SqlQueryRunner(wc)
}
}
}