001package org.itsallcode.jdbc.dialect;
002
003import java.time.LocalDate;
004import java.time.LocalTime;
005
006import org.itsallcode.jdbc.resultset.generic.ColumnMetaData;
007
008/**
009 * DB dialect for the H2 database.
010 */
011public class H2Dialect extends AbstractDbDialect {
012
013    /**
014     * Create a new instance.
015     */
016    public H2Dialect() {
017        super("jdbc:h2:");
018    }
019
020    @Override
021    public ColumnValueExtractor createExtractor(final ColumnMetaData column) {
022        return switch (column.type().jdbcType()) {
023        case TIMESTAMP -> Extractors.timestampToUTCInstant();
024        case TIMESTAMP_WITH_TIMEZONE -> Extractors.timestampToInstant();
025        case CLOB -> Extractors.clobToString();
026        case BLOB -> Extractors.blobToBytes();
027        case TIME -> Extractors.forType(LocalTime.class);
028        case DATE -> Extractors.forType(LocalDate.class);
029        default -> Extractors.generic();
030        };
031    }
032
033    @Override
034    public <T> ColumnValueSetter<T> createSetter(final Class<T> type) {
035        return Setters.generic();
036    }
037}