mirror of https://github.com/pressly/goose.git
34 lines
1.5 KiB
Go
34 lines
1.5 KiB
Go
package database
|
|
|
|
import "context"
|
|
|
|
// StoreExtender is an extension of the Store interface that provides optional optimizations and
|
|
// database-specific features. While not required by the core goose package, implementing these
|
|
// methods can improve performance and functionality for specific databases.
|
|
//
|
|
// IMPORTANT: This interface may be expanded in future versions. Implementors MUST be prepared to
|
|
// update their implementations when new methods are added, either by implementing the new
|
|
// functionality or returning [errors.ErrUnsupported].
|
|
//
|
|
// The goose package handles these extended capabilities through a [controller.StoreController],
|
|
// which automatically uses optimized methods when available while falling back to default behavior
|
|
// when they're not implemented.
|
|
//
|
|
// Example usage to verify implementation:
|
|
//
|
|
// var _ StoreExtender = (*CustomStoreExtended)(nil)
|
|
//
|
|
// In short, it's exported to allows implementors to have a compile-time check that they are
|
|
// implementing the interface correctly.
|
|
type StoreExtender interface {
|
|
Store
|
|
|
|
// TableExists checks if the migrations table exists in the database. Implementing this method
|
|
// allows goose to optimize table existence checks by using database-specific system catalogs
|
|
// (e.g., pg_tables for PostgreSQL, sqlite_master for SQLite) instead of generic SQL queries.
|
|
//
|
|
// Return [errors.ErrUnsupported] if the database does not provide an efficient way to check
|
|
// table existence.
|
|
TableExists(ctx context.Context, db DBTxConn) (bool, error)
|
|
}
|