Documentation ¶
Overview ¶
Package schema contains all schema migration logic for SQL dialects.
Index ¶
- Constants
- func Diff(ctx context.Context, u, name string, tables []*Table, opts ...MigrateOption) (err error)
- type Applier
- type ApplyFunc
- type ApplyHook
- type Atlas
- func (a *Atlas) Create(ctx context.Context, tables ...*Table) (err error)
- func (a *Atlas) Diff(ctx context.Context, tables ...*Table) error
- func (a *Atlas) NamedDiff(ctx context.Context, name string, tables ...*Table) error
- func (a *Atlas) StateReader(tables ...*Table) migrate.StateReaderFunc
- func (a *Atlas) VerifyTableRange(ctx context.Context, tables []*Table) error
- type ChangeKind
- type Column
- type CreateFunc
- type Creator
- type DiffFunc
- type DiffHook
- type Differ
- type DirWriter
- type Dm
- type Expr
- type ForeignKey
- type Hook
- type Index
- type Indexes
- type InspectOption
- type Inspector
- type Migratedeprecated
- type MigrateOption
- func DisableChecksum() MigrateOptiondeprecated
- func WithApplyHook(hooks ...ApplyHook) MigrateOption
- func WithAtlas(b bool) MigrateOptiondeprecated
- func WithDialect(d string) MigrateOption
- func WithDiffHook(hooks ...DiffHook) MigrateOption
- func WithDiffOptions(opts ...schema.DiffOption) MigrateOption
- func WithDir(dir migrate.Dir) MigrateOption
- func WithDropColumn(b bool) MigrateOption
- func WithDropIndex(b bool) MigrateOption
- func WithErrNoPlan(b bool) MigrateOption
- func WithFixture(b bool) MigrateOptiondeprecated
- func WithForeignKeys(b bool) MigrateOption
- func WithFormatter(fmt migrate.Formatter) MigrateOption
- func WithGlobalUniqueID(b bool) MigrateOption
- func WithHooks(hooks ...Hook) MigrateOption
- func WithIndent(indent string) MigrateOption
- func WithMigrationMode(mode Mode) MigrateOption
- func WithSkipChanges(skip ChangeKind) MigrateOption
- func WithSumFile() MigrateOptiondeprecated
- type Mode
- type MySQL
- type Postgres
- type ReferenceOption
- type SQLite
- type SQLiteTx
- type Table
- func (t *Table) AddColumn(c *Column) *Table
- func (t *Table) AddForeignKey(fk *ForeignKey) *Table
- func (t *Table) AddIndex(name string, unique bool, columns []string) *Table
- func (t *Table) AddPrimary(c *Column) *Table
- func (t *Table) Column(name string) (*Column, bool)
- func (t *Table) HasColumn(name string) bool
- func (t *Table) Index(name string) (*Index, bool)
- func (t *Table) SetAnnotation(ant *entsql.Annotation) *Table
- func (t *Table) SetComment(c string) *Table
- func (t *Table) SetSchema(s string) *Table
- type WriteDriver
Constants ¶
const ( // ModeReplay computes the current state by replaying the migration directory on the connected database. ModeReplay = iota // ModeInspect computes the current state by inspecting the connected database. ModeInspect )
const ( // TypeTable defines the table name holding the type information. TypeTable = "ent_types" // MaxTypes defines the max number of types can be created when // defining universal ids. The left 16-bits are reserved. MaxTypes = math.MaxUint16 )
const ( // DefaultStringLen describes the default length for string/varchar types. DefaultStringLen int64 = 255 // Null is the string representation of NULL in SQL. Null = "NULL" // PrimaryKey is the string representation of PKs in SQL. PrimaryKey = "PRI" // UniqueKey is the string representation of PKs in SQL. UniqueKey = "UNI" )
Variables ¶
This section is empty.
Functions ¶
Types ¶
type Applier ¶
type Applier interface { // Apply applies the given migrate.Plan on the database. Apply(context.Context, dialect.ExecQuerier, *migrate.Plan) error }
Applier is the interface that wraps the Apply method.
type ApplyFunc ¶
The ApplyFunc type is an adapter to allow the use of ordinary function as Applier. If f is a function with the appropriate signature, ApplyFunc(f) is an Applier that calls f.
type ApplyHook ¶
ApplyHook defines the "migration applying middleware". A function that gets an Applier and returns an Applier.
type Atlas ¶
type Atlas struct {
// contains filtered or unexported fields
}
Atlas atlas migration engine.
func NewMigrate ¶
func NewMigrate(drv dialect.Driver, opts ...MigrateOption) (*Atlas, error)
NewMigrate creates a new Atlas form the given dialect.Driver.
func NewMigrateURL ¶
func NewMigrateURL(u string, opts ...MigrateOption) (*Atlas, error)
NewMigrateURL create a new Atlas from the given url.
func (*Atlas) Create ¶
Create creates all schema resources in the database. It works in an "append-only" mode, which means, it only creates tables, appends columns to tables or modifies column types.
Column can be modified by turning into a NULL from NOT NULL, or having a type conversion not resulting data altering. From example, changing varchar(255) to varchar(120) is invalid, but changing varchar(120) to varchar(255) is valid. For more info, see the convert function below.
func (*Atlas) Diff ¶
Diff compares the state read from the connected database with the state defined by Ent. Changes will be written to migration files by the configured Planner.
func (*Atlas) NamedDiff ¶
NamedDiff compares the state read from the connected database with the state defined by Ent. Changes will be written to migration files by the configured Planner.
func (*Atlas) StateReader ¶
func (a *Atlas) StateReader(tables ...*Table) migrate.StateReaderFunc
StateReader returns an atlas migrate.StateReader returning the state as described by the Ent table slice.
func (*Atlas) VerifyTableRange ¶
VerifyTableRange ensures, that the defined autoincrement starting value is set for each table as defined by the TypTable. This is necessary for MySQL versions < 8.0. In those versions the defined starting value for AUTOINCREMENT columns was stored in memory, and when a server restarts happens and there are no rows yet in a table, the defined starting value is lost, which will result in incorrect behavior when working with global unique ids. Calling this method on service start ensures the information are correct and are set again, if they aren't. For MySQL versions > 8 calling this method is only required once after the upgrade.
type ChangeKind ¶
type ChangeKind uint
A ChangeKind denotes the kind of schema change.
const ( NoChange ChangeKind = 0 AddSchema ChangeKind = 1 << (iota - 1) ModifySchema DropSchema AddTable ModifyTable DropTable AddColumn ModifyColumn DropColumn AddIndex ModifyIndex DropIndex AddForeignKey ModifyForeignKey DropForeignKey AddCheck ModifyCheck DropCheck )
List of change types.
func (ChangeKind) Is ¶
func (k ChangeKind) Is(c ChangeKind) bool
Is reports whether c is match the given change kind.
type Column ¶
type Column struct { Name string // column name. Type field.Type // column type. SchemaType map[string]string // optional schema type per dialect. Attr string // extra attributes. Size int64 // max size parameter for string, blob, etc. Key string // key definition (PRI, UNI or MUL). Unique bool // column with unique constraint. Increment bool // auto increment attribute. Nullable bool // null or not null attribute. Default any // default value. Enums []string // enum values. Collation string // collation type (utf8mb4_unicode_ci, utf8mb4_general_ci) Comment string // optional column comment. // contains filtered or unexported fields }
Column schema definition for SQL dialects.
func (*Column) ConvertibleTo ¶
ConvertibleTo reports whether a column can be converted to the new column without altering its data.
func (*Column) PrimaryKey ¶
PrimaryKey returns boolean indicates if this column is on of the primary key columns. Used by the migration tool when parsing the `DESCRIBE TABLE` output Go objects.
func (*Column) ScanDefault ¶
ScanDefault scans the default value string to its interface type.
type CreateFunc ¶
The CreateFunc type is an adapter to allow the use of ordinary function as Creator. If f is a function with the appropriate signature, CreateFunc(f) is a Creator that calls f.
type Creator ¶
type Creator interface { // Create creates the given tables in the database. See Migrate.Create for more details. Create(context.Context, ...*Table) error }
Creator is the interface that wraps the Create method.
type DiffFunc ¶
The DiffFunc type is an adapter to allow the use of ordinary function as Differ. If f is a function with the appropriate signature, DiffFunc(f) is a Differ that calls f.
type DiffHook ¶
DiffHook defines the "diff middleware". A function that gets a Differ and returns a Differ.
type Differ ¶
type Differ interface { // Diff returns a list of changes that construct a migration plan. Diff(current, desired *schema.Schema) ([]schema.Change, error) }
Differ is the interface that wraps the Diff method.
type DirWriter ¶
type DirWriter struct { Dir migrate.Dir // target directory. Formatter migrate.Formatter // optional formatter. // contains filtered or unexported fields }
DirWriter implements the io.Writer interface for writing to an Atlas managed directory.
func (*DirWriter) Change ¶
Change converts all written statement so far into a migration change with the given comment.
func (*DirWriter) FlushChange ¶
FlushChange combines Change and Flush.
type Expr ¶
type Expr string
Expr represents a raw expression. It is used to distinguish between literal values and raw expressions when defining default values.
type ForeignKey ¶
type ForeignKey struct { Symbol string // foreign-key name. Generated if empty. Columns []*Column // table column RefTable *Table // referenced table. RefColumns []*Column // referenced columns. OnUpdate ReferenceOption // action on update. OnDelete ReferenceOption // action on delete. }
ForeignKey definition for creation.
func (ForeignKey) DSL ¶
func (fk ForeignKey) DSL() *sql.ForeignKeyBuilder
DSL returns a default DSL query for a foreign-key.
type Hook ¶
Hook defines the "create middleware". A function that gets a Creator and returns a Creator. For example:
hook := func(next schema.Creator) schema.Creator { return schema.CreateFunc(func(ctx context.Context, tables ...*schema.Table) error { fmt.Println("Tables:", tables) return next.Create(ctx, tables...) }) }
type Index ¶
type Index struct { Name string // index name. Unique bool // uniqueness. Columns []*Column // actual table columns. Annotation *entsql.IndexAnnotation // index annotation. // contains filtered or unexported fields }
Index definition for table index.
func (*Index) Builder ¶
func (i *Index) Builder(table string) *sql.IndexBuilder
Builder returns the query builder for index creation. The DSL is identical in all dialects.
func (*Index) DropBuilder ¶
func (i *Index) DropBuilder(table string) *sql.DropIndexBuilder
DropBuilder returns the query builder for the drop index.
type Indexes ¶
type Indexes []*Index
Indexes used for scanning all sql.Rows into a list of indexes, because multiple sql rows can represent the same index (multi-columns indexes).
type InspectOption ¶
type InspectOption func(inspect *Inspector)
InspectOption allows for managing schema configuration using functional options.
func WithSchema ¶
func WithSchema(schema string) InspectOption
WithSchema provides a schema (named-database) for reading the tables from.
type Inspector ¶
type Inspector struct {
// contains filtered or unexported fields
}
An Inspector provides methods for inspecting database tables.
func NewInspect ¶
func NewInspect(d dialect.Driver, opts ...InspectOption) (*Inspector, error)
NewInspect returns an inspector for the given SQL driver.
type Migrate
deprecated
type Migrate struct {
// contains filtered or unexported fields
}
Migrate runs the migration logic for the SQL dialects.
Deprecated: Use the new Atlas struct instead.
func (*Migrate) Create ¶
Create creates all schema resources in the database. It works in an "append-only" mode, which means, it only creates tables, appends columns to tables or modifies column types.
Column can be modified by turning into a NULL from NOT NULL, or having a type conversion not resulting data altering. From example, changing varchar(255) to varchar(120) is invalid, but changing varchar(120) to varchar(255) is valid. For more info, see the convert function below.
Note that SQLite dialect does not support (this moment) the "append-only" mode describe above, since it's used only for testing.
type MigrateOption ¶
type MigrateOption func(*Atlas)
MigrateOption allows configuring Atlas using functional arguments.
func DisableChecksum
deprecated
func DisableChecksum() MigrateOption
DisableChecksum instructs atlas to skip migration directory integrity sum file generation.
Deprecated: generating the sum file will no longer be optional in future versions.
func WithApplyHook ¶
func WithApplyHook(hooks ...ApplyHook) MigrateOption
WithApplyHook adds a list of ApplyHook to the schema migration.
schema.WithApplyHook(func(next schema.Applier) schema.Applier { return schema.ApplyFunc(func(ctx context.Context, conn dialect.ExecQuerier, plan *migrate.Plan) error { // Example to hook into the apply process, or implement // a custom applier. // // for _, c := range plan.Changes { // fmt.Printf("%s: %s", c.Comment, c.Cmd) // } // return next.Apply(ctx, conn, plan) }) })
func WithAtlas
deprecated
func WithAtlas(b bool) MigrateOption
WithAtlas is an opt-out option for v0.11 indicating the migration should be executed using the deprecated legacy engine. Note, in future versions, this option is going to be removed and the Atlas (https://atlasgo.io) based migration engine should be used.
Deprecated: The legacy engine will be removed.
func WithDialect ¶
func WithDialect(d string) MigrateOption
WithDialect configures the Ent dialect to use when migrating for an Atlas supported dialect flavor. As an example, Ent can work with TiDB in MySQL dialect and Atlas can handle TiDB migrations.
func WithDiffHook ¶
func WithDiffHook(hooks ...DiffHook) MigrateOption
WithDiffHook adds a list of DiffHook to the schema migration.
schema.WithDiffHook(func(next schema.Differ) schema.Differ { return schema.DiffFunc(func(current, desired *atlas.Schema) ([]atlas.Change, error) { // Code before standard diff. changes, err := next.Diff(current, desired) if err != nil { return nil, err } // After diff, you can filter // changes or return new ones. return changes, nil }) })
func WithDiffOptions ¶
func WithDiffOptions(opts ...schema.DiffOption) MigrateOption
WithDiffOptions adds a list of options to pass to the diff engine.
func WithDir ¶
func WithDir(dir migrate.Dir) MigrateOption
WithDir sets the atlas migration directory to use to store migration files.
func WithDropColumn ¶
func WithDropColumn(b bool) MigrateOption
WithDropColumn sets the columns dropping option to the migration. Defaults to false.
func WithDropIndex ¶
func WithDropIndex(b bool) MigrateOption
WithDropIndex sets the indexes dropping option to the migration. Defaults to false.
func WithErrNoPlan ¶
func WithErrNoPlan(b bool) MigrateOption
WithErrNoPlan sets Atlas to returns a migrate.ErrNoPlan in case the migration plan is empty. Defaults to false.
func WithFixture
deprecated
func WithFixture(b bool) MigrateOption
WithFixture sets the foreign-key renaming option to the migration when upgrading sqlDialect from v0.1.0 (issue-#285). Defaults to false.
Deprecated: This option is no longer needed with the Atlas based migration engine, which now is the default.
func WithForeignKeys ¶
func WithForeignKeys(b bool) MigrateOption
WithForeignKeys enables creating foreign-key in ddl. Defaults to true.
func WithFormatter ¶
func WithFormatter(fmt migrate.Formatter) MigrateOption
WithFormatter sets atlas formatter to use to write changes to migration files.
func WithGlobalUniqueID ¶
func WithGlobalUniqueID(b bool) MigrateOption
WithGlobalUniqueID sets the universal ids options to the migration. Defaults to false.
func WithHooks ¶
func WithHooks(hooks ...Hook) MigrateOption
WithHooks adds a list of hooks to the schema migration.
func WithIndent ¶
func WithIndent(indent string) MigrateOption
WithIndent sets Atlas to generate SQL statements with indentation. An empty string indicates no indentation.
func WithMigrationMode ¶
func WithMigrationMode(mode Mode) MigrateOption
WithMigrationMode instructs atlas how to compute the current state of the schema. This can be done by either replaying (ModeReplay) the migration directory on the connected database, or by inspecting (ModeInspect) the connection. Currently, ModeReplay is opt-in, and ModeInspect is the default. In future versions, ModeReplay will become the default behavior. This option has no effect when using online migrations.
func WithSkipChanges ¶
func WithSkipChanges(skip ChangeKind) MigrateOption
WithSkipChanges allows skipping/filtering list of changes returned by the Differ before executing migration planning.
SkipChanges(schema.DropTable|schema.DropColumn)
func WithSumFile
deprecated
func WithSumFile() MigrateOption
WithSumFile instructs atlas to generate a migration directory integrity sum file.
Deprecated: generating the sum file is now opt-out. This method will be removed in future versions.
type ReferenceOption ¶
type ReferenceOption string
ReferenceOption for constraint actions.
const ( NoAction ReferenceOption = "NO ACTION" Restrict ReferenceOption = "RESTRICT" Cascade ReferenceOption = "CASCADE" SetNull ReferenceOption = "SET NULL" SetDefault ReferenceOption = "SET DEFAULT" )
Reference options.
func (ReferenceOption) ConstName ¶
func (r ReferenceOption) ConstName() string
ConstName returns the constant name of a reference option. It's used by entc for printing the constant name in templates.
type SQLiteTx ¶
SQLiteTx implements dialect.Tx.
type Table ¶
type Table struct { Name string Schema string Columns []*Column Indexes []*Index PrimaryKey []*Column ForeignKeys []*ForeignKey Annotation *entsql.Annotation Comment string // contains filtered or unexported fields }
Table schema definition for SQL dialects.
func CopyTables ¶
CopyTables returns a deep-copy of the given tables. This utility function is useful for copying the generated schema tables (i.e. migrate.Tables) before running schema migration when there is a need for execute multiple migrations concurrently. e.g. running parallel unit-tests using the generated enttest package.
func NewTypesTable ¶
func NewTypesTable() *Table
NewTypesTable returns a new table for holding the global-id information.
func (*Table) AddForeignKey ¶
func (t *Table) AddForeignKey(fk *ForeignKey) *Table
AddForeignKey adds a foreign key to the table.
func (*Table) AddPrimary ¶
AddPrimary adds a new primary key to the table.
func (*Table) SetAnnotation ¶
func (t *Table) SetAnnotation(ant *entsql.Annotation) *Table
SetAnnotation the entsql.Annotation on the table.
func (*Table) SetComment ¶
SetComment sets the table comment.
type WriteDriver ¶
type WriteDriver struct { dialect.Driver // optional driver for query calls. io.Writer // target for exec statements. FormatFunc func(string) (string, error) }
WriteDriver is a driver that writes all driver exec operations to its writer. Note that this driver is used only for printing or writing statements to SQL files, and may require manual changes to the generated SQL statements.
func NewWriteDriver ¶
func NewWriteDriver(dialect string, w io.Writer) *WriteDriver
NewWriteDriver creates a dialect.Driver that writes all driver exec statement to its writer.