{{ define "pagination_query" }} // Code generated by entc template, DO NOT EDIT. {{/* A template that adds the functionality for running each client in debug mode */}} {{/* Add the base header for the generated file */}} {{ $pkg := base $.Config.Package }} {{ template "header" $ }} {{ range $n := $.Nodes }} // PaginateAfterID paginates {{ $n.Name }} by monotonically increasing "id". // It preserves any existing filters/joins applied to the query, fetches up to "limit" items, // and returns the next cursor (last ID of this page) and whether a next page exists. func (q *{{ $n.Name }}Query) PaginateAfterID(ctx context.Context, afterID, limit int) ([]*{{ $n.Name }}, int, bool, error) { if limit <= 0 { limit = 20 } qq := q.Clone(). Order(func(s *sql.Selector) { s.OrderBy(s.C("id")) }). Limit(limit + 1) // fetch one extra to detect "has next" if afterID > 0 { qq = qq.Where(func(s *sql.Selector) { s.Where(sql.GT(s.C("id"), afterID)) }) } rows, err := qq.All(ctx) if err != nil { return nil, 0, false, err } hasNext := len(rows) > limit if hasNext { rows = rows[:limit] } next := 0 if len(rows) > 0 { next = rows[len(rows)-1].ID } return rows, next, hasNext, nil } {{ end }} {{ end }}