Search in sources :

Example 1 with Attachable

use of org.jooq.Attachable in project jOOQ by jOOQ.

the class AbstractStore method attach.

@Override
public final void attach(Configuration c) {
    configuration = c;
    final List<Attachable> attachables = getAttachables();
    final int size = attachables.size();
    for (int i = 0; i < size; i++) {
        Attachable attachable = attachables.get(i);
        if (attachable != null)
            attachable.attach(c);
    }
}
Also used : Attachable(org.jooq.Attachable)

Example 2 with Attachable

use of org.jooq.Attachable in project jOOQ by jOOQ.

the class DefaultBinding method get.

@SuppressWarnings("unchecked")
@Override
public void get(BindingGetResultSetContext<U> ctx) throws SQLException {
    T result = null;
    if (type == Blob.class) {
        result = (T) ctx.resultSet().getBlob(ctx.index());
    } else if (type == Boolean.class) {
        result = (T) wasNull(ctx.resultSet(), Boolean.valueOf(ctx.resultSet().getBoolean(ctx.index())));
    } else if (type == BigInteger.class) {
        // The SQLite JDBC driver doesn't support BigDecimals
        if (ctx.configuration().dialect() == SQLDialect.SQLITE) {
            result = Convert.convert(ctx.resultSet().getString(ctx.index()), (Class<T>) BigInteger.class);
        } else {
            BigDecimal b = ctx.resultSet().getBigDecimal(ctx.index());
            result = (T) (b == null ? null : b.toBigInteger());
        }
    } else if (type == BigDecimal.class) {
        // The SQLite JDBC driver doesn't support BigDecimals
        if (ctx.configuration().dialect() == SQLDialect.SQLITE) {
            result = Convert.convert(ctx.resultSet().getString(ctx.index()), (Class<T>) BigDecimal.class);
        } else {
            result = (T) ctx.resultSet().getBigDecimal(ctx.index());
        }
    } else if (type == Byte.class) {
        result = (T) wasNull(ctx.resultSet(), Byte.valueOf(ctx.resultSet().getByte(ctx.index())));
    } else if (type == byte[].class) {
        result = (T) ctx.resultSet().getBytes(ctx.index());
    } else if (type == Clob.class) {
        result = (T) ctx.resultSet().getClob(ctx.index());
    } else if (type == Date.class) {
        result = (T) getDate(ctx.family(), ctx.resultSet(), ctx.index());
    } else if (type == Double.class) {
        result = (T) wasNull(ctx.resultSet(), Double.valueOf(ctx.resultSet().getDouble(ctx.index())));
    } else if (type == Float.class) {
        result = (T) wasNull(ctx.resultSet(), Float.valueOf(ctx.resultSet().getFloat(ctx.index())));
    } else if (type == Integer.class) {
        result = (T) wasNull(ctx.resultSet(), Integer.valueOf(ctx.resultSet().getInt(ctx.index())));
    } else if (type == LocalDate.class) {
        result = (T) localDate(getDate(ctx.family(), ctx.resultSet(), ctx.index()));
    } else if (type == LocalTime.class) {
        result = (T) localTime(getTime(ctx.family(), ctx.resultSet(), ctx.index()));
    } else if (type == LocalDateTime.class) {
        result = (T) localDateTime(getTimestamp(ctx.family(), ctx.resultSet(), ctx.index()));
    } else if (type == Long.class) {
        result = (T) wasNull(ctx.resultSet(), Long.valueOf(ctx.resultSet().getLong(ctx.index())));
    } else if (type == OffsetTime.class) {
        result = (T) offsetTime(ctx.resultSet().getString(ctx.index()));
    } else if (type == OffsetDateTime.class) {
        result = (T) offsetDateTime(ctx.resultSet().getString(ctx.index()));
    } else if (type == Short.class) {
        result = (T) wasNull(ctx.resultSet(), Short.valueOf(ctx.resultSet().getShort(ctx.index())));
    } else if (type == String.class) {
        result = (T) ctx.resultSet().getString(ctx.index());
    } else if (type == Time.class) {
        result = (T) getTime(ctx.family(), ctx.resultSet(), ctx.index());
    } else if (type == Timestamp.class) {
        result = (T) getTimestamp(ctx.family(), ctx.resultSet(), ctx.index());
    } else if (type == YearToMonth.class) {
        if (ctx.family() == POSTGRES) {
            Object object = ctx.resultSet().getObject(ctx.index());
            result = (T) (object == null ? null : PostgresUtils.toYearToMonth(object));
        } else {
            String string = ctx.resultSet().getString(ctx.index());
            result = (T) (string == null ? null : YearToMonth.valueOf(string));
        }
    } else if (type == DayToSecond.class) {
        if (ctx.family() == POSTGRES) {
            Object object = ctx.resultSet().getObject(ctx.index());
            result = (T) (object == null ? null : PostgresUtils.toDayToSecond(object));
        } else {
            String string = ctx.resultSet().getString(ctx.index());
            result = (T) (string == null ? null : DayToSecond.valueOf(string));
        }
    } else if (type == UByte.class) {
        result = (T) Convert.convert(ctx.resultSet().getString(ctx.index()), UByte.class);
    } else if (type == UShort.class) {
        result = (T) Convert.convert(ctx.resultSet().getString(ctx.index()), UShort.class);
    } else if (type == UInteger.class) {
        result = (T) Convert.convert(ctx.resultSet().getString(ctx.index()), UInteger.class);
    } else if (type == ULong.class) {
        result = (T) Convert.convert(ctx.resultSet().getString(ctx.index()), ULong.class);
    } else if (type == UUID.class) {
        switch(ctx.family()) {
            // java.util.UUID data type
            case H2:
            case POSTGRES:
                {
                    result = (T) ctx.resultSet().getObject(ctx.index());
                    break;
                }
            // emulates the type
            default:
                {
                    result = (T) Convert.convert(ctx.resultSet().getString(ctx.index()), UUID.class);
                    break;
                }
        }
    } else // The type byte[] is handled earlier. byte[][] can be handled here
    if (type.isArray()) {
        switch(ctx.family()) {
            case POSTGRES:
                {
                    result = pgGetArray(ctx, ctx.resultSet(), type, ctx.index());
                    break;
                }
            default:
                // Note: due to a HSQLDB bug, it is not recommended to call rs.getObject() here:
                // See https://sourceforge.net/tracker/?func=detail&aid=3181365&group_id=23316&atid=378131
                result = (T) convertArray(ctx.resultSet().getArray(ctx.index()), (Class<? extends Object[]>) type);
                break;
        }
    } else if (EnumType.class.isAssignableFrom(type)) {
        result = (T) getEnumType((Class<EnumType>) type, ctx.resultSet().getString(ctx.index()));
    } else if (Record.class.isAssignableFrom(type)) {
        switch(ctx.family()) {
            case POSTGRES:
                result = (T) pgNewRecord(type, null, ctx.resultSet().getObject(ctx.index()));
                break;
            default:
                result = (T) ctx.resultSet().getObject(ctx.index(), typeMap(type, ctx.configuration()));
                break;
        }
    } else if (Result.class.isAssignableFrom(type)) {
        ResultSet nested = (ResultSet) ctx.resultSet().getObject(ctx.index());
        result = (T) DSL.using(ctx.configuration()).fetch(nested);
    } else {
        result = (T) unlob(ctx.resultSet().getObject(ctx.index()));
    }
    // [#4372] Attach records if possible / required
    if (result instanceof Attachable && attachRecords(ctx.configuration()))
        ((Attachable) result).attach(ctx.configuration());
    ctx.value(converter.from(result));
}
Also used : LocalDateTime(java.time.LocalDateTime) Time(java.sql.Time) LocalTime(java.time.LocalTime) OffsetTime(java.time.OffsetTime) OffsetDateTime(java.time.OffsetDateTime) LocalDateTime(java.time.LocalDateTime) PostgresUtils.toPGArrayString(org.jooq.util.postgres.PostgresUtils.toPGArrayString) LocalDate(java.time.LocalDate) BigDecimal(java.math.BigDecimal) LocalDate(java.time.LocalDate) Date(java.sql.Date) Result(org.jooq.Result) UByte(org.jooq.types.UByte) OffsetTime(java.time.OffsetTime) EnumType(org.jooq.EnumType) UInteger(org.jooq.types.UInteger) ResultSet(java.sql.ResultSet) MockResultSet(org.jooq.tools.jdbc.MockResultSet) UUID(java.util.UUID) Attachable(org.jooq.Attachable) UShort(org.jooq.types.UShort) YearToMonth(org.jooq.types.YearToMonth)

