Fix Releases page pagination
What does this MR do?
Fixes the issue with the Releases page pagination as described in #331547 (closed).
Cursors before
Before this change, cursors looked like this: eyJpZCI6IjE2Njc2NjUifQ
, which decoded to something like this:
{ id: "1667665" }
Cursors after
After this change, cursors will look like this: eyJyZWxlYXNlZF9hdCI6IjIwMjEtMDMtMDkgMTY6NTM6MzQuMTQyMzY1MDAwIFVUQyIsImlkIjoiMTUxIn0
, which decode to something like this:
{ released_at: "2021-03-09 16:53:34.142365000 UTC", id: "151" }
These cursors are visible to the end user - they are used as a URL parameter, for example: https://example.gitlab.com/user/project/-/releases?before=eyJyZWxlYXNlZF9hdCI6IjIwMjEtMDMtMDkgMTU6MzU6MTcuMTQ5NTcwMDAwIFVUQyIsImlkIjoiMTUwIn0
Queries before
When initially navigating to the page
SELECT "releases".*
FROM "releases"
WHERE "releases"."project_id" = 19
AND "releases"."tag" IS NOT NULL
ORDER BY released_at DESC,
"releases"."id" DESC
LIMIT 10
When clicking the Next button
SELECT "releases".*
FROM "releases"
WHERE "releases"."project_id" = 19
AND "releases"."tag" IS NOT NULL
AND (( "releases"."id" < 151 ))
AND "releases"."id" != 151
ORDER BY released_at DESC,
"releases"."id" DESC
LIMIT 10
When clicking the Prev button
SELECT "releases".*
FROM "releases"
WHERE "releases"."project_id" = 19
AND "releases"."tag" IS NOT NULL
AND (( "releases"."id" > 125 ))
AND "releases"."id" != 125
ORDER BY released_at ASC,
"releases"."id" ASC
LIMIT 11
Queries after
When initially navigating to the page
SELECT "releases".*
FROM "releases"
WHERE "releases"."project_id" = 19
AND "releases"."tag" IS NOT NULL
ORDER BY "releases"."released_at" DESC,
"releases"."id" DESC
LIMIT 10
When clicking the Next button
SELECT "releases".*
FROM "releases"
WHERE "releases"."project_id" = 19
AND "releases"."tag" IS NOT NULL
AND ( ( "releases"."id" < 151
AND "releases"."released_at" = '2021-03-09 16:53:34.142365' )
OR ( "releases"."released_at" < '2021-03-09 16:53:34.142365' ) )
ORDER BY "releases"."released_at" DESC,
"releases"."id" DESC
LIMIT 10
When clicking the Prev button
SELECT "releases".*
FROM "releases"
WHERE "releases"."project_id" = 19
AND "releases"."tag" IS NOT NULL
AND ( ( "releases"."id" > 150
AND "releases"."released_at" = '2021-03-09 15:35:17.149570' )
OR ( "releases"."released_at" > '2021-03-09 15:35:17.149570' ) )
ORDER BY "releases"."released_at" ASC,
"releases"."id" ASC
LIMIT 11
Related to #331547 (closed)
Edited by Nathan Friend