org.jetbrains.exposed.sql.javatime.JavaDateFunctions.kt Maven / Gradle / Ivy
Go to download
Show more of this group Show more artifacts with this name
Show all versions of exposed-java-time Show documentation
Show all versions of exposed-java-time Show documentation
Exposed, an ORM framework for Kotlin
package org.jetbrains.exposed.sql.javatime
import org.jetbrains.exposed.sql.*
import org.jetbrains.exposed.sql.Function
import org.jetbrains.exposed.sql.vendors.MysqlDialect
import org.jetbrains.exposed.sql.vendors.SQLServerDialect
import org.jetbrains.exposed.sql.vendors.currentDialect
import java.time.Duration
import java.time.Instant
import java.time.LocalDate
import java.time.LocalDateTime
import java.time.LocalTime
import java.time.temporal.Temporal
class Date(val expr: Expression) : Function(JavaLocalDateColumnType.INSTANCE) {
override fun toQueryBuilder(queryBuilder: QueryBuilder) = queryBuilder { append("DATE(", expr, ")") }
}
class Time(val expr: Expression) : Function(JavaLocalTimeColumnType.INSTANCE) {
override fun toQueryBuilder(queryBuilder: QueryBuilder) = queryBuilder { append("Time(", expr, ")") }
}
object CurrentDateTime : Function(JavaLocalDateTimeColumnType.INSTANCE) {
override fun toQueryBuilder(queryBuilder: QueryBuilder) = queryBuilder {
+when {
(currentDialect as? MysqlDialect)?.isFractionDateTimeSupported() == true -> "CURRENT_TIMESTAMP(6)"
else -> "CURRENT_TIMESTAMP"
}
}
@Deprecated("This class is now a singleton, no need for its constructor call; this method is provided for backward-compatibility only, and will be removed in future releases")
operator fun invoke() = this
}
object CurrentDate : Function(JavaLocalDateColumnType.INSTANCE) {
override fun toQueryBuilder(queryBuilder: QueryBuilder) = queryBuilder {
+when (currentDialect) {
is MysqlDialect -> "CURRENT_DATE()"
is SQLServerDialect -> "GETDATE()"
else -> "CURRENT_DATE"
}
}
}
class CurrentTimestamp : Expression() {
override fun toQueryBuilder(queryBuilder: QueryBuilder) = queryBuilder {
+when {
(currentDialect as? MysqlDialect)?.isFractionDateTimeSupported() == true -> "CURRENT_TIMESTAMP(6)"
else -> "CURRENT_TIMESTAMP"
}
}
}
class Year(val expr: Expression) : Function(IntegerColumnType()) {
override fun toQueryBuilder(queryBuilder: QueryBuilder) = queryBuilder {
currentDialect.functionProvider.year(expr, queryBuilder)
}
}
class Month(val expr: Expression) : Function(IntegerColumnType()) {
override fun toQueryBuilder(queryBuilder: QueryBuilder) = queryBuilder {
currentDialect.functionProvider.month(expr, queryBuilder)
}
}
class Day(val expr: Expression) : Function(IntegerColumnType()) {
override fun toQueryBuilder(queryBuilder: QueryBuilder) = queryBuilder {
currentDialect.functionProvider.day(expr, queryBuilder)
}
}
class Hour(val expr: Expression) : Function(IntegerColumnType()) {
override fun toQueryBuilder(queryBuilder: QueryBuilder) = queryBuilder {
currentDialect.functionProvider.hour(expr, queryBuilder)
}
}
class Minute(val expr: Expression) : Function(IntegerColumnType()) {
override fun toQueryBuilder(queryBuilder: QueryBuilder) = queryBuilder {
currentDialect.functionProvider.minute(expr, queryBuilder)
}
}
class Second(val expr: Expression) : Function(IntegerColumnType()) {
override fun toQueryBuilder(queryBuilder: QueryBuilder) = queryBuilder {
currentDialect.functionProvider.second(expr, queryBuilder)
}
}
fun Expression.date(): Date = Date(this)
fun Expression.year(): Year = Year(this)
fun Expression.month(): Month = Month(this)
fun Expression.day(): Day = Day(this)
fun Expression.hour(): Hour = Hour(this)
fun Expression.minute(): Minute = Minute(this)
fun Expression.second(): Second = Second(this)
fun dateParam(value: LocalDate): Expression = QueryParameter(value, JavaLocalDateColumnType.INSTANCE)
fun timeParam(value: LocalTime): Expression = QueryParameter(value, JavaLocalTimeColumnType.INSTANCE)
fun dateTimeParam(value: LocalDateTime): Expression =
QueryParameter(value, JavaLocalDateTimeColumnType.INSTANCE)
fun timestampParam(value: Instant): Expression = QueryParameter(value, JavaInstantColumnType.INSTANCE)
fun durationParam(value: Duration): Expression = QueryParameter(value, JavaDurationColumnType.INSTANCE)
fun dateLiteral(value: LocalDate): LiteralOp = LiteralOp(JavaLocalDateColumnType.INSTANCE, value)
fun timeLiteral(value: LocalTime): LiteralOp = LiteralOp(JavaLocalTimeColumnType.INSTANCE, value)
fun dateTimeLiteral(value: LocalDateTime): LiteralOp = LiteralOp(JavaLocalDateTimeColumnType.INSTANCE, value)
fun timestampLiteral(value: Instant): LiteralOp = LiteralOp(JavaInstantColumnType.INSTANCE, value)
fun durationLiteral(value: Duration): LiteralOp = LiteralOp(JavaDurationColumnType.INSTANCE, value)
@Suppress("FunctionName")
fun CustomDateFunction(functionName: String, vararg params: Expression<*>): CustomFunction =
CustomFunction(functionName, JavaLocalDateColumnType.INSTANCE, *params)
@Suppress("FunctionName")
fun CustomTimeFunction(functionName: String, vararg params: Expression<*>): CustomFunction =
CustomFunction(functionName, JavaLocalTimeColumnType.INSTANCE, *params)
@Suppress("FunctionName")
fun CustomDateTimeFunction(functionName: String, vararg params: Expression<*>): CustomFunction =
CustomFunction(functionName, JavaLocalDateTimeColumnType.INSTANCE, *params)
@Suppress("FunctionName")
fun CustomTimeStampFunction(functionName: String, vararg params: Expression<*>): CustomFunction =
CustomFunction(functionName, JavaInstantColumnType.INSTANCE, *params)
@Suppress("FunctionName")
fun CustomDurationFunction(functionName: String, vararg params: Expression<*>): CustomFunction =
CustomFunction(functionName, JavaDurationColumnType.INSTANCE, *params)
© 2015 - 2024 Weber Informatics LLC | Privacy Policy