Example 3 with Attachable

use of org.jooq.Attachable in project jOOQ by jOOQ.

the class DefaultRecordMapper method attach.

private static <E> E attach(E attachable, Record record) {
    // Settings.attachRecords flag is set
    if (attachable instanceof Attachable && record instanceof AttachableInternal) {
        Attachable a = (Attachable) attachable;
        AttachableInternal r = (AttachableInternal) record;
        if (Tools.attachRecords(r.configuration())) {
            a.attach(r.configuration());
        }
    }
    return attachable;
}
Also used : Attachable(org.jooq.Attachable) AttachableInternal(org.jooq.AttachableInternal)

Example 4 with Attachable

use of org.jooq.Attachable in project jOOQ by jOOQ.

the class AbstractRecord method getAttachables.

// ------------------------------------------------------------------------
// XXX: Attachable API
// ------------------------------------------------------------------------
@Override
final List<Attachable> getAttachables() {
    List<Attachable> result = null;
    int size = size();
    for (int i = 0; i < size; i++) {
        if (values[i] instanceof Attachable) {
            Attachable a = (Attachable) values[i];
            if (result == null)
                result = new ArrayList<>();
            result.add(a);
        }
    }
    return result == null ? emptyList() : result;
}
Also used : ArrayList(java.util.ArrayList) Attachable(org.jooq.Attachable)

