[jOOQ/jOOQ#12413] DataTypeException in multiset with a mapped nested row

This commit is contained in:
Lukas Eder 2021-10-13 17:57:14 +02:00
parent 67459fff9e
commit a26e6f7676
2 changed files with 16 additions and 4 deletions

View File

@ -1013,11 +1013,16 @@ abstract class AbstractRecord extends AbstractStore implements Record {
* public for broader use...?
*/
protected final void from(Record source) {
for (Field<?> field : fields.fields.fields) {
Field<?> sourceField = source.field(field);
if (source instanceof AbstractRecord) { AbstractRecord a = (AbstractRecord) source;
a.new TransferRecordState<>(fields.fields.fields).apply(this);
}
else {
for (Field<?> field : fields.fields.fields) {
Field<?> sourceField = source.field(field);
if (sourceField != null && source.changed(sourceField))
Tools.setValue(this, field, source, sourceField);
if (sourceField != null && source.changed(sourceField))
Tools.setValue(this, field, source, sourceField);
}
}
}

View File

@ -37,6 +37,8 @@
*/
package org.jooq.impl;
import java.util.List;
import org.jooq.Binding;
import org.jooq.CharacterSet;
import org.jooq.Collation;
@ -219,6 +221,11 @@ final class ConvertedDataType<T, U> extends AbstractDataTypeX<U> {
else if (delegate.isMultiset() && !(object instanceof Result))
return (U) object;
// [#12413] Avoid double conversion passes between Record and custom object types
// (List is what we produce when reading XML or JSON nested data)
else if (delegate.isRecord() && !(object instanceof Record || object instanceof List))
return (U) object;
// [#3200] Try to convert arbitrary objects to T
else
return ((Converter<T, U>) getConverter()).from(delegate.convert(object));