Skip to content

Commit 03ce7c5

Browse files
committed
[UPDATE] Final cleanup for database queries and schema create
1 parent c0b3984 commit 03ce7c5

File tree

3 files changed

+40
-12
lines changed

3 files changed

+40
-12
lines changed

build.gradle.kts

Lines changed: 8 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -28,6 +28,10 @@ sqldelight {
2828
}
2929
}
3030

31+
java {
32+
toolchain.languageVersion.set(JavaLanguageVersion.of(19))
33+
}
34+
3135
dependencies {
3236
// PostgreSQL is a powerful object-relational database system
3337
// https://www.postgresql.org/
@@ -43,6 +47,10 @@ dependencies {
4347
// https://cashapp.github.io/sqldelight/2.0.0/jvm_postgresql
4448
implementation("app.cash.sqldelight:jdbc-driver:2.0.0")
4549

50+
// Faker - Generates fake data for testing or populating a development database.
51+
// https://github.com/blocoio/faker
52+
implementation("io.github.serpro69:kotlin-faker:1.14.0")
53+
4654
testImplementation(kotlin("test"))
4755
}
4856

src/main/kotlin/dev/hossain/postgresqldelight/Main.kt

Lines changed: 24 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -2,7 +2,11 @@ package dev.hossain.postgresqldelight
22

33
import app.cash.sqldelight.db.SqlDriver
44
import app.cash.sqldelight.driver.jdbc.asJdbcDriver
5+
import io.github.serpro69.kfaker.Faker
6+
import io.github.serpro69.kfaker.faker
57
import javax.sql.DataSource
8+
import kotlin.math.absoluteValue
9+
import kotlin.random.Random
610

711

812
fun main(args: Array<String>) {
@@ -13,23 +17,36 @@ fun main(args: Array<String>) {
1317

1418

1519
val driver: SqlDriver = dataSource.asJdbcDriver()
20+
SportsDatabase.Schema.create(driver)
1621

17-
doDatabaseThings(driver)
22+
testDriveDatabase(driver, faker { })
1823
}
1924

2025

21-
22-
fun doDatabaseThings(driver: SqlDriver) {
26+
/**
27+
* @param driver the [SqlDriver] required to create the database.
28+
* @param faker Fake data generator.
29+
*/
30+
fun testDriveDatabase(driver: SqlDriver, faker: Faker) {
2331
val database = SportsDatabase(driver)
32+
2433
val playerQueries: PlayerQueries = database.playerQueries
2534

35+
// Show all players
2636
println(playerQueries.selectAll().executeAsList())
27-
// [HockeyPlayer(15, "Ryan Getzlaf")]
2837

29-
playerQueries.insert(player_number = 10, full_name = "Corey Perry")
38+
39+
// Uses query param to insert data
40+
playerQueries.insert(
41+
player_number = Random.nextInt().absoluteValue,
42+
full_name = faker.name.name()
43+
)
3044
println(playerQueries.selectAll().executeAsList())
31-
// [HockeyPlayer(15, "Ryan Getzlaf"), HockeyPlayer(10, "Corey Perry")]
3245

33-
val player = HockeyPlayer(10, "Ronald McDonald")
46+
// Uses full data object to insert data
47+
val player = HockeyPlayer(
48+
player_number = Random.nextInt().absoluteValue,
49+
full_name = faker.name.name()
50+
)
3451
playerQueries.insertFullPlayerObject(player)
3552
}
Lines changed: 8 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -1,13 +1,11 @@
11
-- Source: https://cashapp.github.io/sqldelight/2.0.0/jvm_postgresql/#fresh-schema
2-
CREATE TABLE hockeyPlayer (
2+
CREATE TABLE IF NOT EXISTS hockeyPlayer (
33
player_number INTEGER PRIMARY KEY NOT NULL,
44
full_name TEXT NOT NULL
55
);
66

7-
CREATE INDEX hockeyPlayer_full_name ON hockeyPlayer(full_name);
7+
CREATE INDEX IF NOT EXISTS hockeyPlayer_full_name ON hockeyPlayer(full_name);
88

9-
INSERT INTO hockeyPlayer (player_number, full_name)
10-
VALUES (15, 'Ryan Getzlaf');
119

1210
selectAll:
1311
SELECT *
@@ -19,4 +17,9 @@ VALUES (?, ?);
1917

2018
insertFullPlayerObject:
2119
INSERT INTO hockeyPlayer(player_number, full_name)
22-
VALUES ?;
20+
VALUES ?;
21+
22+
23+
-- tableExists:
24+
-- https://database.guide/5-ways-to-check-if-a-table-exists-in-postgresql/
25+
-- SELECT EXISTS (SELECT FROM pg_tables WHERE schemaname = 'public' AND tablename = 'hockeyPlayer');

0 commit comments

Comments
 (0)