在PostgreSQL中,我有一个带有timestamp
type列的表。我希望将其映射到datetime
中的Kotlin Exposed data type(文档尚不清楚,但这是另一个问题)。
我现在的问题是:如何使用SQL文字NOW()
更新/插入一个值,以便数据库服务器将时间戳设置为当前时间戳?
我目前正在尝试将其应用于Exposed DSL API中,如下所示:
object MyTable : Table() {
val col1: Column<String> = varchar("col1", 100).primaryKey()
val last_update: Column<DateTime?> = datetime("last_update").nullable()
}
MyTable.update ({ MyTable.col1 eq "abcd1234" }) {
// How do I put a literal 'NOW()' here?
it[MyTable.last_update] = ...
}
我找到了一种在暴露的源代码中声明自定义表达式的方法,如下所示:
val nowExpression = object : Expression<DateTime>() {
override fun toSQL(queryBuilder: QueryBuilder) = "NOW()"
}
但是如何在更新/插入语句中应用它?
我发现的Kotlin单元测试:
DateTime.now()
的Kotlin端(不是我想要的),或NOW()
表达式。但是,我想将该列的默认值保留为NULL。我没有找到在DSL插入/更新中应用自定义表达式的单元测试,但是也许我遗漏了一些东西。
答案 0 :(得分:1)
Insert / Update语句上有update
函数,它接受Expression
。
MyTable.update ({ MyTable.col1 eq "abcd1234" }) {
it.update(MyTable.last_update, nowExpression)
}