fix: Adjust pagination limit to be zero-based (#2663)

There isn't a use-case for querying a limit of zero. Using
-1 led to issues when using default parameters for querying.
This commit is contained in:
Kyle Carberry 2022-06-26 15:23:25 -05:00 committed by GitHub
parent 95e854d144
commit 01c31b47a3
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23
7 changed files with 14 additions and 16 deletions

View File

@ -396,7 +396,7 @@ func AwaitWorkspaceAgents(t *testing.T, client *codersdk.Client, build uuid.UUID
}
}
return true
}, 5*time.Second, 25*time.Millisecond)
}, 15*time.Second, 50*time.Millisecond)
return resources
}

View File

@ -2242,8 +2242,8 @@ ORDER BY
-- a timestamp. This is to ensure consistent pagination.
(created_at, id) ASC OFFSET $3
LIMIT
-- A null limit means "no limit", so -1 means return all
NULLIF($4 :: int, -1)
-- A null limit means "no limit", so 0 means return all
NULLIF($4 :: int, 0)
`
type GetTemplateVersionsByTemplateIDParams struct {
@ -2590,8 +2590,8 @@ ORDER BY
-- a timestamp. This is to ensure consistent pagination.
(created_at, id) ASC OFFSET $5
LIMIT
-- A null limit means "no limit", so -1 means return all
NULLIF($6 :: int, -1)
-- A null limit means "no limit", so 0 means return all
NULLIF($6 :: int, 0)
`
type GetUsersParams struct {
@ -3573,8 +3573,8 @@ END
ORDER BY
build_number desc OFFSET $3
LIMIT
-- A null limit means "no limit", so -1 means return all
NULLIF($4 :: int, -1)
-- A null limit means "no limit", so 0 means return all
NULLIF($4 :: int, 0)
`
type GetWorkspaceBuildByWorkspaceIDParams struct {

View File

@ -29,8 +29,8 @@ ORDER BY
-- a timestamp. This is to ensure consistent pagination.
(created_at, id) ASC OFFSET @offset_opt
LIMIT
-- A null limit means "no limit", so -1 means return all
NULLIF(@limit_opt :: int, -1);
-- A null limit means "no limit", so 0 means return all
NULLIF(@limit_opt :: int, 0);
-- name: GetTemplateVersionByJobID :one
SELECT

View File

@ -126,8 +126,8 @@ ORDER BY
-- a timestamp. This is to ensure consistent pagination.
(created_at, id) ASC OFFSET @offset_opt
LIMIT
-- A null limit means "no limit", so -1 means return all
NULLIF(@limit_opt :: int, -1);
-- A null limit means "no limit", so 0 means return all
NULLIF(@limit_opt :: int, 0);
-- name: UpdateUserStatus :one
UPDATE

View File

@ -68,8 +68,8 @@ END
ORDER BY
build_number desc OFFSET @offset_opt
LIMIT
-- A null limit means "no limit", so -1 means return all
NULLIF(@limit_opt :: int, -1);
-- A null limit means "no limit", so 0 means return all
NULLIF(@limit_opt :: int, 0);
-- name: GetLatestWorkspaceBuildByWorkspaceID :one
SELECT

View File

@ -17,7 +17,7 @@ func parsePagination(w http.ResponseWriter, r *http.Request) (p codersdk.Paginat
params := codersdk.Pagination{
AfterID: parser.UUID(queryParams, uuid.Nil, "after_id"),
// Limit default to "-1" which returns all results
Limit: parser.Int(queryParams, -1, "limit"),
Limit: parser.Int(queryParams, 0, "limit"),
Offset: parser.Int(queryParams, 0, "offset"),
}
if len(parser.Errors) > 0 {

View File

@ -77,7 +77,6 @@ func TestPagination(t *testing.T) {
ExpectedParams: codersdk.Pagination{
AfterID: uuid.Nil,
Offset: 150,
Limit: -1,
},
},
{
@ -85,7 +84,6 @@ func TestPagination(t *testing.T) {
AfterID: "5f2005fc-acc4-4e5e-a7fa-be017359c60b",
ExpectedParams: codersdk.Pagination{
AfterID: uuid.MustParse("5f2005fc-acc4-4e5e-a7fa-be017359c60b"),
Limit: -1,
},
},
}