@VisibleForTesting
EntityListIterator createEntityListIterator(final SQLProcessor sqlP, final String sql,
final EntityFindOptions nonNullFindOptions, final ModelEntity modelEntity,
final List<ModelField> selectFields, final List<EntityConditionParam> whereEntityConditionParams,
final List<EntityConditionParam> havingEntityConditionParams,
final TableCleanUp tableCleanUp)
throws GenericEntityException {
try {
sqlP.prepareStatement(sql, nonNullFindOptions.isCustomResultSetTypeAndConcurrency(),
nonNullFindOptions.getResultSetType(), nonNullFindOptions.getResultSetConcurrency());
bindParameterValues(sqlP, modelEntity, whereEntityConditionParams, "where");
bindParameterValues(sqlP, modelEntity, havingEntityConditionParams, "having");
setFetchSize(sqlP, nonNullFindOptions.getFetchSize());
sqlP.executeQuery();
if (tableCleanUp == null) {
return new EntityListIterator(sqlP, modelEntity, selectFields, modelFieldTypeReader);
} else {
return new EntityListIteratorWithTemporaryTableCleanup(sqlP, modelEntity, selectFields, modelFieldTypeReader, tableCleanUp);
}
}
catch (GenericEntityException | RuntimeException e) {
closeSafely(sql, sqlP);
throw e;
}
}