[jOOQ/jOOQ#10524] Better use of new DataType.isEmbeddable() API

This commit is contained in:
Lukas Eder 2020-08-25 14:49:28 +02:00
parent 4b67d4244a
commit 25278f48eb
2 changed files with 4 additions and 12 deletions

View File

@ -5341,7 +5341,7 @@ final class Tools {
? (Class<AbstractRecord>) ((EmbeddableTableField<?, ?>) field).recordType
: field instanceof Val && ((Val<?>) field).value instanceof EmbeddableRecord
? ((AbstractRecord) ((Val<?>) field).value).getClass()
: EmbeddableRecord.class.isAssignableFrom(field.getType())
: field.getDataType().isEmbeddable()
? ((Field<AbstractRecord>) field).getType()
: null;
}
@ -5354,7 +5354,7 @@ final class Tools {
? ((EmbeddableRecord<?>) ((Val<?>) field).value).valuesRow().fields()
: field instanceof ScalarSubquery
? embeddedFields((ScalarSubquery<?>) field)
: EmbeddableRecord.class.isAssignableFrom(field.getType())
: field.getDataType().isEmbeddable()
? newInstance(((Field<EmbeddableRecord<?>>) field).getType()).valuesRow().fields()
: null;
}
@ -5411,14 +5411,7 @@ final class Tools {
public Iterator<E> iterator() {
Iterator<E> it = singletonList(field).iterator();
if (field instanceof EmbeddableTableField)
return new FlatteningIterator<E>(it) {
@Override
List<E> flatten(E e) {
return (List<E>) Arrays.asList(((EmbeddableTableField<?, ?>) e).fields);
}
};
else if (EmbeddableRecord.class.isAssignableFrom(field.getType()))
if (field.getDataType().isEmbeddable())
return new FlatteningIterator<E>(it) {
@Override
List<E> flatten(E e) {

View File

@ -49,7 +49,6 @@ import java.util.concurrent.ConcurrentHashMap;
import org.jooq.Context;
import org.jooq.DataType;
import org.jooq.EmbeddableRecord;
import org.jooq.RenderContext;
import org.jooq.conf.ParamType;
import org.jooq.exception.DataAccessException;
@ -113,7 +112,7 @@ final class Val<T> extends AbstractParam<T> {
@Override
public void accept(Context<?> ctx) {
if (EmbeddableRecord.class.isAssignableFrom(getType())) {
if (getDataType().isEmbeddable()) {
Object previous = ctx.data(DATA_LIST_ALREADY_INDENTED);
ctx.data(DATA_LIST_ALREADY_INDENTED, true);