[jOOQ/jOOQ#17363] Add Records.nullOnAllNull and Records.nullOnAnyNull utilities

This commit is contained in:
Lukas Eder 2024-09-25 11:57:54 +02:00
parent 84847393ad
commit 3f03bd952f

View File

@ -60,6 +60,8 @@ import java.util.stream.Collectors;
import org.jooq.exception.InvalidResultException;
import org.jooq.impl.Internal;
import org.jetbrains.annotations.Nullable;
/**
* Common utilities related to {@link Record} types and constructing
* {@link RecordMapper}.
@ -637,6 +639,50 @@ public final class Records {
);
}
/**
* Create a {@link RecordMapper} that turns {@link Record} values containing
* all <code>null</code> values into a <code>null</code> record value.
* <p>
* This is useful, for example, when nesting records from implicit path
* joins following optional foreign keys, where a
* <code>(NULL, NULL, , NULL)</code> record isn't so useful.
*/
public static final <R extends Record> RecordMapper<R, @Nullable R> nullOnAllNull() {
return r -> {
if (r == null)
return null;
int size = r.size();
for (int i = 0; i < size; i++)
if (r.get(i) != null)
return r;
return null;
};
}
/**
* Create a {@link RecordMapper} that turns {@link Record} values containing
* any <code>null</code> value into a <code>null</code> record value.
* <p>
* This is useful, for example, when nesting records from implicit path
* joins following optional foreign keys, where a
* <code>(NULL, NULL, , NULL)</code> record isn't so useful.
*/
public static final <R extends Record> RecordMapper<R, @Nullable R> nullOnAnyNull() {
return r -> {
if (r == null)
return null;
int size = r.size();
for (int i = 0; i < size; i++)
if (r.get(i) == null)
return null;
return r;
};
}
/**