Correctly select results using cursors while sorting (#696)
When using cursors for pagination while sorting, the sort order was inverted (desc -> asc, asc -> desc). However, this was then not considered when selecting results based on the cursor. For before/after results where always selected via greater/less. Due to inverting the sort order, this also needs to be inverted depending on the sort order (desc or asc).
This commit is contained in:
@@ -12,6 +12,12 @@ import graphql.schema.DataFetchingEnvironment
|
|||||||
import org.jetbrains.exposed.sql.Column
|
import org.jetbrains.exposed.sql.Column
|
||||||
import org.jetbrains.exposed.sql.Op
|
import org.jetbrains.exposed.sql.Op
|
||||||
import org.jetbrains.exposed.sql.SortOrder
|
import org.jetbrains.exposed.sql.SortOrder
|
||||||
|
import org.jetbrains.exposed.sql.SortOrder.ASC
|
||||||
|
import org.jetbrains.exposed.sql.SortOrder.ASC_NULLS_FIRST
|
||||||
|
import org.jetbrains.exposed.sql.SortOrder.ASC_NULLS_LAST
|
||||||
|
import org.jetbrains.exposed.sql.SortOrder.DESC
|
||||||
|
import org.jetbrains.exposed.sql.SortOrder.DESC_NULLS_FIRST
|
||||||
|
import org.jetbrains.exposed.sql.SortOrder.DESC_NULLS_LAST
|
||||||
import org.jetbrains.exposed.sql.SqlExpressionBuilder.greater
|
import org.jetbrains.exposed.sql.SqlExpressionBuilder.greater
|
||||||
import org.jetbrains.exposed.sql.SqlExpressionBuilder.less
|
import org.jetbrains.exposed.sql.SqlExpressionBuilder.less
|
||||||
import org.jetbrains.exposed.sql.andWhere
|
import org.jetbrains.exposed.sql.andWhere
|
||||||
@@ -147,11 +153,17 @@ class CategoryQuery {
|
|||||||
|
|
||||||
if (after != null) {
|
if (after != null) {
|
||||||
res.andWhere {
|
res.andWhere {
|
||||||
(orderBy ?: CategoryOrderBy.ID).greater(after)
|
when (orderByType) {
|
||||||
|
DESC, DESC_NULLS_FIRST, DESC_NULLS_LAST -> (orderBy ?: CategoryOrderBy.ID).less(after)
|
||||||
|
null, ASC, ASC_NULLS_FIRST, ASC_NULLS_LAST -> (orderBy ?: CategoryOrderBy.ID).greater(after)
|
||||||
|
}
|
||||||
}
|
}
|
||||||
} else if (before != null) {
|
} else if (before != null) {
|
||||||
res.andWhere {
|
res.andWhere {
|
||||||
(orderBy ?: CategoryOrderBy.ID).less(before)
|
when (orderByType) {
|
||||||
|
DESC, DESC_NULLS_FIRST, DESC_NULLS_LAST -> (orderBy ?: CategoryOrderBy.ID).greater(before)
|
||||||
|
null, ASC, ASC_NULLS_FIRST, ASC_NULLS_LAST -> (orderBy ?: CategoryOrderBy.ID).less(before)
|
||||||
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
@@ -12,11 +12,18 @@ import graphql.schema.DataFetchingEnvironment
|
|||||||
import org.jetbrains.exposed.sql.Column
|
import org.jetbrains.exposed.sql.Column
|
||||||
import org.jetbrains.exposed.sql.Op
|
import org.jetbrains.exposed.sql.Op
|
||||||
import org.jetbrains.exposed.sql.SortOrder
|
import org.jetbrains.exposed.sql.SortOrder
|
||||||
|
import org.jetbrains.exposed.sql.SortOrder.ASC
|
||||||
|
import org.jetbrains.exposed.sql.SortOrder.ASC_NULLS_FIRST
|
||||||
|
import org.jetbrains.exposed.sql.SortOrder.ASC_NULLS_LAST
|
||||||
|
import org.jetbrains.exposed.sql.SortOrder.DESC
|
||||||
|
import org.jetbrains.exposed.sql.SortOrder.DESC_NULLS_FIRST
|
||||||
|
import org.jetbrains.exposed.sql.SortOrder.DESC_NULLS_LAST
|
||||||
import org.jetbrains.exposed.sql.SqlExpressionBuilder.greater
|
import org.jetbrains.exposed.sql.SqlExpressionBuilder.greater
|
||||||
import org.jetbrains.exposed.sql.SqlExpressionBuilder.less
|
import org.jetbrains.exposed.sql.SqlExpressionBuilder.less
|
||||||
import org.jetbrains.exposed.sql.andWhere
|
import org.jetbrains.exposed.sql.andWhere
|
||||||
import org.jetbrains.exposed.sql.selectAll
|
import org.jetbrains.exposed.sql.selectAll
|
||||||
import org.jetbrains.exposed.sql.transactions.transaction
|
import org.jetbrains.exposed.sql.transactions.transaction
|
||||||
|
import suwayomi.tachidesk.graphql.queries.ChapterQuery.ChapterOrderBy.ID
|
||||||
import suwayomi.tachidesk.graphql.queries.filter.BooleanFilter
|
import suwayomi.tachidesk.graphql.queries.filter.BooleanFilter
|
||||||
import suwayomi.tachidesk.graphql.queries.filter.Filter
|
import suwayomi.tachidesk.graphql.queries.filter.Filter
|
||||||
import suwayomi.tachidesk.graphql.queries.filter.FloatFilter
|
import suwayomi.tachidesk.graphql.queries.filter.FloatFilter
|
||||||
@@ -230,11 +237,17 @@ class ChapterQuery {
|
|||||||
|
|
||||||
if (after != null) {
|
if (after != null) {
|
||||||
res.andWhere {
|
res.andWhere {
|
||||||
(orderBy ?: ChapterOrderBy.ID).greater(after)
|
when (orderByType) {
|
||||||
|
DESC, DESC_NULLS_FIRST, DESC_NULLS_LAST -> (orderBy ?: ID).less(after)
|
||||||
|
null, ASC, ASC_NULLS_FIRST, ASC_NULLS_LAST -> (orderBy ?: ID).greater(after)
|
||||||
|
}
|
||||||
}
|
}
|
||||||
} else if (before != null) {
|
} else if (before != null) {
|
||||||
res.andWhere {
|
res.andWhere {
|
||||||
(orderBy ?: ChapterOrderBy.ID).less(before)
|
when (orderByType) {
|
||||||
|
DESC, DESC_NULLS_FIRST, DESC_NULLS_LAST -> (orderBy ?: ID).greater(before)
|
||||||
|
null, ASC, ASC_NULLS_FIRST, ASC_NULLS_LAST -> (orderBy ?: ID).less(before)
|
||||||
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
@@ -13,6 +13,12 @@ import graphql.schema.DataFetchingEnvironment
|
|||||||
import org.jetbrains.exposed.sql.Column
|
import org.jetbrains.exposed.sql.Column
|
||||||
import org.jetbrains.exposed.sql.Op
|
import org.jetbrains.exposed.sql.Op
|
||||||
import org.jetbrains.exposed.sql.SortOrder
|
import org.jetbrains.exposed.sql.SortOrder
|
||||||
|
import org.jetbrains.exposed.sql.SortOrder.ASC
|
||||||
|
import org.jetbrains.exposed.sql.SortOrder.ASC_NULLS_FIRST
|
||||||
|
import org.jetbrains.exposed.sql.SortOrder.ASC_NULLS_LAST
|
||||||
|
import org.jetbrains.exposed.sql.SortOrder.DESC
|
||||||
|
import org.jetbrains.exposed.sql.SortOrder.DESC_NULLS_FIRST
|
||||||
|
import org.jetbrains.exposed.sql.SortOrder.DESC_NULLS_LAST
|
||||||
import org.jetbrains.exposed.sql.SqlExpressionBuilder.greater
|
import org.jetbrains.exposed.sql.SqlExpressionBuilder.greater
|
||||||
import org.jetbrains.exposed.sql.SqlExpressionBuilder.less
|
import org.jetbrains.exposed.sql.SqlExpressionBuilder.less
|
||||||
import org.jetbrains.exposed.sql.SqlExpressionBuilder.neq
|
import org.jetbrains.exposed.sql.SqlExpressionBuilder.neq
|
||||||
@@ -177,11 +183,17 @@ class ExtensionQuery {
|
|||||||
|
|
||||||
if (after != null) {
|
if (after != null) {
|
||||||
res.andWhere {
|
res.andWhere {
|
||||||
(orderBy ?: ExtensionOrderBy.PKG_NAME).greater(after)
|
when (orderByType) {
|
||||||
|
DESC, DESC_NULLS_FIRST, DESC_NULLS_LAST -> (orderBy ?: ExtensionOrderBy.PKG_NAME).less(after)
|
||||||
|
null, ASC, ASC_NULLS_FIRST, ASC_NULLS_LAST -> (orderBy ?: ExtensionOrderBy.PKG_NAME).greater(after)
|
||||||
|
}
|
||||||
}
|
}
|
||||||
} else if (before != null) {
|
} else if (before != null) {
|
||||||
res.andWhere {
|
res.andWhere {
|
||||||
(orderBy ?: ExtensionOrderBy.PKG_NAME).less(before)
|
when (orderByType) {
|
||||||
|
DESC, DESC_NULLS_FIRST, DESC_NULLS_LAST -> (orderBy ?: ExtensionOrderBy.PKG_NAME).greater(before)
|
||||||
|
null, ASC, ASC_NULLS_FIRST, ASC_NULLS_LAST -> (orderBy ?: ExtensionOrderBy.PKG_NAME).less(before)
|
||||||
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
@@ -12,6 +12,12 @@ import graphql.schema.DataFetchingEnvironment
|
|||||||
import org.jetbrains.exposed.sql.Column
|
import org.jetbrains.exposed.sql.Column
|
||||||
import org.jetbrains.exposed.sql.Op
|
import org.jetbrains.exposed.sql.Op
|
||||||
import org.jetbrains.exposed.sql.SortOrder
|
import org.jetbrains.exposed.sql.SortOrder
|
||||||
|
import org.jetbrains.exposed.sql.SortOrder.ASC
|
||||||
|
import org.jetbrains.exposed.sql.SortOrder.ASC_NULLS_FIRST
|
||||||
|
import org.jetbrains.exposed.sql.SortOrder.ASC_NULLS_LAST
|
||||||
|
import org.jetbrains.exposed.sql.SortOrder.DESC
|
||||||
|
import org.jetbrains.exposed.sql.SortOrder.DESC_NULLS_FIRST
|
||||||
|
import org.jetbrains.exposed.sql.SortOrder.DESC_NULLS_LAST
|
||||||
import org.jetbrains.exposed.sql.SqlExpressionBuilder.greater
|
import org.jetbrains.exposed.sql.SqlExpressionBuilder.greater
|
||||||
import org.jetbrains.exposed.sql.SqlExpressionBuilder.less
|
import org.jetbrains.exposed.sql.SqlExpressionBuilder.less
|
||||||
import org.jetbrains.exposed.sql.andWhere
|
import org.jetbrains.exposed.sql.andWhere
|
||||||
@@ -229,11 +235,17 @@ class MangaQuery {
|
|||||||
|
|
||||||
if (after != null) {
|
if (after != null) {
|
||||||
res.andWhere {
|
res.andWhere {
|
||||||
(orderBy ?: MangaOrderBy.ID).greater(after)
|
when (orderByType) {
|
||||||
|
DESC, DESC_NULLS_FIRST, DESC_NULLS_LAST -> (orderBy ?: MangaOrderBy.ID).less(after)
|
||||||
|
null, ASC, ASC_NULLS_FIRST, ASC_NULLS_LAST -> (orderBy ?: MangaOrderBy.ID).greater(after)
|
||||||
|
}
|
||||||
}
|
}
|
||||||
} else if (before != null) {
|
} else if (before != null) {
|
||||||
res.andWhere {
|
res.andWhere {
|
||||||
(orderBy ?: MangaOrderBy.ID).less(before)
|
when (orderByType) {
|
||||||
|
DESC, DESC_NULLS_FIRST, DESC_NULLS_LAST -> (orderBy ?: MangaOrderBy.ID).greater(before)
|
||||||
|
null, ASC, ASC_NULLS_FIRST, ASC_NULLS_LAST -> (orderBy ?: MangaOrderBy.ID).less(before)
|
||||||
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
@@ -12,6 +12,12 @@ import graphql.schema.DataFetchingEnvironment
|
|||||||
import org.jetbrains.exposed.sql.Column
|
import org.jetbrains.exposed.sql.Column
|
||||||
import org.jetbrains.exposed.sql.Op
|
import org.jetbrains.exposed.sql.Op
|
||||||
import org.jetbrains.exposed.sql.SortOrder
|
import org.jetbrains.exposed.sql.SortOrder
|
||||||
|
import org.jetbrains.exposed.sql.SortOrder.ASC
|
||||||
|
import org.jetbrains.exposed.sql.SortOrder.ASC_NULLS_FIRST
|
||||||
|
import org.jetbrains.exposed.sql.SortOrder.ASC_NULLS_LAST
|
||||||
|
import org.jetbrains.exposed.sql.SortOrder.DESC
|
||||||
|
import org.jetbrains.exposed.sql.SortOrder.DESC_NULLS_FIRST
|
||||||
|
import org.jetbrains.exposed.sql.SortOrder.DESC_NULLS_LAST
|
||||||
import org.jetbrains.exposed.sql.SqlExpressionBuilder.greater
|
import org.jetbrains.exposed.sql.SqlExpressionBuilder.greater
|
||||||
import org.jetbrains.exposed.sql.SqlExpressionBuilder.less
|
import org.jetbrains.exposed.sql.SqlExpressionBuilder.less
|
||||||
import org.jetbrains.exposed.sql.andWhere
|
import org.jetbrains.exposed.sql.andWhere
|
||||||
@@ -131,11 +137,17 @@ class MetaQuery {
|
|||||||
|
|
||||||
if (after != null) {
|
if (after != null) {
|
||||||
res.andWhere {
|
res.andWhere {
|
||||||
(orderBy ?: MetaOrderBy.KEY).greater(after)
|
when (orderByType) {
|
||||||
|
DESC, DESC_NULLS_FIRST, DESC_NULLS_LAST -> (orderBy ?: MetaOrderBy.KEY).less(after)
|
||||||
|
null, ASC, ASC_NULLS_FIRST, ASC_NULLS_LAST -> (orderBy ?: MetaOrderBy.KEY).greater(after)
|
||||||
|
}
|
||||||
}
|
}
|
||||||
} else if (before != null) {
|
} else if (before != null) {
|
||||||
res.andWhere {
|
res.andWhere {
|
||||||
(orderBy ?: MetaOrderBy.KEY).less(before)
|
when (orderByType) {
|
||||||
|
DESC, DESC_NULLS_FIRST, DESC_NULLS_LAST -> (orderBy ?: MetaOrderBy.KEY).greater(before)
|
||||||
|
null, ASC, ASC_NULLS_FIRST, ASC_NULLS_LAST -> (orderBy ?: MetaOrderBy.KEY).less(before)
|
||||||
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
@@ -12,6 +12,12 @@ import graphql.schema.DataFetchingEnvironment
|
|||||||
import org.jetbrains.exposed.sql.Column
|
import org.jetbrains.exposed.sql.Column
|
||||||
import org.jetbrains.exposed.sql.Op
|
import org.jetbrains.exposed.sql.Op
|
||||||
import org.jetbrains.exposed.sql.SortOrder
|
import org.jetbrains.exposed.sql.SortOrder
|
||||||
|
import org.jetbrains.exposed.sql.SortOrder.ASC
|
||||||
|
import org.jetbrains.exposed.sql.SortOrder.ASC_NULLS_FIRST
|
||||||
|
import org.jetbrains.exposed.sql.SortOrder.ASC_NULLS_LAST
|
||||||
|
import org.jetbrains.exposed.sql.SortOrder.DESC
|
||||||
|
import org.jetbrains.exposed.sql.SortOrder.DESC_NULLS_FIRST
|
||||||
|
import org.jetbrains.exposed.sql.SortOrder.DESC_NULLS_LAST
|
||||||
import org.jetbrains.exposed.sql.SqlExpressionBuilder.greater
|
import org.jetbrains.exposed.sql.SqlExpressionBuilder.greater
|
||||||
import org.jetbrains.exposed.sql.SqlExpressionBuilder.less
|
import org.jetbrains.exposed.sql.SqlExpressionBuilder.less
|
||||||
import org.jetbrains.exposed.sql.andWhere
|
import org.jetbrains.exposed.sql.andWhere
|
||||||
@@ -147,11 +153,17 @@ class SourceQuery {
|
|||||||
|
|
||||||
if (after != null) {
|
if (after != null) {
|
||||||
res.andWhere {
|
res.andWhere {
|
||||||
(orderBy ?: SourceOrderBy.ID).greater(after)
|
when (orderByType) {
|
||||||
|
DESC, DESC_NULLS_FIRST, DESC_NULLS_LAST -> (orderBy ?: SourceOrderBy.ID).less(after)
|
||||||
|
null, ASC, ASC_NULLS_FIRST, ASC_NULLS_LAST -> (orderBy ?: SourceOrderBy.ID).greater(after)
|
||||||
|
}
|
||||||
}
|
}
|
||||||
} else if (before != null) {
|
} else if (before != null) {
|
||||||
res.andWhere {
|
res.andWhere {
|
||||||
(orderBy ?: SourceOrderBy.ID).less(before)
|
when (orderByType) {
|
||||||
|
DESC, DESC_NULLS_FIRST, DESC_NULLS_LAST -> (orderBy ?: SourceOrderBy.ID).greater(before)
|
||||||
|
null, ASC, ASC_NULLS_FIRST, ASC_NULLS_LAST -> (orderBy ?: SourceOrderBy.ID).less(before)
|
||||||
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
Reference in New Issue
Block a user