[jOOQ/jOOQ#17512] Oracle RETURNING emulation doesn't use configured

ConverterProvider from an AutoConverter
This commit is contained in:
Lukas Eder 2024-11-01 15:49:03 +01:00
parent a9c0a4c431
commit 2e24767aca
3 changed files with 22 additions and 3 deletions

View File

@ -73,6 +73,7 @@ import static org.jooq.SQLDialect.SQLITE;
import static org.jooq.SQLDialect.TRINO;
// ...
import static org.jooq.conf.SettingsTools.renderLocale;
import static org.jooq.impl.AbstractDataType.convert0;
import static org.jooq.impl.CommonTableExpressionList.markTopLevelCteAndAccept;
import static org.jooq.impl.DSL.name;
import static org.jooq.impl.DSL.select;
@ -99,11 +100,15 @@ import static org.jooq.impl.Tools.EMPTY_FIELD;
import static org.jooq.impl.Tools.EMPTY_STRING;
import static org.jooq.impl.Tools.anyMatch;
import static org.jooq.impl.Tools.autoAlias;
import static org.jooq.impl.Tools.converterContext;
import static org.jooq.impl.Tools.flattenCollection;
import static org.jooq.impl.Tools.increment;
import static org.jooq.impl.Tools.map;
import static org.jooq.impl.Tools.newRecord;
import static org.jooq.impl.Tools.reference;
import static org.jooq.impl.Tools.removeGenerator;
import static org.jooq.impl.Tools.row0;
import static org.jooq.impl.Tools.setValue;
import static org.jooq.impl.Tools.unalias;
import static org.jooq.impl.Tools.updateQueryImpl;
import static org.jooq.impl.Tools.BooleanDataKey.DATA_UNALIAS_ALIASED_EXPRESSIONS;
@ -133,10 +138,12 @@ import java.util.function.BiFunction;
import org.jooq.Asterisk;
import org.jooq.Binding;
import org.jooq.BindingGetResultSetContext;
import org.jooq.CommonTableExpression;
import org.jooq.Condition;
import org.jooq.Configuration;
import org.jooq.Context;
import org.jooq.ConverterContext;
import org.jooq.DMLQuery;
import org.jooq.DSLContext;
import org.jooq.DataType;
@ -1301,6 +1308,9 @@ abstract class AbstractDMLQuery<R extends Record> extends AbstractRowCountQuery

View File

@ -44,6 +44,7 @@ import org.jooq.Configuration;
import org.jooq.ContextConverter;
import org.jooq.Converter;
import org.jooq.ConverterContext;
import org.jooq.exception.DataTypeException;
import org.jetbrains.annotations.NotNull;
@ -71,7 +72,14 @@ public /* non-final */ class AutoConverter<T, U> extends AbstractContextConverte
private final ContextConverter<T, U> delegate(ConverterContext ctx) {
Converter<T, U> c = ctx.configuration().converterProvider().provide(fromType(), toType());
return scoped(c != null ? c : CONFIG.get().converterProvider().provide(fromType(), toType()));
if (c == null)
c = CONFIG.get().converterProvider().provide(fromType(), toType());
if (c == null)
throw new DataTypeException("Cannot auto convert from " + fromType() + " to " + toType());
else
return scoped(c);
}
@Override

View File

@ -97,6 +97,7 @@ import static org.jooq.conf.SettingsTools.updatablePrimaryKeys;
import static org.jooq.conf.ThrowExceptions.THROW_FIRST;
import static org.jooq.conf.ThrowExceptions.THROW_NONE;
import static org.jooq.exception.DataAccessException.sqlStateClass;
import static org.jooq.impl.AbstractDataType.convert0;
import static org.jooq.impl.CacheType.REFLECTION_CACHE_GET_ANNOTATED_GETTER;
import static org.jooq.impl.CacheType.REFLECTION_CACHE_GET_ANNOTATED_MEMBERS;
import static org.jooq.impl.CacheType.REFLECTION_CACHE_GET_ANNOTATED_SETTERS;
@ -3761,14 +3762,14 @@ final class Tools {
* Type-safely set a value to a record
*/
static final <T> void setValue(Record target, Field<T> targetField, Object value, ConverterContext cc) {
target.set(targetField, ((AbstractDataType<T>) targetField.getDataType()).convert(value, cc));
target.set(targetField, convert0(targetField.getDataType(), value, cc));
}
/**
* Type-safely set a value to a record
*/
static final <T> void setValue(AbstractRecord target, Field<T> targetField, int targetIndex, Object value, ConverterContext cc) {
target.set(targetField, targetIndex, ((AbstractDataType<T>) targetField.getDataType()).convert(value, cc));
target.set(targetField, targetIndex, convert0(targetField.getDataType(), value, cc));
}
/**