added blobstore and capability packages

This commit is contained in:
Brad Rydzewski
2014-09-24 21:46:09 -07:00
parent 9a3f33b9c3
commit ed0024efa1
8 changed files with 234 additions and 0 deletions

View File

@@ -0,0 +1,9 @@
package blobsql
type Blob struct {
ID int64 `meddler:"blob_id,pk" orm:"column(blob_id);pk;auto"`
Path string `meddler:"blob_path" orm:"column(blob_path);size(2000);unique"`
Data string `meddler:"blob_data,gobgzip" orm:"column(blob_data);type(text)"`
}
func (b *Blob) TableName() string { return "blobs" }

View File

@@ -0,0 +1,55 @@
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}
}

View File

@@ -0,0 +1,18 @@
package blobsql
const (
tableBlob = "blobs"
)
const (
queryBlob = `
SELECT *
FROM blobs
WHERE blob_path = ?;
`
deleteBlob = `
DELETE FROM blobs
WHERE blob_path = ?;
`
)

View File

@@ -0,0 +1,11 @@
package blobsql
import (
"code.google.com/p/go.net/context"
"github.com/drone/drone/server/blobstore"
"github.com/russross/meddler"
)
func NewContext(parent context.Context, db meddler.DB) context.Context {
return blobstore.NewContext(parent, New(db))
}