mirror of
https://github.com/harness/drone.git
synced 2025-05-08 19:00:30 +08:00
56 lines
1.3 KiB
Go
56 lines
1.3 KiB
Go
package blobsql
|
|
|
|
import (
|
|
"bytes"
|
|
"io"
|
|
"io/ioutil"
|
|
|
|
"github.com/russross/meddler"
|
|
)
|
|
|
|
type Blobstore struct {
|
|
meddler.DB
|
|
}
|
|
|
|
// Del removes an object from the blobstore.
|
|
func (b *Blobstore) Del(path string) error {
|
|
var _, err = b.Exec(deleteBlob, path)
|
|
return err
|
|
}
|
|
|
|
// Get retrieves an object from the blobstore.
|
|
func (b *Blobstore) Get(path string) ([]byte, error) {
|
|
var blob = Blob{}
|
|
var err = meddler.QueryRow(b, &blob, queryBlob, path)
|
|
return []byte(blob.Data), err
|
|
}
|
|
|
|
// GetReader retrieves an object from the blobstore.
|
|
// It is the caller's responsibility to call Close on
|
|
// the ReadCloser when finished reading.
|
|
func (b *Blobstore) GetReader(path string) (io.ReadCloser, error) {
|
|
var blob, err = b.Get(path)
|
|
var buf = bytes.NewBuffer(blob)
|
|
return ioutil.NopCloser(buf), err
|
|
}
|
|
|
|
// Put inserts an object into the blobstore.
|
|
func (b *Blobstore) Put(path string, data []byte) error {
|
|
var blob = Blob{}
|
|
meddler.QueryRow(b, &blob, queryBlob, path)
|
|
blob.Path = path
|
|
blob.Data = string(data)
|
|
return meddler.Save(b, tableBlob, &blob)
|
|
}
|
|
|
|
// PutReader inserts an object into the blobstore by
|
|
// consuming data from r until EOF.
|
|
func (b *Blobstore) PutReader(path string, r io.Reader) error {
|
|
var data, _ = ioutil.ReadAll(r)
|
|
return b.Put(path, data)
|
|
}
|
|
|
|
func New(db meddler.DB) *Blobstore {
|
|
return &Blobstore{db}
|
|
}
|