ExasolDialect.java
package org.itsallcode.jdbc.dialect;
import java.time.*;
import java.time.format.DateTimeFormatter;
import org.itsallcode.jdbc.resultset.generic.ColumnMetaData;
/**
* Dialect for the Exasol database.
*/
public class ExasolDialect extends AbstractDbDialect {
private static final DateTimeFormatter DATE_TIME_FORMATTER = DateTimeFormatter.ofPattern("yyyy-MM-dd HH:mm:ss.SSS");
private static final ZoneId UTC_ZONE = ZoneId.of("UTC");
/**
* Create a new instance.
*/
public ExasolDialect() {
super("jdbc:exa:");
}
@Override
public ColumnValueExtractor createExtractor(final ColumnMetaData column) {
return switch (column.type().jdbcType()) {
case TIMESTAMP -> Extractors.timestampToUTCInstant();
case CLOB -> Extractors.clobToString();
case BLOB -> Extractors.blobToBytes();
case DATE -> Extractors.dateToLocalDate();
default -> Extractors.generic();
};
}
@SuppressWarnings("unchecked")
@Override
public <T> ColumnValueSetter<T> createSetter(final Class<T> type) {
if (type == LocalDate.class) {
return (ColumnValueSetter<T>) Setters.localDateToString();
}
if (type == Instant.class) {
return (ColumnValueSetter<T>) Setters.instantToString(DATE_TIME_FORMATTER, UTC_ZONE);
}
if (type == LocalDateTime.class) {
return (ColumnValueSetter<T>) Setters.localDateTimeToString(DATE_TIME_FORMATTER);
}
return Setters.generic();
}
}