Skip to content

Commit a7c287c

Browse files
fix null enum bug
1 parent 306c8bc commit a7c287c

File tree

3 files changed

+31
-11
lines changed
  • ktorm-core/src/main/kotlin/org/ktorm/schema
  • ktorm-support-mysql/src/test/kotlin/org/ktorm/support/mysql
  • ktorm-support-postgresql/src/test/kotlin/org/ktorm/support/postgresql

3 files changed

+31
-11
lines changed

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

Lines changed: 13 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -501,12 +501,24 @@ public inline fun <reified C : Enum<C>> BaseTable<*>.enum(name: String): Column<
501501
*
502502
* @property enumClass the enum class.
503503
*/
504-
public class EnumSqlType<C : Enum<C>>(public val enumClass: Class<C>) : SqlType<C>(Types.VARCHAR, "enum") {
504+
public class EnumSqlType<C : Enum<C>>(public val enumClass: Class<C>) : SqlType<C>(Types.OTHER, "enum") {
505505

506506
private val hasPostgresqlDriver by lazy {
507507
runCatching { Class.forName("org.postgresql.Driver") }.isSuccess
508508
}
509509

510+
override fun setParameter(ps: PreparedStatement, index: Int, parameter: C?) {
511+
if (parameter != null) {
512+
doSetParameter(ps, index, parameter)
513+
} else {
514+
if (hasPostgresqlDriver && ps is PGStatement) {
515+
ps.setNull(index, Types.OTHER)
516+
} else {
517+
ps.setNull(index, Types.VARCHAR)
518+
}
519+
}
520+
}
521+
510522
override fun doSetParameter(ps: PreparedStatement, index: Int, parameter: C) {
511523
if (hasPostgresqlDriver && ps is PGStatement) {
512524
ps.setObject(index, parameter.name, Types.OTHER)

ktorm-support-mysql/src/test/kotlin/org/ktorm/support/mysql/MySqlTest.kt

Lines changed: 10 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -1,7 +1,7 @@
11
package org.ktorm.support.mysql
22

3-
import org.hamcrest.CoreMatchers
4-
import org.hamcrest.MatcherAssert
3+
import org.hamcrest.CoreMatchers.equalTo
4+
import org.hamcrest.MatcherAssert.assertThat
55
import org.junit.ClassRule
66
import org.junit.Test
77
import org.ktorm.BaseTest
@@ -524,12 +524,16 @@ class MySqlTest : BaseTest() {
524524
}
525525

526526
val count = database.sequenceOf(TableWithEnum).count { it.current_mood eq Mood.SAD }
527+
assertThat(count, equalTo(1))
527528

528-
MatcherAssert.assertThat(count, CoreMatchers.equalTo(1))
529+
val mood = database.sequenceOf(TableWithEnum).filter { it.id eq 1 }.mapColumns { it.current_mood }.first()
530+
assertThat(mood, equalTo(Mood.SAD))
529531

530-
val currentMood =
531-
database.sequenceOf(TableWithEnum).filter { it.id eq 1 }.mapColumns { it.current_mood }.first()
532+
database.insert(TableWithEnum) {
533+
set(it.current_mood, null)
534+
}
532535

533-
MatcherAssert.assertThat(currentMood, CoreMatchers.equalTo(Mood.SAD))
536+
val mood1 = database.sequenceOf(TableWithEnum).filter { it.id eq 2 }.mapColumns { it.current_mood }.first()
537+
assertThat(mood1, equalTo(null))
534538
}
535539
}

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

Lines changed: 8 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -783,13 +783,17 @@ class PostgreSqlTest : BaseTest() {
783783
}
784784

785785
val count = database.sequenceOf(TableWithEnum).count { it.current_mood eq Mood.SAD }
786-
787786
assertThat(count, equalTo(1))
788787

789-
val currentMood =
790-
database.sequenceOf(TableWithEnum).filter { it.id eq 1 }.mapColumns { it.current_mood }.first()
788+
val mood = database.sequenceOf(TableWithEnum).filter { it.id eq 1 }.mapColumns { it.current_mood }.first()
789+
assertThat(mood, equalTo(Mood.HAPPY))
790+
791+
database.insert(TableWithEnum) {
792+
set(it.current_mood, null)
793+
}
791794

792-
assertThat(currentMood, equalTo(Mood.HAPPY))
795+
val mood1 = database.sequenceOf(TableWithEnum).filter { it.id eq 3 }.mapColumns { it.current_mood }.first()
796+
assertThat(mood1, equalTo(null))
793797
}
794798

795799
@Test

0 commit comments

Comments
 (0)