Skip to content

Commit 8a281c7

Browse files
committed
Release 1.1.15 - Don't instantiate empty arrays for DbArray types
1 parent 68aa32a commit 8a281c7

File tree

2 files changed

+28
-10
lines changed

2 files changed

+28
-10
lines changed

build.gradle.kts

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -2,7 +2,7 @@ import org.jetbrains.kotlin.gradle.tasks.KotlinJvmCompile
22
import tanvd.kosogor.proxy.publishJar
33

44
group = "tanvd.aorm"
5-
version = "1.1.15-SNAPSHOT"
5+
version = "1.1.15"
66

77
plugins {
88
kotlin("jvm") version "1.7.10" apply true

src/main/kotlin/tanvd/aorm/DbType.kt

Lines changed: 27 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -133,10 +133,12 @@ class DbArrayDate : DbArrayType<Date>() {
133133

134134

135135
override fun setValue(index: Int, statement: PreparedStatement, value: List<Date>) {
136-
statement.setArray(index,
137-
statement.connection.createArrayOf(toSqlName(), value.map {
138-
java.sql.Date(it.time)
139-
}.toTypedArray()))
136+
if (value.isNotEmpty()) {
137+
val array = value.map { java.sql.Date(it.time) }.toTypedArray()
138+
statement.setArray(index, statement.connection.createArrayOf(toSqlName(), array))
139+
} else {
140+
statement.setNull(index, Types.ARRAY)
141+
}
140142
}
141143

142144
override fun toStringValue(value: List<Date>): String =
@@ -269,15 +271,23 @@ abstract class DbNumericArrayType<T : Number>(val sqlName: String,
269271
val getPrimitiveType: () -> DbPrimitiveType<T>,
270272
@Suppress("PLATFORM_CLASS_MAPPED_TO_KOTLIN")
271273
val setByIndexFunc: (PreparedStatement, Int, List<T>) -> Unit = { statement, index, value ->
272-
statement.setArray(index, statement.connection.createArrayOf(sqlName, (value as java.util.Collection<*>).toArray()))
274+
if (value.isNotEmpty()) {
275+
statement.setArray(index, statement.connection.createArrayOf(sqlName, (value as java.util.Collection<*>).toArray()))
276+
} else {
277+
statement.setNull(index, Types.ARRAY)
278+
}
273279
}) : DbArrayType<T>() {
274280
override fun toSqlName(): String = sqlName
275281

276282
override fun getValue(name: String, result: ResultSet) = getByNameFunc(result, name)
277283
override fun getValue(index: Int, result: ResultSet) = getByIndexFunc(result, index)
278284

279285
override fun setValue(index: Int, statement: PreparedStatement, value: List<T>) {
280-
setByIndexFunc(statement, index, value)
286+
if (value.isNotEmpty()) {
287+
setByIndexFunc(statement, index, value)
288+
} else {
289+
statement.setNull(index, Types.NUMERIC)
290+
}
281291
}
282292

283293
override fun toStringValue(value: List<T>): String = value.joinToString(prefix = "[", postfix = "]") { it.toString() }
@@ -379,8 +389,12 @@ class DbArrayBoolean : DbArrayType<Boolean>() {
379389
}
380390

381391
override fun setValue(index: Int, statement: PreparedStatement, value: List<Boolean>) {
382-
statement.setArray(index,
383-
statement.connection.createArrayOf(toSqlName(), value.map { if (it) 1 else 0 }.toTypedArray()))
392+
if (value.isNotEmpty()) {
393+
val array = value.map { if (it) 1 else 0 }.toTypedArray()
394+
statement.setArray(index, statement.connection.createArrayOf(toSqlName(), array))
395+
} else {
396+
statement.setNull(index, Types.ARRAY)
397+
}
384398
}
385399

386400
override fun toStringValue(value: List<Boolean>): String =
@@ -423,8 +437,12 @@ class DbArrayString : DbArrayType<String>() {
423437

424438

425439
override fun setValue(index: Int, statement: PreparedStatement, value: List<String>) {
426-
statement.setArray(index,
440+
if (value.isNotEmpty()) {
441+
statement.setArray(index,
427442
statement.connection.createArrayOf(toSqlName(), value.toTypedArray()))
443+
} else {
444+
statement.setNull(index, Types.ARRAY)
445+
}
428446
}
429447

430448
override fun toStringValue(value: List<String>): String =

0 commit comments

Comments
 (0)