Skip to content

Commit a06d2dd

Browse files
fix #268 when using connection pools
1 parent 19e425a commit a06d2dd

File tree

5 files changed

+66
-6
lines changed

5 files changed

+66
-6
lines changed

build.gradle

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -16,7 +16,7 @@ buildscript {
1616

1717
allprojects {
1818
group = "org.ktorm"
19-
version = "3.4.0"
19+
version = "3.4.1"
2020
}
2121

2222
subprojects { project ->

ktorm-core/src/main/kotlin/org/ktorm/schema/SqlTypes.kt

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -511,7 +511,7 @@ public class EnumSqlType<C : Enum<C>>(public val enumClass: Class<C>) : SqlType<
511511
if (parameter != null) {
512512
doSetParameter(ps, index, parameter)
513513
} else {
514-
if (hasPostgresqlDriver && ps is PGStatement) {
514+
if (hasPostgresqlDriver && ps.isWrapperFor(PGStatement::class.java)) {
515515
ps.setNull(index, Types.OTHER)
516516
} else {
517517
ps.setNull(index, Types.VARCHAR)
@@ -520,7 +520,7 @@ public class EnumSqlType<C : Enum<C>>(public val enumClass: Class<C>) : SqlType<
520520
}
521521

522522
override fun doSetParameter(ps: PreparedStatement, index: Int, parameter: C) {
523-
if (hasPostgresqlDriver && ps is PGStatement) {
523+
if (hasPostgresqlDriver && ps.isWrapperFor(PGStatement::class.java)) {
524524
ps.setObject(index, parameter.name, Types.OTHER)
525525
} else {
526526
ps.setString(index, parameter.name)

ktorm-jackson/src/main/kotlin/org/ktorm/jackson/JsonSqlType.kt

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -88,7 +88,7 @@ public class JsonSqlType<T : Any>(
8888
if (parameter != null) {
8989
doSetParameter(ps, index, parameter)
9090
} else {
91-
if (hasPostgresqlDriver && ps is PGStatement) {
91+
if (hasPostgresqlDriver && ps.isWrapperFor(PGStatement::class.java)) {
9292
ps.setNull(index, Types.OTHER)
9393
} else {
9494
ps.setNull(index, Types.VARCHAR)
@@ -97,7 +97,7 @@ public class JsonSqlType<T : Any>(
9797
}
9898

9999
override fun doSetParameter(ps: PreparedStatement, index: Int, parameter: T) {
100-
if (hasPostgresqlDriver && ps is PGStatement) {
100+
if (hasPostgresqlDriver && ps.isWrapperFor(PGStatement::class.java)) {
101101
val obj = PGobject()
102102
obj.type = "json"
103103
obj.value = objectMapper.writeValueAsString(parameter)

ktorm-support-postgresql/ktorm-support-postgresql.gradle

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -6,4 +6,8 @@ dependencies {
66
testImplementation project(":ktorm-jackson")
77
testImplementation "org.postgresql:postgresql:42.2.5"
88
testImplementation "org.testcontainers:postgresql:1.15.1"
9+
testImplementation "com.zaxxer:HikariCP:4.0.3"
10+
testImplementation "com.mchange:c3p0:0.9.5.5"
11+
testImplementation "org.apache.commons:commons-dbcp2:2.8.0"
12+
testImplementation "com.alibaba:druid:1.2.6"
913
}

ktorm-support-postgresql/src/test/kotlin/org/ktorm/support/postgresql/PostgreSqlTest.kt

Lines changed: 57 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,9 @@
11
package org.ktorm.support.postgresql
22

3+
import com.alibaba.druid.pool.DruidDataSource
4+
import com.mchange.v2.c3p0.ComboPooledDataSource
5+
import com.zaxxer.hikari.HikariDataSource
6+
import org.apache.commons.dbcp2.BasicDataSource
37
import org.hamcrest.CoreMatchers.equalTo
48
import org.hamcrest.CoreMatchers.nullValue
59
import org.hamcrest.MatcherAssert.assertThat
@@ -797,7 +801,59 @@ class PostgreSqlTest : BaseTest() {
797801
}
798802

799803
@Test
800-
fun testJson() {
804+
fun testJsonWithDefaultConnection() {
805+
testJson(database)
806+
}
807+
808+
@Test
809+
fun testJsonWithHikariCP() {
810+
val ds = HikariDataSource()
811+
ds.jdbcUrl = postgres.jdbcUrl
812+
ds.driverClassName = postgres.driverClassName
813+
ds.username = postgres.username
814+
ds.password = postgres.password
815+
816+
val database = Database.connect(ds, logger = ConsoleLogger(threshold = LogLevel.TRACE))
817+
testJson(database)
818+
}
819+
820+
@Test
821+
fun testJsonWithC3P0() {
822+
val ds = ComboPooledDataSource()
823+
ds.jdbcUrl = postgres.jdbcUrl
824+
ds.driverClass = postgres.driverClassName
825+
ds.user = postgres.username
826+
ds.password = postgres.password
827+
828+
val database = Database.connect(ds, logger = ConsoleLogger(threshold = LogLevel.TRACE))
829+
testJson(database)
830+
}
831+
832+
@Test
833+
fun testJsonWithDBCP() {
834+
val ds = BasicDataSource()
835+
ds.url = postgres.jdbcUrl
836+
ds.driverClassName = postgres.driverClassName
837+
ds.username = postgres.username
838+
ds.password = postgres.password
839+
840+
val database = Database.connect(ds, logger = ConsoleLogger(threshold = LogLevel.TRACE))
841+
testJson(database)
842+
}
843+
844+
@Test
845+
fun testJsonWithDruid() {
846+
val ds = DruidDataSource()
847+
ds.url = postgres.jdbcUrl
848+
ds.driverClassName = postgres.driverClassName
849+
ds.username = postgres.username
850+
ds.password = postgres.password
851+
852+
val database = Database.connect(ds, logger = ConsoleLogger(threshold = LogLevel.TRACE))
853+
testJson(database)
854+
}
855+
856+
private fun testJson(database: Database) {
801857
val t = object : Table<Nothing>("t_json") {
802858
val obj = json<Employee>("obj")
803859
val arr = json<List<Int>>("arr")

0 commit comments

Comments
 (0)