mathiasbn
07/04/2016, 12:35 PMfun <T:Enum<T>> Table.stringEnumeration(name: String, klass: Class<T>) : Column<T> = registerColumn(name, StringEnumerationColumnType(klass))
class StringEnumerationColumnType<T:Enum<T>>(val klass: Class<T>): ColumnType() {
override fun sqlType(): String = "VARCHAR(255)"
override fun notNullValueToDB(value: Any): Any {
return when (value) {
is Enum<*> -> "'${value.name.toLowerCase()}'"
else -> error("$value is not valid for varchar enum ${klass.name}")
}
}
@Suppress("UNCHECKED_CAST")
override fun valueFromDB(value: Any): Any {
return klass.enumConstants!!.first { it.name.toLowerCase() == (value as String).removeSurrounding("'") }
}
}