Documentation ¶
Index ¶
- Constants
- Variables
- func FormatType(t schema.Type) (string, error)
- func MarshalSpec(v any, marshaler schemahcl.Marshaler) ([]byte, error)
- func Open(db schema.ExecQuerier) (migrate.Driver, error)
- func ParseType(raw string) (schema.Type, error)
- type AutoIncrement
- type BitType
- type CreateOptions
- type CreateStmt
- type DisplayWidth
- type Driver
- func (d *Driver) CheckClean(ctx context.Context, revT *migrate.TableIdent) error
- func (d *Driver) Lock(ctx context.Context, name string, timeout time.Duration) (schema.UnlockFunc, error)
- func (d *Driver) NormalizeRealm(ctx context.Context, r *schema.Realm) (*schema.Realm, error)
- func (d *Driver) NormalizeSchema(ctx context.Context, s *schema.Schema) (*schema.Schema, error)
- func (d *Driver) Snapshot(ctx context.Context) (migrate.RestoreFunc, error)
- func (d *Driver) Version() string
- type Enforced
- type IndexType
- type OnUpdate
- type SetType
- type SubPart
- type ZeroFill
Constants ¶
const ( TypeBool = "bool" TypeBoolean = "boolean" TypeBit = "bit" // MYSQL_TYPE_BIT TypeInt = "int" // MYSQL_TYPE_LONG TypeTinyInt = "tinyint" // MYSQL_TYPE_TINY TypeSmallInt = "smallint" // MYSQL_TYPE_SHORT TypeMediumInt = "mediumint" // MYSQL_TYPE_INT24 TypeBigInt = "bigint" // MYSQL_TYPE_LONGLONG TypeDecimal = "decimal" // MYSQL_TYPE_DECIMAL TypeNumeric = "numeric" // MYSQL_TYPE_DECIMAL (numeric_type rule in sql_yacc.yy) TypeFloat = "float" // MYSQL_TYPE_FLOAT TypeDouble = "double" // MYSQL_TYPE_DOUBLE TypeReal = "real" // MYSQL_TYPE_FLOAT or MYSQL_TYPE_DOUBLE (real_type in sql_yacc.yy) TypeTimestamp = "timestamp" // MYSQL_TYPE_TIMESTAMP TypeDate = "date" // MYSQL_TYPE_DATE TypeTime = "time" // MYSQL_TYPE_TIME TypeDateTime = "datetime" // MYSQL_TYPE_DATETIME TypeYear = "year" // MYSQL_TYPE_YEAR TypeVarchar = "varchar" // MYSQL_TYPE_VAR_STRING, MYSQL_TYPE_VARCHAR TypeChar = "char" // MYSQL_TYPE_STRING TypeVarBinary = "varbinary" // MYSQL_TYPE_VAR_STRING + NULL CHARACTER_SET. TypeBinary = "binary" // MYSQL_TYPE_STRING + NULL CHARACTER_SET. TypeBlob = "blob" // MYSQL_TYPE_BLOB TypeTinyBlob = "tinyblob" // MYSQL_TYPE_TINYBLOB TypeMediumBlob = "mediumblob" // MYSQL_TYPE_MEDIUM_BLOB TypeLongBlob = "longblob" // MYSQL_TYPE_LONG_BLOB TypeText = "text" // MYSQL_TYPE_BLOB + CHARACTER_SET utf8mb4 TypeTinyText = "tinytext" // MYSQL_TYPE_TINYBLOB + CHARACTER_SET utf8mb4 TypeMediumText = "mediumtext" // MYSQL_TYPE_MEDIUM_BLOB + CHARACTER_SET utf8mb4 TypeLongText = "longtext" // MYSQL_TYPE_LONG_BLOB with + CHARACTER_SET utf8mb4 TypeEnum = "enum" // MYSQL_TYPE_ENUM TypeSet = "set" // MYSQL_TYPE_SET TypeJSON = "json" // MYSQL_TYPE_JSON TypeGeometry = "geometry" // MYSQL_TYPE_GEOMETRY TypePoint = "point" // Geometry_type::kPoint TypeMultiPoint = "multipoint" // Geometry_type::kMultipoint TypeLineString = "linestring" // Geometry_type::kLinestring TypeMultiLineString = "multilinestring" // Geometry_type::kMultilinestring TypePolygon = "polygon" // Geometry_type::kPolygon TypeMultiPolygon = "multipolygon" // Geometry_type::kMultipolygon TypeGeoCollection = "geomcollection" // Geometry_type::kGeometrycollection TypeGeometryCollection = "geometrycollection" // Geometry_type::kGeometrycollection TypeUUID = "uuid" // MariaDB supported uuid type from 10.7.0+ )
MySQL standard column types as defined in its codebase. Name and order is organized differently than MySQL.
https://github.com/mysql/mysql-server/blob/8.0/include/field_types.h https://github.com/mysql/mysql-server/blob/8.0/sql/dd/types/column.h https://github.com/mysql/mysql-server/blob/8.0/sql/sql_show.cc https://github.com/mysql/mysql-server/blob/8.0/sql/gis/geometries.cc https://dev.mysql.com/doc/refman/8.0/en/other-vendor-data-types.html
const ( IndexTypeBTree = "BTREE" IndexTypeHash = "HASH" IndexTypeFullText = "FULLTEXT" IndexTypeSpatial = "SPATIAL" )
Additional common constants in MySQL.
const DriverName = "mysql"
DriverName holds the name used for registration.
Variables ¶
var ( // MarshalHCL marshals v into an Atlas HCL DDL document. MarshalHCL = schemahcl.MarshalerFunc(func(v any) ([]byte, error) { return MarshalSpec(v, hclState) }) // EvalHCL implements the schemahcl.Evaluator interface. EvalHCL = schemahcl.EvalFunc(evalSpec) // EvalHCLBytes is a helper that evaluates an HCL document from a byte slice instead // of from an hclparse.Parser instance. EvalHCLBytes = specutil.HCLBytesFunc(EvalHCL) )
var DefaultDiff schema.Differ = &sqlx.Diff{DiffDriver: &diff{conn: noConn}}
DefaultDiff provides basic diffing capabilities for MySQL dialects. Note, it is recommended to call Open, create a new Driver and use its Differ when a database connection is available.
var ( // DefaultPlan provides basic planning capabilities for MySQL dialects. // Note, it is recommended to call Open, create a new Driver and use its // migrate.PlanApplier when a database connection is available. DefaultPlan migrate.PlanApplier = &planApply{conn: noConn} )
var TypeRegistry = schemahcl.NewRegistry( schemahcl.WithFormatter(FormatType), schemahcl.WithParser(ParseType), schemahcl.WithSpecs( &schemahcl.TypeSpec{ Name: TypeEnum, T: TypeEnum, Attributes: []*schemahcl.TypeAttr{ {Name: "values", Kind: reflect.Slice, Required: true}, }, RType: reflect.TypeOf(schema.EnumType{}), FromSpec: func(t *schemahcl.Type) (schema.Type, error) { if len(t.Attrs) != 1 || t.Attrs[0].K != "values" { return nil, fmt.Errorf("invalid enum type spec: %v", t) } v, err := t.Attrs[0].Strings() if err != nil { return nil, err } return &schema.EnumType{T: "enum", Values: v}, nil }, }, &schemahcl.TypeSpec{ Name: TypeSet, T: TypeSet, Attributes: []*schemahcl.TypeAttr{ {Name: "values", Kind: reflect.Slice, Required: true}, }, RType: reflect.TypeOf(SetType{}), FromSpec: func(t *schemahcl.Type) (schema.Type, error) { if len(t.Attrs) != 1 || t.Attrs[0].K != "values" { return nil, fmt.Errorf("invalid set type spec: %v", t) } v, err := t.Attrs[0].Strings() if err != nil { return nil, err } return &SetType{Values: v}, nil }, }, schemahcl.NewTypeSpec(TypeBool), schemahcl.NewTypeSpec(TypeBoolean), schemahcl.NewTypeSpec(TypeBit, schemahcl.WithAttributes(schemahcl.SizeTypeAttr(false))), schemahcl.NewTypeSpec(TypeInt, schemahcl.WithAttributes(unsignedTypeAttr(), schemahcl.SizeTypeAttr(false))), schemahcl.NewTypeSpec(TypeTinyInt, schemahcl.WithAttributes(unsignedTypeAttr(), schemahcl.SizeTypeAttr(false))), schemahcl.NewTypeSpec(TypeSmallInt, schemahcl.WithAttributes(unsignedTypeAttr(), schemahcl.SizeTypeAttr(false))), schemahcl.NewTypeSpec(TypeMediumInt, schemahcl.WithAttributes(unsignedTypeAttr(), schemahcl.SizeTypeAttr(false))), schemahcl.NewTypeSpec(TypeBigInt, schemahcl.WithAttributes(unsignedTypeAttr(), schemahcl.SizeTypeAttr(false))), schemahcl.NewTypeSpec(TypeDecimal, schemahcl.WithAttributes(unsignedTypeAttr(), &schemahcl.TypeAttr{Name: "precision", Kind: reflect.Int, Required: false}, &schemahcl.TypeAttr{Name: "scale", Kind: reflect.Int, Required: false})), schemahcl.NewTypeSpec(TypeNumeric, schemahcl.WithAttributes(unsignedTypeAttr(), &schemahcl.TypeAttr{Name: "precision", Kind: reflect.Int, Required: false}, &schemahcl.TypeAttr{Name: "scale", Kind: reflect.Int, Required: false})), schemahcl.NewTypeSpec(TypeFloat, schemahcl.WithAttributes(unsignedTypeAttr(), &schemahcl.TypeAttr{Name: "precision", Kind: reflect.Int, Required: false}, &schemahcl.TypeAttr{Name: "scale", Kind: reflect.Int, Required: false})), schemahcl.NewTypeSpec(TypeDouble, schemahcl.WithAttributes(unsignedTypeAttr(), &schemahcl.TypeAttr{Name: "precision", Kind: reflect.Int, Required: false}, &schemahcl.TypeAttr{Name: "scale", Kind: reflect.Int, Required: false})), schemahcl.NewTypeSpec(TypeReal, schemahcl.WithAttributes(unsignedTypeAttr(), &schemahcl.TypeAttr{Name: "precision", Kind: reflect.Int, Required: false}, &schemahcl.TypeAttr{Name: "scale", Kind: reflect.Int, Required: false})), schemahcl.NewTypeSpec(TypeTimestamp, schemahcl.WithAttributes(&schemahcl.TypeAttr{Name: "precision", Kind: reflect.Int, Required: false})), schemahcl.NewTypeSpec(TypeDate), schemahcl.NewTypeSpec(TypeTime, schemahcl.WithAttributes(&schemahcl.TypeAttr{Name: "precision", Kind: reflect.Int, Required: false})), schemahcl.NewTypeSpec(TypeDateTime, schemahcl.WithAttributes(&schemahcl.TypeAttr{Name: "precision", Kind: reflect.Int, Required: false})), schemahcl.NewTypeSpec(TypeYear, schemahcl.WithAttributes(&schemahcl.TypeAttr{Name: "precision", Kind: reflect.Int, Required: false})), schemahcl.NewTypeSpec(TypeVarchar, schemahcl.WithAttributes(schemahcl.SizeTypeAttr(true))), schemahcl.NewTypeSpec(TypeChar, schemahcl.WithAttributes(schemahcl.SizeTypeAttr(false))), schemahcl.NewTypeSpec(TypeVarBinary, schemahcl.WithAttributes(schemahcl.SizeTypeAttr(true))), schemahcl.NewTypeSpec(TypeBinary, schemahcl.WithAttributes(schemahcl.SizeTypeAttr(false))), schemahcl.NewTypeSpec(TypeBlob, schemahcl.WithAttributes(schemahcl.SizeTypeAttr(false))), schemahcl.NewTypeSpec(TypeTinyBlob), schemahcl.NewTypeSpec(TypeMediumBlob), schemahcl.NewTypeSpec(TypeLongBlob), schemahcl.NewTypeSpec(TypeJSON), schemahcl.NewTypeSpec(TypeText, schemahcl.WithAttributes(schemahcl.SizeTypeAttr(false))), schemahcl.NewTypeSpec(TypeTinyText), schemahcl.NewTypeSpec(TypeMediumText), schemahcl.NewTypeSpec(TypeLongText), schemahcl.NewTypeSpec(TypeGeometry), schemahcl.NewTypeSpec(TypePoint), schemahcl.NewTypeSpec(TypeMultiPoint), schemahcl.NewTypeSpec(TypeLineString), schemahcl.NewTypeSpec(TypeMultiLineString), schemahcl.NewTypeSpec(TypePolygon), schemahcl.NewTypeSpec(TypeMultiPolygon), schemahcl.NewTypeSpec(TypeGeometryCollection), ), )
TypeRegistry contains the supported TypeSpecs for the mysql driver.
Functions ¶
func FormatType ¶ added in v0.2.0
FormatType converts schema type to its column form in the database. An error is returned if the type cannot be recognized.
func MarshalSpec ¶
MarshalSpec marshals v into an Atlas DDL document using a schemahcl.Marshaler.
Types ¶
type AutoIncrement ¶
AutoIncrement attribute for columns with "AUTO_INCREMENT" as a default. V represent an optional start value for the counter.
type CreateOptions ¶ added in v0.2.0
CreateOptions attribute for describing extra options used with CREATE TABLE.
type CreateStmt ¶ added in v0.3.0
CreateStmt describes the SQL statement used to create a table.
type DisplayWidth ¶
The DisplayWidth represents a display width of an integer type.
type Driver ¶
type Driver struct { schema.Differ schema.Inspector migrate.PlanApplier // contains filtered or unexported fields }
Driver represents a MySQL driver for introspecting database schemas, generating diff between schema elements and apply migrations changes.
func (*Driver) CheckClean ¶ added in v0.6.0
CheckClean implements migrate.CleanChecker.
func (*Driver) Lock ¶ added in v0.3.8
func (d *Driver) Lock(ctx context.Context, name string, timeout time.Duration) (schema.UnlockFunc, error)
Lock implements the schema.Locker interface.
func (*Driver) NormalizeRealm ¶ added in v0.3.6
NormalizeRealm returns the normal representation of the given database.
func (*Driver) NormalizeSchema ¶ added in v0.3.6
NormalizeSchema returns the normal representation of the given database.