dave08
04/11/2024, 3:21 PMinline fun <reified T : Any> literal(value: T): ColumnExpression<T, T> {
val operand = Operand.SimpleArgument(T::class, value)
return columnExpression(T::class, "literalObject", listOf(operand)) {
visit(operand)
}
}
to use in selectAsXXX functions... I need to put in literals when I use that with
QueryDsl.insert(...).select {
... // here often I need these literals like value classes, or enums... I use a query with selectAsXXX
}
dave08
04/12/2024, 7:08 AMToshihiro Nakamura
04/13/2024, 1:12 AMenum class Color {
RED, BLUE
}
@KomapperEntity
@KomapperProjection
data class Box(
@KomapperId
@KomapperAutoIncrement
val id: Int = 0,
@KomapperEnum(type = EnumType.NAME)
val color : Color,
)
// ColumnExpression for a generic Enum type
fun <E : Enum<E>> bindEnum(expression: ColumnExpression<E, *>, value: E): ColumnExpression<E, *> {
val operand = Operand.Argument(expression, value)
return columnExpression(expression,"bindEnum", listOf(operand)) {
visit(operand)
}
}
Use the above bindEnum
function as follows:
database.runQuery {
QueryDsl.insert(b).select {
QueryDsl.from(b).selectAsBox(id = b.id, color = bindEnum(b.color, Color.BLUE))
}
}
dave08
04/15/2024, 9:24 AM