Open
Description
SQLDelight Version
2.0.2
Application Operating System
postgresql, macos
Describe the Bug
I have a table
CREATE TABLE IF NOT EXISTS sleepTracker(
patientId SERIAL PRIMARY KEY,
wakeUpTimes TIMESTAMP[] AS List<Instant> NOT NULL
);
and an adapter
object SleepTrackerAdapter : ColumnAdapter<List<Instant>, Array<LocalDateTime>> {
override fun decode(databaseValue: Array<LocalDateTime>) =
databaseValue.map { it.toInstant(ZoneOffset.UTC).toKotlinInstant() }
override fun encode(value: List<Instant>): Array<LocalDateTime> {
return value.map { it.toJavaInstant() }
.map { LocalDateTime.ofInstant(it, ZoneOffset.UTC) }
.toTypedArray()
}
}
When I query the database via sqldelight with
SELECT * FROM sleepTracker;
I get
Exception in thread "main" java.lang.ClassCastException: class [Ljava.sql.Timestamp; cannot be cast to class [Ljava.time.LocalDateTime; ([Ljava.sql.Timestamp; is in module java.sql of loader 'platform'; [Ljava.time.LocalDateTime; is in module java.base of loader 'bootstrap')
at com.foo.SleepTrackerAdapter.decode(Main.kt:21)
at com.foo.SleepTrackerQueries$getAllTracker$1.invoke(SleepTrackerQueries.kt:25)
at com.foo.SleepTrackerQueries$getAllTracker$1.invoke(SleepTrackerQueries.kt:19)
at app.cash.sqldelight.ExecutableQuery$executeAsList$1.invoke(Query.kt:176)
at app.cash.sqldelight.ExecutableQuery$executeAsList$1.invoke(Query.kt:174)
at app.cash.sqldelight.driver.jdbc.JdbcPreparedStatement.executeQuery(JdbcDriver.kt:283)
at app.cash.sqldelight.driver.jdbc.JdbcDriver.executeQuery(JdbcDriver.kt:155)
at app.cash.sqldelight.SimpleQuery.execute(Query.kt:98)
at app.cash.sqldelight.ExecutableQuery.executeAsList(Query.kt:174)
at com.foo.MainKt.main(Main.kt:18)
at com.foo.MainKt.main(Main.kt)