| package redshift |
| |
| import ( |
| "net/url" |
| |
| "github.com/mattes/migrate/database" |
| "github.com/mattes/migrate/database/postgres" |
| ) |
| |
| // init registers the driver under the name 'redshift' |
| func init() { |
| db := new(Redshift) |
| db.Driver = new(postgres.Postgres) |
| |
| database.Register("redshift", db) |
| } |
| |
| // Redshift is a wrapper around the PostgreSQL driver which implements Redshift-specific behavior. |
| // |
| // Currently, the only different behaviour is the lack of locking in Redshift. The (Un)Lock() method(s) have been overridden from the PostgreSQL adapter to simply return nil. |
| type Redshift struct { |
| // The wrapped PostgreSQL driver. |
| database.Driver |
| } |
| |
| // Open implements the database.Driver interface by parsing the URL, switching the scheme from "redshift" to "postgres", and delegating to the underlying PostgreSQL driver. |
| func (driver *Redshift) Open(dsn string) (database.Driver, error) { |
| parsed, err := url.Parse(dsn) |
| if err != nil { |
| return nil, err |
| } |
| |
| parsed.Scheme = "postgres" |
| psql, err := driver.Driver.Open(parsed.String()) |
| if err != nil { |
| return nil, err |
| } |
| |
| return &Redshift{Driver: psql}, nil |
| } |
| |
| // Lock implements the database.Driver interface by not locking and returning nil. |
| func (driver *Redshift) Lock() error { return nil } |
| |
| // Unlock implements the database.Driver interface by not unlocking and returning nil. |
| func (driver *Redshift) Unlock() error { return nil } |