在 PostgreSQL 中,我有一个包含timestamp
类型列的表。我希望这映射到Kotlin Exposed 数据类型(datetime
文档不清楚,但这是另一个问题)。
我现在的问题是:如何使用 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] = ...
}
我找到了一种在 Exposed 源代码中声明自定义表达式的方法,如下所示:
val nowExpression = object : Expression<DateTime>() {
override fun toSQL(queryBuilder: QueryBuilder) = "NOW()"
}
但是如何在我的更新/插入语句中应用它?
我发现的 Kotlin 单元测试:
- 使用 Kotlin 方面的
DateTime.now()
(不是我想要的),或者 - 使用现在的列默认值,然后在插入中省略列值。这是我找到文字
NOW()
表达的地方。但是,我想在该列上保持我的默认值为 NULL。
我没有找到在 DSL 插入/更新中应用自定义表达式的单元测试,但也许我遗漏了一些东西。