Joost Klitsie
04/29/2021, 7:35 AMJoost Klitsie
04/29/2021, 8:40 AM/**
* Copy paste UUIDColumnType and map to UUIDWrapper instead of UUID
*/
class WrappedUUIDColumnType<T : UUIDWrapper> constructor(
private val uuidToWrapper: (com.klitsie.pubquiz.common.util.UUID) -> T
) : ColumnType() {
override fun sqlType(): String = currentDialect.dataTypeProvider.uuidType()
override fun valueFromDB(value: Any): T = when {
value is UUID -> value
value is ByteArray -> ByteBuffer.wrap(value).let { b -> UUID(b.long, b.long) }
value is String && value.matches(uuidRegexp) -> UUID.fromString(value)
value is String -> ByteBuffer.wrap(value.toByteArray()).let { b -> UUID(b.long, b.long) }
else -> error("Unexpected value of type UUID: $value of ${value::class.qualifiedName}")
}.asUUID().let { uuidToWrapper(it) }
override fun notNullValueToDB(value: Any): Any =
currentDialect.dataTypeProvider.uuidToDB(valueToUUID(value))
override fun nonNullValueToString(value: Any): String = "'${valueToUUID(value)}'"
private fun valueToUUID(value: Any): UUID = when (value) {
is UUIDWrapper -> value.uuid.asUUID()
is UUID -> value
is String -> UUID.fromString(value)
is ByteArray -> ByteBuffer.wrap(value).let { UUID(it.long, it.long) }
else -> error("Unexpected value of type UUID: ${value.javaClass.canonicalName}")
}
companion object {
private val uuidRegexp = Regex(
"[0-9A-F]{8}-[0-9A-F]{4}-[0-9A-F]{4}-[0-9A-F]{4}-[0-9A-F]{12}",
RegexOption.IGNORE_CASE
)
}
}
/**
* For every different uuid wrapper, create function
*/
fun Table.userId(name: String): Column<UserId> =
registerColumn(name, WrappedUUIDColumnType { UserId(it) })
fun Table.teamId(name: String): Column<TeamId> =
registerColumn(name, WrappedUUIDColumnType { TeamId(it) })
fun Table.eventId(name: String): Column<EventId> =
registerColumn(name, WrappedUUIDColumnType { EventId(it) })
Joost Klitsie
04/29/2021, 8:41 AMEndre Deak
04/29/2021, 11:41 PMTEXT
Joost Klitsie
04/30/2021, 8:13 AMEndre Deak
04/30/2021, 6:17 PMJoost Klitsie
04/30/2021, 7:10 PMEndre Deak
04/30/2021, 8:53 PMEndre Deak
04/30/2021, 8:53 PMJoost Klitsie
05/02/2021, 9:28 PM