Skip to content

Commit 7951de8

Browse files
committed
Add JsonKotlinIT.kt which shows some Kotlin/jOOQ/JSON interoperability
1 parent 3892ad3 commit 7951de8

File tree

1 file changed

+85
-0
lines changed

1 file changed

+85
-0
lines changed
Lines changed: 85 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,85 @@
1+
package com.github.t9t.jooq.json
2+
3+
import com.github.t9t.jooq.generated.Tables
4+
import org.jooq.JSON
5+
import org.jooq.JSONB
6+
import org.jooq.Record1
7+
import org.jooq.SQLDialect
8+
import org.jooq.impl.DSL
9+
import org.junit.Assert
10+
import org.junit.Assert.assertEquals
11+
import org.junit.Before
12+
import org.junit.Test
13+
14+
/**
15+
* Validates Kotlin, jOOQ and JSON(B) interoperability
16+
*/
17+
class JsonKotlinIT {
18+
private val ds = TestDb.createDataSource()
19+
private val dsl = DSL.using(ds, SQLDialect.POSTGRES)
20+
21+
@Before
22+
fun setUp() {
23+
dsl.deleteFrom(Tables.JSON_TEST).execute()
24+
assertEquals(4, dsl.execute("insert into jooq.json_test (name, data, datab)" +
25+
" values " +
26+
"('both', '{\"json\": {\"int\": 100, \"str\": \"Hello, JSON world!\", \"object\": {\"v\": 200}, \"n\": null}}', '{\"jsonb\": {\"int\": 100, \"str\": \"Hello, JSONB world!\", \"object\": {\"v\": 200}, \"n\": null}}')," +
27+
"('empty', '{}', '{}')," +
28+
"('null-sql', null, null)," +
29+
"('null-json', 'null'::json, 'null'::jsonb)").toLong())
30+
}
31+
32+
@Test
33+
fun `select JSON NULL SQL, returning non-null JSON type`() {
34+
val r: Record1<JSON> = dsl.select(Tables.JSON_TEST.DATA)
35+
.from(Tables.JSON_TEST)
36+
.where(Tables.JSON_TEST.NAME.eq("null-sql"))
37+
.fetchOne()!!
38+
Assert.assertNull(r.value1())
39+
}
40+
41+
@Test
42+
fun `select JSON NULL SQL, returning nullable JSON type`() {
43+
val r: Record1<JSON?> = dsl.select(Tables.JSON_TEST.DATA)
44+
.from(Tables.JSON_TEST)
45+
.where(Tables.JSON_TEST.NAME.eq("null-sql"))
46+
.fetchOne()!!
47+
Assert.assertNull(r.value1())
48+
}
49+
50+
@Test
51+
fun `select null JSON value`() {
52+
val r: Record1<JSON> = dsl.select(Tables.JSON_TEST.DATA)
53+
.from(Tables.JSON_TEST)
54+
.where(Tables.JSON_TEST.NAME.eq("null-json"))
55+
.fetchOne()!!
56+
assertEquals("null", r.value1().toString())
57+
}
58+
59+
@Test
60+
fun `select JSON NULL SQL, returning non-null JSONB type`() {
61+
val r: Record1<JSONB> = dsl.select(Tables.JSON_TEST.DATAB)
62+
.from(Tables.JSON_TEST)
63+
.where(Tables.JSON_TEST.NAME.eq("null-sql"))
64+
.fetchOne()!!
65+
Assert.assertNull(r.value1())
66+
}
67+
68+
@Test
69+
fun `select JSON NULL SQL, returning nullable JSONB type`() {
70+
val r: Record1<JSONB?> = dsl.select(Tables.JSON_TEST.DATAB)
71+
.from(Tables.JSON_TEST)
72+
.where(Tables.JSON_TEST.NAME.eq("null-sql"))
73+
.fetchOne()!!
74+
Assert.assertNull(r.value1())
75+
}
76+
77+
@Test
78+
fun `select null JSONB value`() {
79+
val r = dsl.select(Tables.JSON_TEST.DATAB)
80+
.from(Tables.JSON_TEST)
81+
.where(Tables.JSON_TEST.NAME.eq("null-json"))
82+
.fetchOne()!!
83+
assertEquals("null", r.value1().toString())
84+
}
85+
}

0 commit comments

Comments
 (0)