MCPcopy Index your code
hub / github.com/helm/helm / Query

Method Query

pkg/storage/driver/sql.go:397–464  ·  view source on GitHub ↗

Query returns the set of releases that match the provided set of labels.

(labels map[string]string)

Source from the content-addressed store, hash-verified

395
396// Query returns the set of releases that match the provided set of labels.
397func (s *SQL) Query(labels map[string]string) ([]release.Releaser, error) {
398 sb := s.statementBuilder.
399 Select(sqlReleaseTableKeyColumn, sqlReleaseTableNamespaceColumn, sqlReleaseTableBodyColumn).
400 From(sqlReleaseTableName)
401
402 keys := make([]string, 0, len(labels))
403 for key := range labels {
404 keys = append(keys, key)
405 }
406 sort.Strings(keys)
407 for _, key := range keys {
408 if _, ok := labelMap[key]; ok {
409 sb = sb.Where(sq.Eq{key: labels[key]})
410 } else {
411 s.Logger().Debug("unknown label", "key", key)
412 return nil, fmt.Errorf("unknown label %s", key)
413 }
414 }
415
416 // If a namespace was specified, we only list releases from that namespace
417 if s.namespace != "" {
418 sb = sb.Where(sq.Eq{sqlReleaseTableNamespaceColumn: s.namespace})
419 }
420
421 // Build our query
422 query, args, err := sb.ToSql()
423 if err != nil {
424 s.Logger().Debug("failed to build query", slog.Any("error", err))
425 return nil, err
426 }
427
428 var records = []SQLReleaseWrapper{}
429 if err := s.db.Select(&records, query, args...); err != nil {
430 s.Logger().Debug("failed to query with labels", slog.Any("error", err))
431 return nil, err
432 }
433
434 if len(records) == 0 {
435 return nil, ErrReleaseNotFound
436 }
437
438 var releases []release.Releaser
439 for _, record := range records {
440 release, err := decodeRelease(record.Body)
441 if err != nil {
442 s.Logger().Debug("failed to decode release", slog.Any("record", record), slog.Any("error", err))
443 continue
444 }
445
446 if release.Labels, err = s.getReleaseCustomLabels(record.Key, record.Namespace); err != nil {
447 s.Logger().Debug(
448 "failed to get release custom labels",
449 slog.String("namespace", record.Namespace),
450 slog.String("key", record.Key),
451 slog.Any("error", err),
452 )
453 return nil, err
454 }

Callers

nothing calls this directly

Calls 4

decodeReleaseFunction · 0.85
LoggerMethod · 0.65
StringMethod · 0.45

Tested by

no test coverage detected