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

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

Abierto
#12 0 comentarios 0 reacciones 0 asignados Ver en GitHub
Lenguaje dominante
Java
Estrellas
21
Forks
5
Métricas de merge de PR
Sin PR fusionados en 30 d

Descripción

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

Guía de contribución

Abrir la guía de contribución

Línea de trabajo

Comience con la DateTimeParseException en TypeConverter.java:123 y rastree cómo ExecutionResult.java:132 convierte los campos de marca de tiempo devueltos. Reproduzca el valor de PostgreSQL/RDS con dos dígitos fraccionarios y, después, añada una prueba de regresión para el análisis; la compatibilidad solicitada con Instant y java.sql.Timestamp debe evaluarse por separado antes de considerarla terminada.

Escrito por el modelo de indexación a partir del texto del issue.

Evaluación

Stack tecnológico
aws, java, postgresql
Área
api, databases
Tipo de issue
Error
Dificultad
4/5
Tiempo estimado
3-5 días
Estado de actividad
Estancado
Claridad
Bastante claro
Aptitud para principiantes
35/100

Recibe los nuevos issues en tu correo

Un resumen breve de issues de GitHub para principiantes.