@@ -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