Skip to content

Commit 582586e

Browse files
authored
Merge branch 'Baeldung:master' into transparent-scala3
2 parents 04d9d27 + 7a1a265 commit 582586e

File tree

2 files changed

+72
-1
lines changed

2 files changed

+72
-1
lines changed

build.sbt

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -326,7 +326,8 @@ lazy val scala_libraries_4 = (project in file("scala-libraries-4"))
326326
libraryDependencies += "org.scalatest" %% "scalatest" % "3.1.2" % Test,
327327
libraryDependencies ++= Seq(
328328
"org.scala-lang.modules" %% "scala-async" % "1.0.1",
329-
"org.scala-lang" % "scala-reflect" % scalaVersion.value % Provided
329+
"org.scala-lang" % "scala-reflect" % scalaVersion.value % Provided,
330+
"org.tpolecat" %% "skunk-core" % "0.3.2"
330331
),
331332
libraryDependencies ++= Seq(
332333
"org.apache.spark" %% "spark-core" % sparkVersion,
Lines changed: 70 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,70 @@
1+
package com.baeldung.scala.skunk
2+
3+
import cats.effect.{IO, IOApp}
4+
import cats.effect.kernel.Resource
5+
import skunk.{Query, Session}
6+
import cats.effect._
7+
import natchez.Trace.Implicits.noop
8+
import skunk._
9+
import skunk.implicits._
10+
import skunk.codec.all._
11+
12+
object Skunk{
13+
case class User(id: Int, username: String, email: String, age:Int)
14+
15+
def createSession(): Resource[IO, Session[IO]] =
16+
Session.single[IO]( host = "localhost",
17+
user = "baeldung",
18+
database = "baeldung",
19+
password = Some("baeldung"),
20+
port = 5432
21+
)
22+
23+
def getAllUsers(resource: Resource[IO, Session[IO]]) = {
24+
val query: Query[Void, Int ~ String ~ String ~ Int] =
25+
sql"SELECT * FROM Users"
26+
.query(int4 ~ varchar(255) ~ varchar(255) ~ int4)
27+
28+
val mappedQuery: Query[Void, User] = query
29+
.gmap[User]
30+
val results: IO[List[User]] = resource.use(s => s.execute(mappedQuery))
31+
results
32+
}
33+
34+
def getUserWithId(resource: Resource[IO, Session[IO]]) = {
35+
val query:Query[Int ~ String, User] =
36+
sql"""
37+
SELECT * FROM Users WHERE
38+
id = $int4 AND username LIKE $varchar
39+
"""
40+
.query(int4 ~ varchar(255) ~ varchar(255) ~ int4)
41+
.gmap[User]
42+
43+
val preparedQuery: Resource[IO, PreparedQuery[IO, Int ~ String, User]] = resource
44+
.flatMap(session => session.prepare(query))
45+
46+
preparedQuery.use(pq => pq.unique(1, "baeldungUser"))
47+
}
48+
49+
def removeUserWithId(resource: Resource[IO, Session[IO]]) = {
50+
val command: Command[Void] =
51+
sql"""
52+
DELETE FROM Users WHERE
53+
id = 5
54+
"""
55+
.command
56+
57+
resource.use(session => session.execute(command))
58+
}
59+
60+
def removePrepared(resource: Resource[IO, Session[IO]]) = {
61+
val command: Command[Int ~ String] =
62+
sql"""
63+
DELETE FROM Users WHERE
64+
id = $int4 and username = $varchar
65+
"""
66+
.command
67+
resource.flatMap(session => session.prepare(command))
68+
.use(pc => pc.execute((1, "baeldungUser")))
69+
}
70+
}

0 commit comments

Comments
 (0)