Example 5 with Attachable

use of org.jooq.Attachable in project jOOQ by jOOQ.

the class DefaultBinding method get.

@SuppressWarnings("unchecked")
@Override
public void get(BindingGetStatementContext<U> ctx) throws SQLException {
    T result = null;
    if (type == Blob.class) {
        result = (T) ctx.statement().getBlob(ctx.index());
    } else if (type == Boolean.class) {
        result = (T) wasNull(ctx.statement(), Boolean.valueOf(ctx.statement().getBoolean(ctx.index())));
    } else if (type == BigInteger.class) {
        BigDecimal d = ctx.statement().getBigDecimal(ctx.index());
        result = (T) (d == null ? null : d.toBigInteger());
    } else if (type == BigDecimal.class) {
        result = (T) ctx.statement().getBigDecimal(ctx.index());
    } else if (type == Byte.class) {
        result = (T) wasNull(ctx.statement(), Byte.valueOf(ctx.statement().getByte(ctx.index())));
    } else if (type == byte[].class) {
        result = (T) ctx.statement().getBytes(ctx.index());
    } else if (type == Clob.class) {
        result = (T) ctx.statement().getClob(ctx.index());
    } else if (Tools.isDate(type)) {
        result = (T) ctx.statement().getDate(ctx.index());
        if (result != null && type == LocalDate.class)
            result = (T) ((Date) result).toLocalDate();
    } else if (type == Double.class) {
        result = (T) wasNull(ctx.statement(), Double.valueOf(ctx.statement().getDouble(ctx.index())));
    } else if (type == Float.class) {
        result = (T) wasNull(ctx.statement(), Float.valueOf(ctx.statement().getFloat(ctx.index())));
    } else if (type == Integer.class) {
        result = (T) wasNull(ctx.statement(), Integer.valueOf(ctx.statement().getInt(ctx.index())));
    } else if (type == Long.class) {
        result = (T) wasNull(ctx.statement(), Long.valueOf(ctx.statement().getLong(ctx.index())));
    } else if (type == Short.class) {
        result = (T) wasNull(ctx.statement(), Short.valueOf(ctx.statement().getShort(ctx.index())));
    } else if (type == String.class) {
        result = (T) ctx.statement().getString(ctx.index());
    } else if (Tools.isTime(type)) {
        result = (T) ctx.statement().getTime(ctx.index());
        if (result != null && type == LocalTime.class)
            result = (T) ((Time) result).toLocalTime();
    } else if (Tools.isTimestamp(type)) {
        result = (T) ctx.statement().getTimestamp(ctx.index());
        if (result != null && type == LocalDateTime.class)
            result = (T) ((Timestamp) result).toLocalDateTime();
    } else if (type == OffsetTime.class) {
        result = (T) offsetTime(ctx.statement().getString(ctx.index()));
    } else if (type == OffsetDateTime.class) {
        result = (T) offsetDateTime(ctx.statement().getString(ctx.index()));
    } else if (type == YearToMonth.class) {
        if (ctx.family() == POSTGRES) {
            Object object = ctx.statement().getObject(ctx.index());
            result = (T) (object == null ? null : PostgresUtils.toYearToMonth(object));
        } else {
            String string = ctx.statement().getString(ctx.index());
            result = (T) (string == null ? null : YearToMonth.valueOf(string));
        }
    } else if (type == DayToSecond.class) {
        if (ctx.family() == POSTGRES) {
            Object object = ctx.statement().getObject(ctx.index());
            result = (T) (object == null ? null : PostgresUtils.toDayToSecond(object));
        } else {
            String string = ctx.statement().getString(ctx.index());
            result = (T) (string == null ? null : DayToSecond.valueOf(string));
        }
    } else if (type == UByte.class) {
        String string = ctx.statement().getString(ctx.index());
        result = (T) (string == null ? null : UByte.valueOf(string));
    } else if (type == UShort.class) {
        String string = ctx.statement().getString(ctx.index());
        result = (T) (string == null ? null : UShort.valueOf(string));
    } else if (type == UInteger.class) {
        String string = ctx.statement().getString(ctx.index());
        result = (T) (string == null ? null : UInteger.valueOf(string));
    } else if (type == ULong.class) {
        String string = ctx.statement().getString(ctx.index());
        result = (T) (string == null ? null : ULong.valueOf(string));
    } else if (type == UUID.class) {
        switch(ctx.family()) {
            // java.util.UUID data type
            case H2:
            case POSTGRES:
                {
                    result = (T) ctx.statement().getObject(ctx.index());
                    break;
                }
            // emulates the type
            default:
                {
                    result = (T) Convert.convert(ctx.statement().getString(ctx.index()), UUID.class);
                    break;
                }
        }
    } else // The type byte[] is handled earlier. byte[][] can be handled here
    if (type.isArray()) {
        result = (T) convertArray(ctx.statement().getObject(ctx.index()), (Class<? extends Object[]>) type);
    } else if (EnumType.class.isAssignableFrom(type)) {
        result = (T) getEnumType((Class<EnumType>) type, ctx.statement().getString(ctx.index()));
    } else if (Record.class.isAssignableFrom(type)) {
        switch(ctx.family()) {
            case POSTGRES:
                result = (T) pgNewRecord(type, null, ctx.statement().getObject(ctx.index()));
                break;
            default:
                result = (T) ctx.statement().getObject(ctx.index(), typeMap(type, ctx.configuration()));
                break;
        }
    } else if (Result.class.isAssignableFrom(type)) {
        ResultSet nested = (ResultSet) ctx.statement().getObject(ctx.index());
        result = (T) DSL.using(ctx.configuration()).fetch(nested);
    } else {
        result = (T) ctx.statement().getObject(ctx.index());
    }
    // [#4372] Attach records if possible / required
    if (result instanceof Attachable && attachRecords(ctx.configuration()))
        ((Attachable) result).attach(ctx.configuration());
    ctx.value(converter.from(result));
}
Also used : ULong(org.jooq.types.ULong) LocalTime(java.time.LocalTime) DayToSecond(org.jooq.types.DayToSecond) UShort(org.jooq.types.UShort) PostgresUtils.toPGArrayString(org.jooq.util.postgres.PostgresUtils.toPGArrayString) Timestamp(java.sql.Timestamp) BigDecimal(java.math.BigDecimal) LocalDate(java.time.LocalDate) Date(java.sql.Date) OffsetDateTime(java.time.OffsetDateTime) EnumType(org.jooq.EnumType) ULong(org.jooq.types.ULong) ResultSet(java.sql.ResultSet) MockResultSet(org.jooq.tools.jdbc.MockResultSet) UDTRecord(org.jooq.UDTRecord) Record(org.jooq.Record) UUID(java.util.UUID) Attachable(org.jooq.Attachable)

Aggregations

Attachable (org.jooq.Attachable)5 BigDecimal (java.math.BigDecimal)2 Date (java.sql.Date)2 ResultSet (java.sql.ResultSet)2 LocalDate (java.time.LocalDate)2 LocalTime (java.time.LocalTime)2 OffsetDateTime (java.time.OffsetDateTime)2 UUID (java.util.UUID)2 EnumType (org.jooq.EnumType)2 MockResultSet (org.jooq.tools.jdbc.MockResultSet)2 UShort (org.jooq.types.UShort)2 PostgresUtils.toPGArrayString (org.jooq.util.postgres.PostgresUtils.toPGArrayString)2 Time (java.sql.Time)1 Timestamp (java.sql.Timestamp)1 LocalDateTime (java.time.LocalDateTime)1 OffsetTime (java.time.OffsetTime)1 ArrayList (java.util.ArrayList)1 AttachableInternal (org.jooq.AttachableInternal)1 Record (org.jooq.Record)1 Result (org.jooq.Result)1