mirror of https://github.com/pressly/goose.git
38 lines
1.2 KiB
Go
38 lines
1.2 KiB
Go
package controller
|
|
|
|
import (
|
|
"context"
|
|
"errors"
|
|
|
|
"github.com/pressly/goose/v3/database"
|
|
)
|
|
|
|
// A StoreController is used by the goose package to interact with a database. This type is a
|
|
// wrapper around the Store interface, but can be extended to include additional (optional) methods
|
|
// that are not part of the core Store interface.
|
|
type StoreController struct{ database.Store }
|
|
|
|
var _ database.StoreExtender = (*StoreController)(nil)
|
|
|
|
// NewStoreController returns a new StoreController that wraps the given Store.
|
|
//
|
|
// If the Store implements the following optional methods, the StoreController will call them as
|
|
// appropriate:
|
|
//
|
|
// - TableExists(context.Context, DBTxConn) (bool, error)
|
|
//
|
|
// If the Store does not implement a method, it will either return a [errors.ErrUnsupported] error
|
|
// or fall back to the default behavior.
|
|
func NewStoreController(store database.Store) *StoreController {
|
|
return &StoreController{store}
|
|
}
|
|
|
|
func (c *StoreController) TableExists(ctx context.Context, db database.DBTxConn) (bool, error) {
|
|
if t, ok := c.Store.(interface {
|
|
TableExists(ctx context.Context, db database.DBTxConn) (bool, error)
|
|
}); ok {
|
|
return t.TableExists(ctx, db)
|
|
}
|
|
return false, errors.ErrUnsupported
|
|
}
|