in exposed-jdbc/src/main/kotlin/org/jetbrains/exposed/v1/jdbc/Query.kt [166:211]
override fun iterator(): Iterator<Iterable<ResultRow>> {
return iterator {
var lastOffset = if (fetchInAscendingOrder) 0L else null
while (true) {
val query = this@Query.copy().adjustWhere {
lastOffset?.let { lastOffset ->
whereOp and if (fetchInAscendingOrder) {
when (autoIncColumn.columnType) {
is EntityIDColumnType<*> -> {
(autoIncColumn as? Column<EntityID<Long>>)?.let {
(it greater lastOffset)
} ?: (autoIncColumn as? Column<EntityID<Int>>)?.let {
(it greater lastOffset.toInt())
} ?: (autoIncColumn greater lastOffset)
}
else -> (autoIncColumn greater lastOffset)
}
} else {
when (autoIncColumn.columnType) {
is EntityIDColumnType<*> -> {
(autoIncColumn as? Column<EntityID<Long>>)?.let {
(it less lastOffset)
} ?: (autoIncColumn as? Column<EntityID<Int>>)?.let {
(it less lastOffset.toInt())
} ?: (autoIncColumn less lastOffset)
}
else -> (autoIncColumn less lastOffset)
}
}
} ?: whereOp
}
val results = query.iterator().asSequence().toList()
if (results.isNotEmpty()) {
yield(results)
}
if (results.size < batchSize) break
lastOffset = toLong(results.last()[autoIncColumn]!!)
}
}
}