From 4d8db4f310c931fa6e8669929abd24c834ee7838 Mon Sep 17 00:00:00 2001 From: Ariel Mashraki <7413593+a8m@users.noreply.github.com> Date: Tue, 15 Mar 2022 18:32:38 +0200 Subject: [PATCH] entc/integration: additional schema changes for migration (#2403) --- doc/md/versioned-migrations.md | 1 + entc/integration/migrate/entv1/migrate/schema.go | 2 +- entc/integration/migrate/entv1/schema/user.go | 3 ++- entc/integration/migrate/entv1/user/user.go | 3 +++ entc/integration/migrate/entv1/user_create.go | 10 ++++++++++ entc/integration/migrate/entv2/migrate/schema.go | 2 +- entc/integration/migrate/entv2/schema/user.go | 3 ++- entc/integration/migrate/entv2/user/user.go | 3 +++ entc/integration/migrate/entv2/user_create.go | 4 ++++ entc/integration/migrate/versioned/migrate/schema.go | 2 +- entc/integration/migrate/versioned/schema/user.go | 3 ++- entc/integration/migrate/versioned/user/user.go | 3 +++ entc/integration/migrate/versioned/user_create.go | 10 ++++++++++ 13 files changed, 43 insertions(+), 6 deletions(-) diff --git a/doc/md/versioned-migrations.md b/doc/md/versioned-migrations.md index b8a47e4866..c689694c83 100644 --- a/doc/md/versioned-migrations.md +++ b/doc/md/versioned-migrations.md @@ -65,6 +65,7 @@ import ( "ariga.io/atlas/sql/migrate" "entgo.io/ent/dialect/sql/schema" + _ "github.com/go-sql-driver/mysql" ) func main() { diff --git a/entc/integration/migrate/entv1/migrate/schema.go b/entc/integration/migrate/entv1/migrate/schema.go index 2bb54ab2e0..1dd1706bf0 100644 --- a/entc/integration/migrate/entv1/migrate/schema.go +++ b/entc/integration/migrate/entv1/migrate/schema.go @@ -72,7 +72,7 @@ var ( {Name: "address", Type: field.TypeString, Nullable: true}, {Name: "renamed", Type: field.TypeString, Nullable: true}, {Name: "blob", Type: field.TypeBytes, Nullable: true, Size: 255}, - {Name: "state", Type: field.TypeEnum, Nullable: true, Enums: []string{"logged_in", "logged_out"}}, + {Name: "state", Type: field.TypeEnum, Nullable: true, Enums: []string{"logged_in", "logged_out"}, Default: "logged_in"}, {Name: "status", Type: field.TypeString, Nullable: true}, {Name: "workplace", Type: field.TypeString, Nullable: true, Size: 30}, {Name: "user_children", Type: field.TypeInt, Nullable: true}, diff --git a/entc/integration/migrate/entv1/schema/user.go b/entc/integration/migrate/entv1/schema/user.go index 3aa4b2bed1..62bed364d4 100644 --- a/entc/integration/migrate/entv1/schema/user.go +++ b/entc/integration/migrate/entv1/schema/user.go @@ -39,7 +39,8 @@ func (User) Fields() []ent.Field { MaxLen(255), field.Enum("state"). Optional(). - Values("logged_in", "logged_out"), + Values("logged_in", "logged_out"). + Default("logged_in"), field.String("status"). Optional(), field.String("workplace"). diff --git a/entc/integration/migrate/entv1/user/user.go b/entc/integration/migrate/entv1/user/user.go index b515e20dda..8ffb3b11e9 100644 --- a/entc/integration/migrate/entv1/user/user.go +++ b/entc/integration/migrate/entv1/user/user.go @@ -117,6 +117,9 @@ var ( // State defines the type for the "state" enum field. type State string +// StateLoggedIn is the default value of the State enum. +const DefaultState = StateLoggedIn + // State values. const ( StateLoggedIn State = "logged_in" diff --git a/entc/integration/migrate/entv1/user_create.go b/entc/integration/migrate/entv1/user_create.go index 52faf7725b..ceacff449d 100644 --- a/entc/integration/migrate/entv1/user_create.go +++ b/entc/integration/migrate/entv1/user_create.go @@ -221,6 +221,7 @@ func (uc *UserCreate) Save(ctx context.Context) (*User, error) { err error node *User ) + uc.defaults() if len(uc.hooks) == 0 { if err = uc.check(); err != nil { return nil, err @@ -278,6 +279,14 @@ func (uc *UserCreate) ExecX(ctx context.Context) { } } +// defaults sets the default values of the builder before save. +func (uc *UserCreate) defaults() { + if _, ok := uc.mutation.State(); !ok { + v := user.DefaultState + uc.mutation.SetState(v) + } +} + // check runs all checks and user-defined validators on the builder. func (uc *UserCreate) check() error { if _, ok := uc.mutation.Age(); !ok { @@ -517,6 +526,7 @@ func (ucb *UserCreateBulk) Save(ctx context.Context) ([]*User, error) { for i := range ucb.builders { func(i int, root context.Context) { builder := ucb.builders[i] + builder.defaults() var mut Mutator = MutateFunc(func(ctx context.Context, m Mutation) (Value, error) { mutation, ok := m.(*UserMutation) if !ok { diff --git a/entc/integration/migrate/entv2/migrate/schema.go b/entc/integration/migrate/entv2/migrate/schema.go index 14086c452c..e49628fecb 100644 --- a/entc/integration/migrate/entv2/migrate/schema.go +++ b/entc/integration/migrate/entv2/migrate/schema.go @@ -138,7 +138,7 @@ var ( {Name: "title", Type: field.TypeString, Default: "SWE"}, {Name: "renamed", Type: field.TypeString, Nullable: true}, {Name: "blob", Type: field.TypeBytes, Nullable: true, Size: 1000}, - {Name: "state", Type: field.TypeEnum, Nullable: true, Enums: []string{"logged_in", "logged_out", "online"}}, + {Name: "state", Type: field.TypeEnum, Nullable: true, Enums: []string{"logged_in", "logged_out", "online"}, Default: "logged_in"}, {Name: "status", Type: field.TypeEnum, Nullable: true, Enums: []string{"done", "pending"}}, {Name: "workplace", Type: field.TypeString, Nullable: true}, {Name: "created_at", Type: field.TypeTime, Default: "CURRENT_TIMESTAMP"}, diff --git a/entc/integration/migrate/entv2/schema/user.go b/entc/integration/migrate/entv2/schema/user.go index 03de9c8cd7..45186bdc67 100644 --- a/entc/integration/migrate/entv2/schema/user.go +++ b/entc/integration/migrate/entv2/schema/user.go @@ -81,7 +81,8 @@ func (User) Fields() []ent.Field { // adding enum to the `state` column. field.Enum("state"). Optional(). - Values("logged_in", "logged_out", "online"), + Values("logged_in", "logged_out", "online"). + Default("logged_in"), // convert string to enum. field.Enum("status"). Optional(). diff --git a/entc/integration/migrate/entv2/user/user.go b/entc/integration/migrate/entv2/user/user.go index 4fc21fa058..50cad02c33 100644 --- a/entc/integration/migrate/entv2/user/user.go +++ b/entc/integration/migrate/entv2/user/user.go @@ -158,6 +158,9 @@ func MixedEnumValidator(me MixedEnum) error { // State defines the type for the "state" enum field. type State string +// StateLoggedIn is the default value of the State enum. +const DefaultState = StateLoggedIn + // State values. const ( StateLoggedIn State = "logged_in" diff --git a/entc/integration/migrate/entv2/user_create.go b/entc/integration/migrate/entv2/user_create.go index 0aebf93321..1b2c5687ce 100644 --- a/entc/integration/migrate/entv2/user_create.go +++ b/entc/integration/migrate/entv2/user_create.go @@ -342,6 +342,10 @@ func (uc *UserCreate) defaults() { v := user.DefaultTitle uc.mutation.SetTitle(v) } + if _, ok := uc.mutation.State(); !ok { + v := user.DefaultState + uc.mutation.SetState(v) + } if _, ok := uc.mutation.CreatedAt(); !ok { v := user.DefaultCreatedAt() uc.mutation.SetCreatedAt(v) diff --git a/entc/integration/migrate/versioned/migrate/schema.go b/entc/integration/migrate/versioned/migrate/schema.go index 96784d6755..83a0660783 100644 --- a/entc/integration/migrate/versioned/migrate/schema.go +++ b/entc/integration/migrate/versioned/migrate/schema.go @@ -42,7 +42,7 @@ var ( {Name: "address", Type: field.TypeString, Nullable: true}, {Name: "renamed", Type: field.TypeString, Nullable: true}, {Name: "blob", Type: field.TypeBytes, Nullable: true, Size: 255}, - {Name: "state", Type: field.TypeEnum, Nullable: true, Enums: []string{"logged_in", "logged_out"}}, + {Name: "state", Type: field.TypeEnum, Nullable: true, Enums: []string{"logged_in", "logged_out"}, Default: "logged_in"}, {Name: "status", Type: field.TypeString, Nullable: true}, {Name: "workplace", Type: field.TypeString, Nullable: true, Size: 30}, {Name: "user_children", Type: field.TypeInt, Nullable: true}, diff --git a/entc/integration/migrate/versioned/schema/user.go b/entc/integration/migrate/versioned/schema/user.go index 1e37776795..c549fa7d96 100644 --- a/entc/integration/migrate/versioned/schema/user.go +++ b/entc/integration/migrate/versioned/schema/user.go @@ -38,7 +38,8 @@ func (User) Fields() []ent.Field { MaxLen(255), field.Enum("state"). Optional(). - Values("logged_in", "logged_out"), + Values("logged_in", "logged_out"). + Default("logged_in"), field.String("status"). Optional(), field.String("workplace"). diff --git a/entc/integration/migrate/versioned/user/user.go b/entc/integration/migrate/versioned/user/user.go index a614853f3a..d1b8f482ed 100644 --- a/entc/integration/migrate/versioned/user/user.go +++ b/entc/integration/migrate/versioned/user/user.go @@ -117,6 +117,9 @@ var ( // State defines the type for the "state" enum field. type State string +// StateLoggedIn is the default value of the State enum. +const DefaultState = StateLoggedIn + // State values. const ( StateLoggedIn State = "logged_in" diff --git a/entc/integration/migrate/versioned/user_create.go b/entc/integration/migrate/versioned/user_create.go index 913df0623f..50d4b94e35 100644 --- a/entc/integration/migrate/versioned/user_create.go +++ b/entc/integration/migrate/versioned/user_create.go @@ -221,6 +221,7 @@ func (uc *UserCreate) Save(ctx context.Context) (*User, error) { err error node *User ) + uc.defaults() if len(uc.hooks) == 0 { if err = uc.check(); err != nil { return nil, err @@ -278,6 +279,14 @@ func (uc *UserCreate) ExecX(ctx context.Context) { } } +// defaults sets the default values of the builder before save. +func (uc *UserCreate) defaults() { + if _, ok := uc.mutation.State(); !ok { + v := user.DefaultState + uc.mutation.SetState(v) + } +} + // check runs all checks and user-defined validators on the builder. func (uc *UserCreate) check() error { if _, ok := uc.mutation.Age(); !ok { @@ -517,6 +526,7 @@ func (ucb *UserCreateBulk) Save(ctx context.Context) ([]*User, error) { for i := range ucb.builders { func(i int, root context.Context) { builder := ucb.builders[i] + builder.defaults() var mut Mutator = MutateFunc(func(ctx context.Context, m Mutation) (Value, error) { mutation, ok := m.(*UserMutation) if !ok {