fetchMetadata calls DatabaseService/GetDatabaseMetadata and decodes the response.
(ctx context.Context, resourceName, filter string, limit int32)
| 382 | |
| 383 | // fetchMetadata calls DatabaseService/GetDatabaseMetadata and decodes the response. |
| 384 | func (s *Server) fetchMetadata(ctx context.Context, resourceName, filter string, limit int32) (*databaseMetadata, error) { |
| 385 | body := map[string]any{ |
| 386 | "name": resourceName + "/metadata", |
| 387 | } |
| 388 | if filter != "" { |
| 389 | body["filter"] = filter |
| 390 | } |
| 391 | if limit > 0 { |
| 392 | body["limit"] = limit |
| 393 | } |
| 394 | |
| 395 | resp, err := s.apiRequest(ctx, "/bytebase.v1.DatabaseService/GetDatabaseMetadata", body) |
| 396 | if err != nil { |
| 397 | return nil, &toolError{ |
| 398 | Code: "SCHEMA_FETCH_ERROR", |
| 399 | Message: fmt.Sprintf("metadata request failed: %s", err.Error()), |
| 400 | Suggestion: "check network connectivity and try again", |
| 401 | } |
| 402 | } |
| 403 | |
| 404 | if resp.Status >= 400 { |
| 405 | return nil, translateMetadataError(resp) |
| 406 | } |
| 407 | |
| 408 | var metadata databaseMetadata |
| 409 | if err := json.Unmarshal(resp.Body, &metadata); err != nil { |
| 410 | return nil, errors.Wrap(err, "failed to parse database metadata") |
| 411 | } |
| 412 | return &metadata, nil |
| 413 | } |
| 414 | |
| 415 | // translateMetadataError maps GetDatabaseMetadata HTTP errors into toolError codes. |
| 416 | func translateMetadataError(resp *apiResponse) error { |
no test coverage detected