zeroshade commented on code in PR #290: URL: https://github.com/apache/iceberg-go/pull/290#discussion_r1953480223
########## catalog/rest/rest.go: ########## @@ -989,3 +992,95 @@ func (r *Catalog) CheckTableExists(ctx context.Context, identifier table.Identif } return true, nil } + +func (r *Catalog) ListViews(ctx context.Context, namespace table.Identifier) iter.Seq2[table.Identifier, error] { + return func(yield func(table.Identifier, error) bool) { + pageSize := r.getPageSize(ctx) + var pageToken string + + for { + views, nextPageToken, err := r.listViewsPage(ctx, namespace, pageToken, pageSize) + if err != nil { + yield(table.Identifier{}, err) + return + } + for _, view := range views { + if !yield(view, nil) { + return + } + } + if nextPageToken == "" { + return + } + pageToken = nextPageToken + } + } +} + +func (r *Catalog) listViewsPage(ctx context.Context, namespace table.Identifier, pageToken string, pageSize int) ([]table.Identifier, string, error) { + if err := checkValidNamespace(namespace); err != nil { + return nil, "", err + } + ns := strings.Join(namespace, namespaceSeparator) + uri := r.baseURI.JoinPath("namespaces", ns, "views") + + v := url.Values{} + if pageSize >= 0 { + v.Set("page-size", strconv.Itoa(pageSize)) + } + if pageToken != "" { + v.Set("page-token", pageToken) + } + + uri.RawQuery = v.Encode() + type resp struct { + Identifiers []identifier `json:"identifiers"` + NextPageToken string `json:"next-page-token,omitempty"` + } + + rsp, err := doGet[resp](ctx, uri, []string{}, r.cl, map[int]error{http.StatusNotFound: catalog.ErrNoSuchNamespace}) + if err != nil { + return nil, "", err + } + + out := make([]table.Identifier, len(rsp.Identifiers)) + for i, id := range rsp.Identifiers { + out[i] = append(id.Namespace, id.Name) + } + return out, rsp.NextPageToken, nil +} + +func (r *Catalog) getPageSize(ctx context.Context) int { + if pageSize, ok := ctx.Value("page_size").(int); ok { Review Comment: you either need to provide a function `SetPageSize(ctx context.Context, sz int) context.Context` or you need to document this. -- This is an automated message from the Apache Git Service. To respond to the message, please log on to GitHub and use the URL above to go to the specific comment. To unsubscribe, e-mail: issues-unsubscr...@iceberg.apache.org For queries about this service, please contact Infrastructure at: us...@infra.apache.org --------------------------------------------------------------------- To unsubscribe, e-mail: issues-unsubscr...@iceberg.apache.org For additional commands, e-mail: issues-h...@iceberg.apache.org