Documentation
¶
Index ¶
- Variables
- func Create(ctx context.Context, s *Schema, tables []*schema.Table, ...) error
- func Diff(ctx context.Context, url string, opts ...schema.MigrateOption) error
- func NamedDiff(ctx context.Context, url, name string, opts ...schema.MigrateOption) error
- type Schema
- func (s *Schema) Create(ctx context.Context, opts ...schema.MigrateOption) error
- func (s *Schema) Diff(ctx context.Context, opts ...schema.MigrateOption) error
- func (s *Schema) NamedDiff(ctx context.Context, name string, opts ...schema.MigrateOption) error
- func (s *Schema) WriteTo(ctx context.Context, w io.Writer, opts ...schema.MigrateOption) error
Constants ¶
This section is empty.
Variables ¶
View Source
var ( // WithGlobalUniqueID sets the universal ids options to the migration. // If this option is enabled, ent migration will allocate a 1<<32 range // for the ids of each entity (table). // Note that this option cannot be applied on tables that already exist. WithGlobalUniqueID = schema.WithGlobalUniqueID // WithDropColumn sets the drop column option to the migration. // If this option is enabled, ent migration will drop old columns // that were used for both fields and edges. This defaults to false. WithDropColumn = schema.WithDropColumn // WithDropIndex sets the drop index option to the migration. // If this option is enabled, ent migration will drop old indexes // that were defined in the schema. This defaults to false. // Note that unique constraints are defined using `UNIQUE INDEX`, // and therefore, it's recommended to enable this option to get more // flexibility in the schema changes. WithDropIndex = schema.WithDropIndex // WithForeignKeys enables creating foreign-key in schema DDL. This defaults to true. WithForeignKeys = schema.WithForeignKeys )
View Source
var ( // ArchivesColumns holds the columns for the "archives" table. ArchivesColumns = []*schema.Column{ {Name: "id", Type: field.TypeString}, {Name: "state", Type: field.TypeInt, Default: 0}, {Name: "opened_at", Type: field.TypeTime, Nullable: true}, {Name: "created_at", Type: field.TypeTime, Nullable: true}, {Name: "session_id", Type: field.TypeString, Nullable: true}, } // ArchivesTable holds the schema information for the "archives" table. ArchivesTable = &schema.Table{ Name: "archives", Columns: ArchivesColumns, PrimaryKey: []*schema.Column{ArchivesColumns[0]}, ForeignKeys: []*schema.ForeignKey{ { Symbol: "archives_sessions_archives", Columns: []*schema.Column{ArchivesColumns[4]}, RefColumns: []*schema.Column{SessionsColumns[0]}, OnDelete: schema.Cascade, }, }, Indexes: []*schema.Index{ { Name: "archives_session", Unique: false, Columns: []*schema.Column{ArchivesColumns[4]}, Annotation: &entsql.IndexAnnotation{ Where: "session_id IS NOT NULL", }, }, }, } // CommitsColumns holds the columns for the "commits" table. CommitsColumns = []*schema.Column{ {Name: "id", Type: field.TypeInt, Increment: true}, {Name: "ref", Type: field.TypeBytes}, {Name: "timestamp", Type: field.TypeTime}, {Name: "received_at", Type: field.TypeTime}, {Name: "tree", Type: field.TypeBytes}, {Name: "parent", Type: field.TypeBytes, Nullable: true}, {Name: "agent_id", Type: field.TypeString, Default: ""}, {Name: "scan_start_ns", Type: field.TypeInt64, Default: 0}, {Name: "policy_version", Type: field.TypeUint32, Default: 0}, {Name: "key_id", Type: field.TypeString, Nullable: true}, {Name: "consistent", Type: field.TypeBool, Default: false}, {Name: "presence", Type: field.TypeBytes, Nullable: true}, {Name: "partial", Type: field.TypeBool, Default: false}, {Name: "incomplete", Type: field.TypeBool, Default: false}, {Name: "retained_by", Type: field.TypeString, Default: ""}, {Name: "retire_at", Type: field.TypeTime, Nullable: true}, {Name: "retire_policy", Type: field.TypeString, Nullable: true}, {Name: "deleted_at", Type: field.TypeTime, Nullable: true}, {Name: "expires_at", Type: field.TypeTime, Nullable: true}, {Name: "tombstoned_at", Type: field.TypeTime, Nullable: true}, {Name: "logical_size", Type: field.TypeInt64, Nullable: true}, {Name: "file_count", Type: field.TypeInt64, Nullable: true}, {Name: "metadata", Type: field.TypeJSON, Nullable: true}, {Name: "set_id", Type: field.TypeInt64}, } // CommitsTable holds the schema information for the "commits" table. CommitsTable = &schema.Table{ Name: "commits", Columns: CommitsColumns, PrimaryKey: []*schema.Column{CommitsColumns[0]}, ForeignKeys: []*schema.ForeignKey{ { Symbol: "commits_sets_set", Columns: []*schema.Column{CommitsColumns[23]}, RefColumns: []*schema.Column{SetsColumns[0]}, OnDelete: schema.NoAction, }, }, Indexes: []*schema.Index{ { Name: "commitrow_ref", Unique: true, Columns: []*schema.Column{CommitsColumns[1]}, }, { Name: "commitrow_set_id_received_at", Unique: false, Columns: []*schema.Column{CommitsColumns[23], CommitsColumns[3]}, }, { Name: "commits_presence", Unique: false, Columns: []*schema.Column{CommitsColumns[23]}, Annotation: &entsql.IndexAnnotation{ Where: "presence IS NOT NULL", }, }, { Name: "commits_expiring", Unique: false, Columns: []*schema.Column{CommitsColumns[18]}, Annotation: &entsql.IndexAnnotation{ Where: "tombstoned_at IS NULL AND expires_at IS NOT NULL", }, }, }, } // DamagedPathsColumns holds the columns for the "damaged_paths" table. DamagedPathsColumns = []*schema.Column{ {Name: "id", Type: field.TypeInt, Increment: true}, {Name: "path", Type: field.TypeString}, {Name: "found_at", Type: field.TypeTime}, {Name: "set_id", Type: field.TypeInt64}, } // DamagedPathsTable holds the schema information for the "damaged_paths" table. DamagedPathsTable = &schema.Table{ Name: "damaged_paths", Columns: DamagedPathsColumns, PrimaryKey: []*schema.Column{DamagedPathsColumns[0]}, ForeignKeys: []*schema.ForeignKey{ { Symbol: "damaged_paths_sets_damaged", Columns: []*schema.Column{DamagedPathsColumns[3]}, RefColumns: []*schema.Column{SetsColumns[0]}, OnDelete: schema.NoAction, }, }, Indexes: []*schema.Index{ { Name: "damagedpath_set_id_path", Unique: true, Columns: []*schema.Column{DamagedPathsColumns[3], DamagedPathsColumns[1]}, }, }, } // DeletedRefsColumns holds the columns for the "deleted_refs" table. DeletedRefsColumns = []*schema.Column{ {Name: "id", Type: field.TypeInt, Increment: true}, {Name: "ref", Type: field.TypeBytes}, {Name: "tombstoned_at", Type: field.TypeTime}, } // DeletedRefsTable holds the schema information for the "deleted_refs" table. DeletedRefsTable = &schema.Table{ Name: "deleted_refs", Columns: DeletedRefsColumns, PrimaryKey: []*schema.Column{DeletedRefsColumns[0]}, Indexes: []*schema.Index{ { Name: "deletedref_ref", Unique: true, Columns: []*schema.Column{DeletedRefsColumns[1]}, }, }, } // FilesColumns holds the columns for the "files" table. FilesColumns = []*schema.Column{ {Name: "id", Type: field.TypeInt, Increment: true}, {Name: "path", Type: field.TypeString}, {Name: "dir", Type: field.TypeString}, {Name: "valid_from", Type: field.TypeTime}, {Name: "valid_until", Type: field.TypeTime, Nullable: true}, {Name: "ref", Type: field.TypeBytes, Nullable: true}, {Name: "mtime_ns", Type: field.TypeInt64}, {Name: "mode", Type: field.TypeUint32}, {Name: "user", Type: field.TypeString}, {Name: "group", Type: field.TypeString}, {Name: "size", Type: field.TypeInt64}, {Name: "type", Type: field.TypeUint32, Default: 0}, {Name: "link_target", Type: field.TypeBytes, Nullable: true}, {Name: "lost", Type: field.TypeBool, Default: false}, {Name: "set_id", Type: field.TypeInt64}, } // FilesTable holds the schema information for the "files" table. FilesTable = &schema.Table{ Name: "files", Columns: FilesColumns, PrimaryKey: []*schema.Column{FilesColumns[0]}, ForeignKeys: []*schema.ForeignKey{ { Symbol: "files_sets_files", Columns: []*schema.Column{FilesColumns[14]}, RefColumns: []*schema.Column{SetsColumns[0]}, OnDelete: schema.NoAction, }, }, Indexes: []*schema.Index{ { Name: "file_set_id_path_valid_from", Unique: true, Columns: []*schema.Column{FilesColumns[14], FilesColumns[1], FilesColumns[3]}, }, { Name: "files_open", Unique: false, Columns: []*schema.Column{FilesColumns[14], FilesColumns[2]}, Annotation: &entsql.IndexAnnotation{ Where: "valid_until IS NULL", }, }, { Name: "files_versions", Unique: false, Columns: []*schema.Column{FilesColumns[14], FilesColumns[5], FilesColumns[10], FilesColumns[3], FilesColumns[4]}, Annotation: &entsql.IndexAnnotation{ Where: "ref IS NOT NULL", }, }, }, } // ObjectsColumns holds the columns for the "objects" table. ObjectsColumns = []*schema.Column{ {Name: "id", Type: field.TypeInt, Increment: true}, {Name: "ref", Type: field.TypeBytes}, {Name: "start", Type: field.TypeUint32}, {Name: "length", Type: field.TypeUint32}, {Name: "type", Type: field.TypeUint32}, {Name: "carried_time", Type: field.TypeInt64, Nullable: true}, {Name: "carried_offset", Type: field.TypeUint32, Nullable: true}, {Name: "archive_id", Type: field.TypeString}, } // ObjectsTable holds the schema information for the "objects" table. ObjectsTable = &schema.Table{ Name: "objects", Columns: ObjectsColumns, PrimaryKey: []*schema.Column{ObjectsColumns[0]}, ForeignKeys: []*schema.ForeignKey{ { Symbol: "objects_archives_objects", Columns: []*schema.Column{ObjectsColumns[7]}, RefColumns: []*schema.Column{ArchivesColumns[0]}, OnDelete: schema.Cascade, }, }, Indexes: []*schema.Index{ { Name: "object_ref_archive_id", Unique: true, Columns: []*schema.Column{ObjectsColumns[1], ObjectsColumns[7]}, }, { Name: "object_archive_id", Unique: false, Columns: []*schema.Column{ObjectsColumns[7]}, }, { Name: "objects_tombstones", Unique: false, Columns: []*schema.Column{ObjectsColumns[1]}, Annotation: &entsql.IndexAnnotation{ Where: "type = 5", }, }, { Name: "objects_commits", Unique: false, Columns: []*schema.Column{ObjectsColumns[1]}, Annotation: &entsql.IndexAnnotation{ Where: "type = 1", }, }, }, } // PinsColumns holds the columns for the "pins" table. PinsColumns = []*schema.Column{ {Name: "id", Type: field.TypeInt, Increment: true}, {Name: "ref", Type: field.TypeBytes}, {Name: "target", Type: field.TypeBytes}, {Name: "received_at", Type: field.TypeTime}, {Name: "deleted_at", Type: field.TypeTime, Nullable: true}, {Name: "metadata", Type: field.TypeJSON, Nullable: true}, } // PinsTable holds the schema information for the "pins" table. PinsTable = &schema.Table{ Name: "pins", Columns: PinsColumns, PrimaryKey: []*schema.Column{PinsColumns[0]}, Indexes: []*schema.Index{ { Name: "pin_ref", Unique: true, Columns: []*schema.Column{PinsColumns[1]}, }, { Name: "pins_target", Unique: false, Columns: []*schema.Column{PinsColumns[2]}, Annotation: &entsql.IndexAnnotation{ Where: "deleted_at IS NULL", }, }, }, } // ReindexesColumns holds the columns for the "reindexes" table. ReindexesColumns = []*schema.Column{ {Name: "table_name", Type: field.TypeString}, {Name: "churn", Type: field.TypeInt64}, {Name: "stats_reset", Type: field.TypeTime, Nullable: true}, {Name: "reindexed_at", Type: field.TypeTime}, } // ReindexesTable holds the schema information for the "reindexes" table. ReindexesTable = &schema.Table{ Name: "reindexes", Columns: ReindexesColumns, PrimaryKey: []*schema.Column{ReindexesColumns[0]}, } // SessionsColumns holds the columns for the "sessions" table. SessionsColumns = []*schema.Column{ {Name: "id", Type: field.TypeString}, {Name: "agent_id", Type: field.TypeString}, {Name: "backup_set", Type: field.TypeString}, {Name: "started_at", Type: field.TypeTime}, {Name: "last_seen", Type: field.TypeTime}, {Name: "restore_ref", Type: field.TypeBytes, Nullable: true}, } // SessionsTable holds the schema information for the "sessions" table. SessionsTable = &schema.Table{ Name: "sessions", Columns: SessionsColumns, PrimaryKey: []*schema.Column{SessionsColumns[0]}, } // SetsColumns holds the columns for the "sets" table. SetsColumns = []*schema.Column{ {Name: "id", Type: field.TypeInt64, Increment: true}, {Name: "name", Type: field.TypeString}, {Name: "state", Type: field.TypeEnum, Enums: []string{"active", "closing", "deleted"}, Default: "active"}, {Name: "retention_policy", Type: field.TypeString, Nullable: true}, {Name: "retention_paused", Type: field.TypeBool, Default: false}, {Name: "erase", Type: field.TypeBool, Default: false}, {Name: "rescan", Type: field.TypeBool, Default: false}, {Name: "physical_size", Type: field.TypeInt64, Nullable: true}, {Name: "deduplicated_size", Type: field.TypeInt64, Nullable: true}, {Name: "alone_size", Type: field.TypeInt64, Nullable: true}, {Name: "exclusive_size", Type: field.TypeInt64, Nullable: true}, {Name: "deduplicated_alone_size", Type: field.TypeInt64, Nullable: true}, {Name: "logical_size", Type: field.TypeInt64, Nullable: true}, {Name: "kept_logical_size", Type: field.TypeInt64, Nullable: true}, {Name: "unique_size", Type: field.TypeInt64, Nullable: true}, {Name: "sizes_digest", Type: field.TypeBytes, Nullable: true}, } // SetsTable holds the schema information for the "sets" table. SetsTable = &schema.Table{ Name: "sets", Columns: SetsColumns, PrimaryKey: []*schema.Column{SetsColumns[0]}, Indexes: []*schema.Index{ { Name: "set_name", Unique: true, Columns: []*schema.Column{SetsColumns[1]}, }, { Name: "sets_by_size", Unique: false, Columns: []*schema.Column{SetsColumns[7], SetsColumns[1]}, Annotation: &entsql.IndexAnnotation{ DescColumns: map[string]bool{ SetsColumns[7].Name: true, }, }, }, }, } // SetRefsColumns holds the columns for the "set_refs" table. SetRefsColumns = []*schema.Column{ {Name: "id", Type: field.TypeInt, Increment: true}, {Name: "ref", Type: field.TypeBytes}, {Name: "set_id", Type: field.TypeInt64}, } // SetRefsTable holds the schema information for the "set_refs" table. SetRefsTable = &schema.Table{ Name: "set_refs", Columns: SetRefsColumns, PrimaryKey: []*schema.Column{SetRefsColumns[0]}, ForeignKeys: []*schema.ForeignKey{ { Symbol: "set_refs_sets_refs", Columns: []*schema.Column{SetRefsColumns[2]}, RefColumns: []*schema.Column{SetsColumns[0]}, OnDelete: schema.NoAction, }, }, Indexes: []*schema.Index{ { Name: "setref_set_id_ref", Unique: true, Columns: []*schema.Column{SetRefsColumns[2], SetRefsColumns[1]}, }, { Name: "setref_ref", Unique: false, Columns: []*schema.Column{SetRefsColumns[1]}, }, }, } // SettingsColumns holds the columns for the "settings" table. SettingsColumns = []*schema.Column{ {Name: "id", Type: field.TypeInt, Increment: true}, {Name: "policy", Type: field.TypeString, Nullable: true}, {Name: "policy_version", Type: field.TypeUint32, Default: 0}, {Name: "key_acknowledged_at", Type: field.TypeTime, Nullable: true}, {Name: "retention_policy", Type: field.TypeString, Nullable: true}, {Name: "trash_days", Type: field.TypeInt, Default: 14}, {Name: "policy_sequence", Type: field.TypeUint64, Default: 0}, } // SettingsTable holds the schema information for the "settings" table. SettingsTable = &schema.Table{ Name: "settings", Columns: SettingsColumns, PrimaryKey: []*schema.Column{SettingsColumns[0]}, } // TreesColumns holds the columns for the "trees" table. TreesColumns = []*schema.Column{ {Name: "id", Type: field.TypeInt, Increment: true}, {Name: "path", Type: field.TypeString}, {Name: "dir", Type: field.TypeString}, {Name: "valid_from", Type: field.TypeTime}, {Name: "valid_until", Type: field.TypeTime, Nullable: true}, {Name: "ref", Type: field.TypeBytes}, {Name: "set_id", Type: field.TypeInt64}, } // TreesTable holds the schema information for the "trees" table. TreesTable = &schema.Table{ Name: "trees", Columns: TreesColumns, PrimaryKey: []*schema.Column{TreesColumns[0]}, ForeignKeys: []*schema.ForeignKey{ { Symbol: "trees_sets_trees", Columns: []*schema.Column{TreesColumns[6]}, RefColumns: []*schema.Column{SetsColumns[0]}, OnDelete: schema.NoAction, }, }, Indexes: []*schema.Index{ { Name: "tree_set_id_path_valid_from", Unique: true, Columns: []*schema.Column{TreesColumns[6], TreesColumns[1], TreesColumns[3]}, }, { Name: "trees_open", Unique: false, Columns: []*schema.Column{TreesColumns[6], TreesColumns[2]}, Annotation: &entsql.IndexAnnotation{ Where: "valid_until IS NULL", }, }, }, } // WalkedArchivesColumns holds the columns for the "walked_archives" table. WalkedArchivesColumns = []*schema.Column{ {Name: "name", Type: field.TypeString}, } // WalkedArchivesTable holds the schema information for the "walked_archives" table. WalkedArchivesTable = &schema.Table{ Name: "walked_archives", Columns: WalkedArchivesColumns, PrimaryKey: []*schema.Column{WalkedArchivesColumns[0]}, } // Tables holds all the tables in the schema. Tables = []*schema.Table{ ArchivesTable, CommitsTable, DamagedPathsTable, DeletedRefsTable, FilesTable, ObjectsTable, PinsTable, ReindexesTable, SessionsTable, SetsTable, SetRefsTable, SettingsTable, TreesTable, WalkedArchivesTable, } )
Functions ¶
func Create ¶
func Create(ctx context.Context, s *Schema, tables []*schema.Table, opts ...schema.MigrateOption) error
Create creates all table resources using the given schema driver.
Types ¶
type Schema ¶
type Schema struct {
// contains filtered or unexported fields
}
Schema is the API for creating, migrating and dropping a schema.
func (*Schema) Diff ¶
Diff creates a migration file containing the statements to resolve the diff between the Ent schema and the connected database.
func (*Schema) NamedDiff ¶
NamedDiff creates a named migration file containing the statements to resolve the diff between the Ent schema and the connected database.
Click to show internal directories.
Click to hide internal directories.