[jOOQ/jOOQ#11099] Cache CursorRecordInitialiser instance

This commit is contained in:
Lukas Eder 2020-12-10 16:29:34 +01:00
parent 96c250c6ea
commit d30784526a

View File

@ -1551,7 +1551,7 @@ final class CursorImpl<R extends Record> extends AbstractCursor<R> implements Cu
/**
* The (potentially) pre-fetched next record
*/
private R next;
private R next;
/**
* Whether the underlying {@link ResultSet} has a next record. This
@ -1562,7 +1562,12 @@ final class CursorImpl<R extends Record> extends AbstractCursor<R> implements Cu
* <li>false: there aren't any next records</li>
* </ul>
*/
private Boolean hasNext;
private Boolean hasNext;
/**
* [#11099] Cache this instance for the entire cursor.
*/
private final CursorRecordInitialiser initialiser = new CursorRecordInitialiser(fields, 0);
@Override
public final boolean hasNext() {
@ -1597,7 +1602,7 @@ final class CursorImpl<R extends Record> extends AbstractCursor<R> implements Cu
try {
if (!isClosed && rs.next()) {
record = Tools.newRecord(true, (F0<AbstractRecord>) factory, ((DefaultExecuteContext) ctx).originalConfiguration())
.operate(new CursorRecordInitialiser(fields, 0));
.operate(initialiser.reset());
rows++;
}
@ -1643,6 +1648,11 @@ final class CursorImpl<R extends Record> extends AbstractCursor<R> implements Cu
this.offset = offset;
}
CursorRecordInitialiser reset() {
offset = 0;
return this;
}
@Override
public AbstractRecord operate(AbstractRecord record) throws SQLException {
ctx.record(record);