entc/gen: restructure hooks execution (#741)

Closed #739
This commit is contained in:
Ariel Mashraki
2020-09-09 10:41:17 +03:00
committed by GitHub
parent 3a2c897143
commit b4b4fa95d7
136 changed files with 2248 additions and 1081 deletions

View File

@@ -63,14 +63,14 @@ func (cc *CarCreate) Mutation() *CarMutation {
// Save creates the Car in the database.
func (cc *CarCreate) Save(ctx context.Context) (*Car, error) {
if err := cc.preSave(); err != nil {
return nil, err
}
var (
err error
node *Car
)
if len(cc.hooks) == 0 {
if err = cc.check(); err != nil {
return nil, err
}
node, err = cc.sqlSave(ctx)
} else {
var mut Mutator = MutateFunc(func(ctx context.Context, m Mutation) (Value, error) {
@@ -78,6 +78,9 @@ func (cc *CarCreate) Save(ctx context.Context) (*Car, error) {
if !ok {
return nil, fmt.Errorf("unexpected mutation type %T", m)
}
if err = cc.check(); err != nil {
return nil, err
}
cc.mutation = mutation
node, err = cc.sqlSave(ctx)
mutation.done = true
@@ -102,7 +105,8 @@ func (cc *CarCreate) SaveX(ctx context.Context) *Car {
return v
}
func (cc *CarCreate) preSave() error {
// check runs all checks and user-defined validators on the builder.
func (cc *CarCreate) check() error {
if _, ok := cc.mutation.Model(); !ok {
return &ValidationError{Name: "model", err: errors.New("ent: missing required field \"model\"")}
}
@@ -189,13 +193,13 @@ func (ccb *CarCreateBulk) Save(ctx context.Context) ([]*Car, error) {
func(i int, root context.Context) {
builder := ccb.builders[i]
var mut Mutator = MutateFunc(func(ctx context.Context, m Mutation) (Value, error) {
if err := builder.preSave(); err != nil {
return nil, err
}
mutation, ok := m.(*CarMutation)
if !ok {
return nil, fmt.Errorf("unexpected mutation type %T", m)
}
if err := builder.check(); err != nil {
return nil, err
}
builder.mutation = mutation
nodes[i], specs[i] = builder.createSpec()
var err error

View File

@@ -77,7 +77,6 @@ func (cu *CarUpdate) ClearOwner() *CarUpdate {
// Save executes the query and returns the number of rows/vertices matched by this operation.
func (cu *CarUpdate) Save(ctx context.Context) (int, error) {
var (
err error
affected int
@@ -256,7 +255,6 @@ func (cuo *CarUpdateOne) ClearOwner() *CarUpdateOne {
// Save executes the query and returns the updated entity.
func (cuo *CarUpdateOne) Save(ctx context.Context) (*Car, error) {
var (
err error
node *Car

View File

@@ -52,14 +52,14 @@ func (gc *GroupCreate) Mutation() *GroupMutation {
// Save creates the Group in the database.
func (gc *GroupCreate) Save(ctx context.Context) (*Group, error) {
if err := gc.preSave(); err != nil {
return nil, err
}
var (
err error
node *Group
)
if len(gc.hooks) == 0 {
if err = gc.check(); err != nil {
return nil, err
}
node, err = gc.sqlSave(ctx)
} else {
var mut Mutator = MutateFunc(func(ctx context.Context, m Mutation) (Value, error) {
@@ -67,6 +67,9 @@ func (gc *GroupCreate) Save(ctx context.Context) (*Group, error) {
if !ok {
return nil, fmt.Errorf("unexpected mutation type %T", m)
}
if err = gc.check(); err != nil {
return nil, err
}
gc.mutation = mutation
node, err = gc.sqlSave(ctx)
mutation.done = true
@@ -91,7 +94,8 @@ func (gc *GroupCreate) SaveX(ctx context.Context) *Group {
return v
}
func (gc *GroupCreate) preSave() error {
// check runs all checks and user-defined validators on the builder.
func (gc *GroupCreate) check() error {
if _, ok := gc.mutation.Name(); !ok {
return &ValidationError{Name: "name", err: errors.New("ent: missing required field \"name\"")}
}
@@ -172,13 +176,13 @@ func (gcb *GroupCreateBulk) Save(ctx context.Context) ([]*Group, error) {
func(i int, root context.Context) {
builder := gcb.builders[i]
var mut Mutator = MutateFunc(func(ctx context.Context, m Mutation) (Value, error) {
if err := builder.preSave(); err != nil {
return nil, err
}
mutation, ok := m.(*GroupMutation)
if !ok {
return nil, fmt.Errorf("unexpected mutation type %T", m)
}
if err := builder.check(); err != nil {
return nil, err
}
builder.mutation = mutation
nodes[i], specs[i] = builder.createSpec()
var err error

View File

@@ -81,17 +81,14 @@ func (gu *GroupUpdate) RemoveUsers(u ...*User) *GroupUpdate {
// Save executes the query and returns the number of rows/vertices matched by this operation.
func (gu *GroupUpdate) Save(ctx context.Context) (int, error) {
if v, ok := gu.mutation.Name(); ok {
if err := group.NameValidator(v); err != nil {
return 0, &ValidationError{Name: "name", err: fmt.Errorf("ent: validator failed for field \"name\": %w", err)}
}
}
var (
err error
affected int
)
if len(gu.hooks) == 0 {
if err = gu.check(); err != nil {
return 0, err
}
affected, err = gu.sqlSave(ctx)
} else {
var mut Mutator = MutateFunc(func(ctx context.Context, m Mutation) (Value, error) {
@@ -99,6 +96,9 @@ func (gu *GroupUpdate) Save(ctx context.Context) (int, error) {
if !ok {
return nil, fmt.Errorf("unexpected mutation type %T", m)
}
if err = gu.check(); err != nil {
return 0, err
}
gu.mutation = mutation
affected, err = gu.sqlSave(ctx)
mutation.done = true
@@ -136,6 +136,16 @@ func (gu *GroupUpdate) ExecX(ctx context.Context) {
}
}
// check runs all checks and user-defined validators on the builder.
func (gu *GroupUpdate) check() error {
if v, ok := gu.mutation.Name(); ok {
if err := group.NameValidator(v); err != nil {
return &ValidationError{Name: "name", err: fmt.Errorf("ent: validator failed for field \"name\": %w", err)}
}
}
return nil
}
func (gu *GroupUpdate) sqlSave(ctx context.Context) (n int, err error) {
_spec := &sqlgraph.UpdateSpec{
Node: &sqlgraph.NodeSpec{
@@ -282,17 +292,14 @@ func (guo *GroupUpdateOne) RemoveUsers(u ...*User) *GroupUpdateOne {
// Save executes the query and returns the updated entity.
func (guo *GroupUpdateOne) Save(ctx context.Context) (*Group, error) {
if v, ok := guo.mutation.Name(); ok {
if err := group.NameValidator(v); err != nil {
return nil, &ValidationError{Name: "name", err: fmt.Errorf("ent: validator failed for field \"name\": %w", err)}
}
}
var (
err error
node *Group
)
if len(guo.hooks) == 0 {
if err = guo.check(); err != nil {
return nil, err
}
node, err = guo.sqlSave(ctx)
} else {
var mut Mutator = MutateFunc(func(ctx context.Context, m Mutation) (Value, error) {
@@ -300,6 +307,9 @@ func (guo *GroupUpdateOne) Save(ctx context.Context) (*Group, error) {
if !ok {
return nil, fmt.Errorf("unexpected mutation type %T", m)
}
if err = guo.check(); err != nil {
return nil, err
}
guo.mutation = mutation
node, err = guo.sqlSave(ctx)
mutation.done = true
@@ -337,6 +347,16 @@ func (guo *GroupUpdateOne) ExecX(ctx context.Context) {
}
}
// check runs all checks and user-defined validators on the builder.
func (guo *GroupUpdateOne) check() error {
if v, ok := guo.mutation.Name(); ok {
if err := group.NameValidator(v); err != nil {
return &ValidationError{Name: "name", err: fmt.Errorf("ent: validator failed for field \"name\": %w", err)}
}
}
return nil
}
func (guo *GroupUpdateOne) sqlSave(ctx context.Context) (gr *Group, err error) {
_spec := &sqlgraph.UpdateSpec{
Node: &sqlgraph.NodeSpec{

View File

@@ -82,14 +82,15 @@ func (uc *UserCreate) Mutation() *UserMutation {
// Save creates the User in the database.
func (uc *UserCreate) Save(ctx context.Context) (*User, error) {
if err := uc.preSave(); err != nil {
return nil, err
}
var (
err error
node *User
)
uc.defaults()
if len(uc.hooks) == 0 {
if err = uc.check(); err != nil {
return nil, err
}
node, err = uc.sqlSave(ctx)
} else {
var mut Mutator = MutateFunc(func(ctx context.Context, m Mutation) (Value, error) {
@@ -97,6 +98,9 @@ func (uc *UserCreate) Save(ctx context.Context) (*User, error) {
if !ok {
return nil, fmt.Errorf("unexpected mutation type %T", m)
}
if err = uc.check(); err != nil {
return nil, err
}
uc.mutation = mutation
node, err = uc.sqlSave(ctx)
mutation.done = true
@@ -121,7 +125,16 @@ func (uc *UserCreate) SaveX(ctx context.Context) *User {
return v
}
func (uc *UserCreate) preSave() error {
// defaults sets the default values of the builder before save.
func (uc *UserCreate) defaults() {
if _, ok := uc.mutation.Name(); !ok {
v := user.DefaultName
uc.mutation.SetName(v)
}
}
// check runs all checks and user-defined validators on the builder.
func (uc *UserCreate) check() error {
if _, ok := uc.mutation.Age(); !ok {
return &ValidationError{Name: "age", err: errors.New("ent: missing required field \"age\"")}
}
@@ -131,8 +144,7 @@ func (uc *UserCreate) preSave() error {
}
}
if _, ok := uc.mutation.Name(); !ok {
v := user.DefaultName
uc.mutation.SetName(v)
return &ValidationError{Name: "name", err: errors.New("ent: missing required field \"name\"")}
}
return nil
}
@@ -232,14 +244,15 @@ 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) {
if err := builder.preSave(); err != nil {
return nil, err
}
mutation, ok := m.(*UserMutation)
if !ok {
return nil, fmt.Errorf("unexpected mutation type %T", m)
}
if err := builder.check(); err != nil {
return nil, err
}
builder.mutation = mutation
nodes[i], specs[i] = builder.createSpec()
var err error

View File

@@ -139,17 +139,14 @@ func (uu *UserUpdate) RemoveGroups(g ...*Group) *UserUpdate {
// Save executes the query and returns the number of rows/vertices matched by this operation.
func (uu *UserUpdate) Save(ctx context.Context) (int, error) {
if v, ok := uu.mutation.Age(); ok {
if err := user.AgeValidator(v); err != nil {
return 0, &ValidationError{Name: "age", err: fmt.Errorf("ent: validator failed for field \"age\": %w", err)}
}
}
var (
err error
affected int
)
if len(uu.hooks) == 0 {
if err = uu.check(); err != nil {
return 0, err
}
affected, err = uu.sqlSave(ctx)
} else {
var mut Mutator = MutateFunc(func(ctx context.Context, m Mutation) (Value, error) {
@@ -157,6 +154,9 @@ func (uu *UserUpdate) Save(ctx context.Context) (int, error) {
if !ok {
return nil, fmt.Errorf("unexpected mutation type %T", m)
}
if err = uu.check(); err != nil {
return 0, err
}
uu.mutation = mutation
affected, err = uu.sqlSave(ctx)
mutation.done = true
@@ -194,6 +194,16 @@ func (uu *UserUpdate) ExecX(ctx context.Context) {
}
}
// check runs all checks and user-defined validators on the builder.
func (uu *UserUpdate) check() error {
if v, ok := uu.mutation.Age(); ok {
if err := user.AgeValidator(v); err != nil {
return &ValidationError{Name: "age", err: fmt.Errorf("ent: validator failed for field \"age\": %w", err)}
}
}
return nil
}
func (uu *UserUpdate) sqlSave(ctx context.Context) (n int, err error) {
_spec := &sqlgraph.UpdateSpec{
Node: &sqlgraph.NodeSpec{
@@ -465,17 +475,14 @@ func (uuo *UserUpdateOne) RemoveGroups(g ...*Group) *UserUpdateOne {
// Save executes the query and returns the updated entity.
func (uuo *UserUpdateOne) Save(ctx context.Context) (*User, error) {
if v, ok := uuo.mutation.Age(); ok {
if err := user.AgeValidator(v); err != nil {
return nil, &ValidationError{Name: "age", err: fmt.Errorf("ent: validator failed for field \"age\": %w", err)}
}
}
var (
err error
node *User
)
if len(uuo.hooks) == 0 {
if err = uuo.check(); err != nil {
return nil, err
}
node, err = uuo.sqlSave(ctx)
} else {
var mut Mutator = MutateFunc(func(ctx context.Context, m Mutation) (Value, error) {
@@ -483,6 +490,9 @@ func (uuo *UserUpdateOne) Save(ctx context.Context) (*User, error) {
if !ok {
return nil, fmt.Errorf("unexpected mutation type %T", m)
}
if err = uuo.check(); err != nil {
return nil, err
}
uuo.mutation = mutation
node, err = uuo.sqlSave(ctx)
mutation.done = true
@@ -520,6 +530,16 @@ func (uuo *UserUpdateOne) ExecX(ctx context.Context) {
}
}
// check runs all checks and user-defined validators on the builder.
func (uuo *UserUpdateOne) check() error {
if v, ok := uuo.mutation.Age(); ok {
if err := user.AgeValidator(v); err != nil {
return &ValidationError{Name: "age", err: fmt.Errorf("ent: validator failed for field \"age\": %w", err)}
}
}
return nil
}
func (uuo *UserUpdateOne) sqlSave(ctx context.Context) (u *User, err error) {
_spec := &sqlgraph.UpdateSpec{
Node: &sqlgraph.NodeSpec{