fixes in selectPaginated

This commit is contained in:
InsanusMokrassar 2022-08-30 15:20:45 +06:00
parent 03c8830672
commit b165a76e62
2 changed files with 20 additions and 15 deletions

View File

@ -4,11 +4,7 @@ import org.jetbrains.exposed.sql.*
fun Query.paginate(with: Pagination, orderBy: Pair<Expression<*>, SortOrder>? = null) = limit( fun Query.paginate(with: Pagination, orderBy: Pair<Expression<*>, SortOrder>? = null) = limit(
with.size, with.size,
(if (orderBy ?.second == SortOrder.DESC) { with.firstIndex.toLong()
with.lastIndex
} else {
with.firstIndex
}).toLong()
).let { ).let {
if (orderBy != null) { if (orderBy != null) {
it.orderBy( it.orderBy(

View File

@ -3,6 +3,7 @@ package dev.inmo.micro_utils.repos.exposed.keyvalue
import dev.inmo.micro_utils.pagination.* import dev.inmo.micro_utils.pagination.*
import dev.inmo.micro_utils.repos.ReadKeyValueRepo import dev.inmo.micro_utils.repos.ReadKeyValueRepo
import dev.inmo.micro_utils.repos.exposed.* import dev.inmo.micro_utils.repos.exposed.*
import dev.inmo.micro_utils.repos.exposed.utils.selectPaginated
import org.jetbrains.exposed.sql.* import org.jetbrains.exposed.sql.*
import org.jetbrains.exposed.sql.transactions.transaction import org.jetbrains.exposed.sql.transactions.transaction
@ -29,24 +30,32 @@ open class ExposedReadKeyValueRepo<Key, Value>(
override suspend fun count(): Long = transaction(database) { selectAll().count() } override suspend fun count(): Long = transaction(database) { selectAll().count() }
override suspend fun keys(pagination: Pagination, reversed: Boolean): PaginationResult<Key> = transaction(database) { override suspend fun keys(pagination: Pagination, reversed: Boolean): PaginationResult<Key> = transaction(database) {
selectAll().paginate(pagination, keyColumn to if (reversed) SortOrder.DESC else SortOrder.ASC).map { selectAll().selectPaginated(
pagination,
keyColumn,
reversed
) {
it[keyColumn] it[keyColumn]
} }
}.createPaginationResult(pagination, count()) }
override suspend fun keys(v: Value, pagination: Pagination, reversed: Boolean): PaginationResult<Key> = transaction(database) { override suspend fun keys(v: Value, pagination: Pagination, reversed: Boolean): PaginationResult<Key> = transaction(database) {
select { valueColumn.eq(v) }.let { select { valueColumn.eq(v) }.selectPaginated(
it.count() to it.paginate(pagination, keyColumn to if (reversed) SortOrder.DESC else SortOrder.ASC).map { pagination,
it[keyColumn] keyColumn,
} reversed
) {
it[keyColumn]
} }
}.let { (count, list) ->
list.createPaginationResult(pagination, count)
} }
override suspend fun values(pagination: Pagination, reversed: Boolean): PaginationResult<Value> = transaction(database) { override suspend fun values(pagination: Pagination, reversed: Boolean): PaginationResult<Value> = transaction(database) {
selectAll().paginate(pagination, keyColumn to if (reversed) SortOrder.DESC else SortOrder.ASC).map { selectAll().selectPaginated(
pagination,
keyColumn,
reversed
) {
it[valueColumn] it[valueColumn]
} }
}.createPaginationResult(pagination, count()) }
} }