awslabs / awslabs/rds-data-api-client-library-java

Issues with TimeStamp when used for RDS that is backed by PostgreSQL

未关闭
#12 0 条评论 0 个 reaction 已指派 0 人 在 GitHub 查看
主要语言
Java
星标
21
派生
5
PR 合并指标
30 天内没有已合并 PR

描述

I created an integration test that uses version 2.0.0 of the ads-data-api-client-library and writes and then retrieves data to a table with a timestamp column..

When retrieving a timestamp value that has millis mod 10 = 0, e.g. 2022-04-06 22:58:48.990 (or as displayed on the RDS query tool in the Aws console 2022-04-06 22:58:48.99), an exception is thrown, like so:

java.time.format.DateTimeParseException: Text '2022-04-06 22:58:48.99' could not be parsed, unparsed text found at index 19

0 = {StackTraceElement@6106} "java.base/java.time.format.DateTimeFormatter.parseResolved0(DateTimeFormatter.java:2049)"
1 = {StackTraceElement@6107} "java.base/java.time.format.DateTimeFormatter.parse(DateTimeFormatter.java:1874)"
2 = {StackTraceElement@6108} "com.amazon.rdsdata.client.TypeConverter.fromField(TypeConverter.java:123)"
3 = {StackTraceElement@6109} "com.amazon.rdsdata.client.ExecutionResult$Row.getValue(ExecutionResult.java:132)"

It appears that the parsing format does not properly deal with a date time string that doesn't have the 3rd digit to the right of the decimal place.

I have worked around this by adding one millisecond to date time values for which datetimevalue.toEpochMillis % 10 == 0,
e.g.
```
fun Instant.asRDSLocalDateTime() : LocalDateTime {
// Kuldge to deal with RDS formatting and parsing - date time values that don't have 3 digits of milli seconds , e.g. 2022-04-06 23:12:00.12 fail to parse due to RDS Client
// example exception: java.time.format.DateTimeParseException: Text '2022-04-06 22:58:48.99' could not be parsed, unparsed text found at index 19
var truncated = this.truncatedTo(ChronoUnit.MILLIS)
if (truncated.toEpochMilli() % 10L == 0L) {
truncated= truncated.plusMillis(1L)
}
return LocalDateTime.ofInstant(truncated,ZoneOffset.UTC)
}
```

Ever since I did that, I no longer get exceptions.

Should be simple to fix, just change the format string.

While you are in there, could you add support for Instants? Coverting back and forth to LocalDateTime is tedious.

And, while your at it, it would be easier to use the rds-data-api-client-library-java if it supported the java.sql types, e.g. TimeStamp. It would result in less boilerplate.

Thanks

贡献指南

打开贡献指南

调研方向

从 TypeConverter.java:123 的 DateTimeParseException 开始,跟踪 ExecutionResult.java:132 如何转换返回的时间戳字段。复现带有两位小数的 PostgreSQL/RDS 值,然后添加一个用于解析的回归测试;在考虑将其视为完成之前,应分别评估所请求的 Instant 和 java.sql.Timestamp 支持。

由索引模型根据 Issue 内容生成。

评估

技术栈
aws, java, postgresql
领域
api, databases
Issue 类型
缺陷
难度
4/5
预计耗时
3-5 天
活跃度
停滞
描述清晰度
基本清楚
新手友好度
35/100

把新 issue 发到你的邮箱

精选适合新手参与的 GitHub issue 摘要。