Documentation ¶
Index ¶
- func CommentChange(from, to []schema.Attr) schema.ChangeKind
- func DetachCycles(changes []schema.Change) ([]schema.Change, error)
- func Has(attrs []schema.Attr, target interface{}) bool
- func LinkSchemaTables(schemas []*schema.Schema)
- func ScanFKs(t *schema.Table, rows *sql.Rows) error
- func ScanStrings(rows *sql.Rows) ([]string, error)
- func ValidString(s sql.NullString) bool
- func ValuesEqual(v1, v2 []string) bool
- func VersionPermutations(dialect, version string) []string
- type Builder
- func (b *Builder) Comma() *Builder
- func (b *Builder) Ident(s string) *Builder
- func (b *Builder) MapComma(x interface{}, f func(i int, b *Builder)) *Builder
- func (b *Builder) P(phrases ...string) *Builder
- func (b *Builder) String() string
- func (b *Builder) Table(t *schema.Table) *Builder
- func (b *Builder) Wrap(f func(b *Builder)) *Builder
- type Diff
- type DiffDriver
- type Normalizer
- type UnsupportedTypeError
Constants ¶
This section is empty.
Variables ¶
This section is empty.
Functions ¶
func CommentChange ¶
func CommentChange(from, to []schema.Attr) schema.ChangeKind
CommentChange reports if the element comment was changed.
func DetachCycles ¶
DetachCycles takes a list of schema changes, and detaches references between changes if there is at least one circular reference in the changeset. More explicitly, it postpones fks creation, or deletes fks before deletes their tables.
func Has ¶
Has finds the first attribute in the attribute list that matches target, and if so, sets target to that attribute value and returns true.
func LinkSchemaTables ¶
LinkSchemaTables links foreign-key stub tables/columns to actual elements.
func ScanFKs ¶
ScanFKs scans the rows and adds the foreign-key to the table. Reference elements are added as stubs and should be linked manually by the caller.
func ScanStrings ¶
ScanStrings scans sql.Rows into a slice of strings and closes it at the end.
func ValidString ¶
func ValidString(s sql.NullString) bool
ValidString reports if the given string is not null and valid.
func ValuesEqual ¶
ValuesEqual checks if the 2 string slices are equal (including their order).
func VersionPermutations ¶
VersionPermutations returns permutations of the dialect version sorted from coarse to fine grained. For example:
VersionPermutations("mysql", "1.2.3") => ["mysql", "mysql 1", "mysql 1.2", "mysql 1.2.3"]
VersionPermutations will split the version number by ".", " ", "-" or "_", and rejoin them with ".". The output slice can be used by drivers to generate a list of permutations for searching for relevant overrides in schema element specs.
Types ¶
type Builder ¶
A Builder provides a syntactic sugar API for writing SQL statements.
func (*Builder) Comma ¶
Comma writes a comma. If the current buffer ends with whitespace, it will be replaced instead.
func (*Builder) MapComma ¶
MapComma maps the slice x using the function f and joins the result with a comma separating between the written elements.
func (*Builder) P ¶
P writes a list of phrases to the builder separated and suffixed with whitespace.
func (*Builder) String ¶
String overrides the Buffer.String method and ensure no spaces pad the returned statement.
type Diff ¶
type Diff struct {
DiffDriver
}
A Diff provides a generic schema.Differ for diffing schema elements.
The DiffDriver is required for supporting database/dialect specific diff capabilities, like diffing custom types or attributes.
func (*Diff) SchemaDiff ¶
SchemaDiff implements the schema.Differ interface and returns a list of changes that need to be applied in order to move from one state to the other.
type DiffDriver ¶
type DiffDriver interface { // SchemaAttrDiff returns a changeset for migrating schema attributes // from one state to the other. For example, changing schema collation. SchemaAttrDiff(from, to *schema.Schema) []schema.Change // TableAttrDiff returns a changeset for migrating table attributes from // one state to the other. For example, dropping or adding a `CHECK` constraint. TableAttrDiff(from, to *schema.Table) []schema.Change // ColumnChange returns the schema changes (if any) for migrating one column to the other. ColumnChange(from, to *schema.Column) (schema.ChangeKind, error) // IndexAttrChanged reports if the index attributes were changed. // For example, an index type or predicate (for partial indexes). IndexAttrChanged(from, to []schema.Attr) bool // IndexPartAttrChanged reports if the index-part attributes were // changed. For example, an index-part collation. IndexPartAttrChanged(from, to []schema.Attr) bool // ReferenceChanged reports if the foreign key referential action was // changed. For example, action was changed from RESTRICT to CASCADE. ReferenceChanged(from, to schema.ReferenceOption) bool }
A DiffDriver wraps all required methods for diffing elements that may have database-specific diff logic. See sql/schema/mysql/diff.go for an implementation example.
type Normalizer ¶
A Normalizer wraps the Normalize method for normalizing the from and to tables before running diffing. The "from" usually represents the inspected database state (current), and the second represents the desired state.
If the DiffDriver implements the Normalizer interface, TableDiff normalizes its table inputs before starting the diff process.
type UnsupportedTypeError ¶
UnsupportedTypeError describes an unsupported type error.
func (UnsupportedTypeError) Error ¶
func (e UnsupportedTypeError) Error() string