MCPcopy Create free account
hub / github.com/cloudbase/garm / OpenFileObjectContent

Method OpenFileObjectContent

database/sql/file_store.go:407–439  ·  view source on GitHub ↗

OpenFileObjectContent opens a blob for reading and returns an io.ReadCloser

(ctx context.Context, objID uint)

Source from the content-addressed store, hash-verified

405
406// OpenFileObjectContent opens a blob for reading and returns an io.ReadCloser
407func (s *sqlDatabase) OpenFileObjectContent(ctx context.Context, objID uint) (io.ReadCloser, error) {
408 conn, err := s.objectsSQLDB.Conn(ctx)
409 if err != nil {
410 return nil, fmt.Errorf("failed to get connection: %w", err)
411 }
412
413 var fileBlob FileBlob
414 if err := s.objectsConn.Where("file_object_id = ?", objID).Omit("content").First(&fileBlob).Error; err != nil {
415 return nil, fmt.Errorf("failed to get file blob: %w", err)
416 }
417 var blobReader io.ReadCloser
418 err = conn.Raw(func(driverConn any) error {
419 sqliteConn := driverConn.(*sqlite3.SQLiteConn)
420
421 blob, err := sqliteConn.Blob("main", "file_blobs", "content", int64(fileBlob.ID), 0)
422 if err != nil {
423 return fmt.Errorf("failed to open blob: %w", err)
424 }
425
426 // Wrap blob and connection so both are closed when reader is closed
427 blobReader = &blobReadCloser{
428 blob: blob,
429 conn: conn,
430 }
431 return nil
432 })
433 if err != nil {
434 conn.Close()
435 return nil, fmt.Errorf("failed to open blob for reading: %w", err)
436 }
437
438 return blobReader, nil
439}
440
441// blobReadCloser wraps both the blob and connection for proper cleanup
442type blobReadCloser struct {

Callers

nothing calls this directly

Calls 1

CloseMethod · 0.65

Tested by

no test coverage detected