Sha256: 8d5cfad93b9e126e9115ffd49e384899fe24aa3ca3cc5d0413695e3594868a19

Contents?: true

Size: 1.98 KB

Versions: 5

Compression:

Stored size: 1.98 KB

Contents

package org.embulk.input.postgresql.getter;

import org.embulk.input.jdbc.AbstractJdbcInputPlugin.PluginTask;
import org.embulk.input.jdbc.JdbcColumn;
import org.embulk.input.jdbc.JdbcColumnOption;
import org.embulk.input.jdbc.JdbcInputConnection;
import org.embulk.input.jdbc.getter.ColumnGetter;
import org.embulk.input.jdbc.getter.ColumnGetterFactory;
import org.embulk.input.jdbc.getter.TimestampWithTimeZoneIncrementalHandler;
import org.embulk.input.jdbc.getter.TimestampWithoutTimeZoneIncrementalHandler;
import org.embulk.spi.PageBuilder;
import org.embulk.spi.type.Types;
import org.joda.time.DateTimeZone;

public class PostgreSQLColumnGetterFactory extends ColumnGetterFactory
{
    public PostgreSQLColumnGetterFactory(PageBuilder to, DateTimeZone defaultTimeZone)
    {
        super(to, defaultTimeZone);
    }

    @Override
    public ColumnGetter newColumnGetter(JdbcInputConnection con, PluginTask task, JdbcColumn column, JdbcColumnOption option)
    {
        if (column.getTypeName().equals("hstore") && getToType(option) == Types.JSON) {
            // converting hstore to json needs a special handling
            return new HstoreToJsonColumnGetter(to, Types.JSON);
        }

        ColumnGetter getter = super.newColumnGetter(con, task, column, option);

        // incremental loading wrapper
        switch (column.getTypeName()) {
        case "timestamptz":
            return new TimestampWithTimeZoneIncrementalHandler(getter);
        case "timestamp":
            return new TimestampWithoutTimeZoneIncrementalHandler(getter);
        default:
            return getter;
        }
    }

    @Override
    protected String sqlTypeToValueType(JdbcColumn column, int sqlType)
    {
        switch(column.getTypeName()) {
        case "json":
        case "jsonb":
            return "json";
        case "hstore":
            // hstore is converted to string by default
            return "string";
        default:
            return super.sqlTypeToValueType(column, sqlType);
        }
    }
}

Version data entries

5 entries across 5 versions & 1 rubygems

Version Path
embulk-input-postgresql-0.8.5 src/main/java/org/embulk/input/postgresql/getter/PostgreSQLColumnGetterFactory.java
embulk-input-postgresql-0.8.4 src/main/java/org/embulk/input/postgresql/getter/PostgreSQLColumnGetterFactory.java
embulk-input-postgresql-0.8.3 src/main/java/org/embulk/input/postgresql/getter/PostgreSQLColumnGetterFactory.java
embulk-input-postgresql-0.8.2 src/main/java/org/embulk/input/postgresql/getter/PostgreSQLColumnGetterFactory.java
embulk-input-postgresql-0.8.1 src/main/java/org/embulk/input/postgresql/getter/PostgreSQLColumnGetterFactory.java