You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
boundary/internal/db/schema/state.go

59 lines
1.6 KiB

package schema
const nilVersion = -1
// migrationState is meant to be populated by the generated migration code and
// contains the internal representation of a schema in the current binary.
type migrationState struct {
// binarySchemaVersion provides the database schema version supported by
// this binary.
binarySchemaVersion int
upMigrations map[int][]byte
}
// migrationStates is populated by the generated migration code with the key being the dialect.
var migrationStates = make(map[string]migrationState)
func getUpMigration(dialect string, opt ...Option) map[int][]byte {
opts := getOpts(opt...)
var ms migrationState
var ok bool
if opts.withMigrationStates != nil {
ms, ok = opts.withMigrationStates[dialect]
} else {
ms, ok = migrationStates[dialect]
}
if !ok {
return nil
}
return ms.upMigrations
}
// BinarySchemaVersion provides the schema version that this binary supports for the provided dialect.
// If the binary doesn't support this dialect -1 is returned.
func BinarySchemaVersion(dialect string) int {
ms, ok := migrationStates[dialect]
if !ok {
return nilVersion
}
return ms.binarySchemaVersion
}
func cloneMigrationStates(states map[string]migrationState) map[string]migrationState {
nStates := map[string]migrationState{}
for k, s := range states {
newState := migrationState{
binarySchemaVersion: s.binarySchemaVersion,
upMigrations: map[int][]byte{},
}
for v, up := range s.upMigrations {
cp := make([]byte, len(up))
copy(cp, up)
newState.upMigrations[v] = cp
}
nStates[k] = newState
}
return nStates
}