KomapperCreatedAt and truncate time #927
Answered
by
nakamura-to
Distractic
asked this question in
Q&A
-
Hello ! I have this class : public data class Guild(
@KomapperId
@KomapperAutoIncrement
val id: Int,
val name: String,
val owner: UUID,
@KomapperCreatedAt
val createdAt: Instant,
) To create my database data, I'm doing : suspend fun createGuild(name: String, owner: UUID): Guild {
val guild = Guild(0, name, owner, Instant.EPOCH)
val query = QueryDsl.insert(_Guild.guild).single(guild)
return database.runQuery(query)
} However, in my test, the guild returned from the My test : @Nested
inner class CreateGuild {
@Test
fun `when owner is already in a guild`() = runTest {
val guild = service.createGuild("test", UUID.randomUUID())
val guild2 = service.createGuild("test2", guild.owner)
assertNotEquals(guild.id, guild2.id)
val guilds = getAll()
assertEquals(2, guilds.size)
assertEquals(guild, guilds[0])
assertEquals(guild2, guilds[1])
}
}
private suspend fun getAll(): List<Guild> {
return DatabaseUtils.getAll(database, _Guild.guild)
} However, I have this error :
If I try to truncate the val guild = service.createGuild("test", UUID.randomUUID()).let {
it.copy(createdAt = it.createdAt.truncatedTo(java.time.temporal.ChronoUnit.MICROS))
}
val guild2 = service.createGuild("test2", guild.owner).let {
it.copy(createdAt = it.createdAt.truncatedTo(java.time.temporal.ChronoUnit.MICROS))
} The error is :
So I have two questions :
|
Beta Was this translation helpful? Give feedback.
Answered by
nakamura-to
Mar 25, 2023
Replies: 1 comment
-
PostgreSQL drivers seem to round up nanoseconds. You can use Create the following class: import org.komapper.core.ClockProvider
import java.time.Clock
import java.time.Instant
import java.time.ZoneId
import java.time.temporal.ChronoUnit
class MicroClockProvider(private val zoneId: ZoneId = ZoneId.systemDefault()) : ClockProvider {
override fun now(): Clock {
val instant = Instant.now().truncatedTo(ChronoUnit.MICROS)
return Clock.fixed(instant, zoneId)
}
} Set an instance of the above class to val database = R2dbcDatabase(clockProvider = MicroClockProvider()) See also https://www.komapper.org/docs/reference/database-config/#clockprovider . |
Beta Was this translation helpful? Give feedback.
0 replies
Answer selected by
Distractic
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
PostgreSQL drivers seem to round up nanoseconds.
You can use
ClockProvider
.Create the following class:
Set an instance of the above class to
JdbcDatabase
orR2dbcDatabase
:See also https://www.komapper.org/docs/reference/database-con…