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

@@ -8,6 +8,7 @@ package ent
import (
"context"
"errors"
"fmt"
"github.com/facebook/ent/dialect/sql/sqlgraph"
@@ -76,14 +77,15 @@ func (bc *BlobCreate) Mutation() *BlobMutation {
// Save creates the Blob in the database.
func (bc *BlobCreate) Save(ctx context.Context) (*Blob, error) {
if err := bc.preSave(); err != nil {
return nil, err
}
var (
err error
node *Blob
)
bc.defaults()
if len(bc.hooks) == 0 {
if err = bc.check(); err != nil {
return nil, err
}
node, err = bc.sqlSave(ctx)
} else {
var mut Mutator = MutateFunc(func(ctx context.Context, m Mutation) (Value, error) {
@@ -91,6 +93,9 @@ func (bc *BlobCreate) Save(ctx context.Context) (*Blob, error) {
if !ok {
return nil, fmt.Errorf("unexpected mutation type %T", m)
}
if err = bc.check(); err != nil {
return nil, err
}
bc.mutation = mutation
node, err = bc.sqlSave(ctx)
mutation.done = true
@@ -115,7 +120,8 @@ func (bc *BlobCreate) SaveX(ctx context.Context) *Blob {
return v
}
func (bc *BlobCreate) preSave() error {
// defaults sets the default values of the builder before save.
func (bc *BlobCreate) defaults() {
if _, ok := bc.mutation.UUID(); !ok {
v := blob.DefaultUUID()
bc.mutation.SetUUID(v)
@@ -124,6 +130,13 @@ func (bc *BlobCreate) preSave() error {
v := blob.DefaultID()
bc.mutation.SetID(v)
}
}
// check runs all checks and user-defined validators on the builder.
func (bc *BlobCreate) check() error {
if _, ok := bc.mutation.UUID(); !ok {
return &ValidationError{Name: "uuid", err: errors.New("ent: missing required field \"uuid\"")}
}
return nil
}
@@ -216,14 +229,15 @@ func (bcb *BlobCreateBulk) Save(ctx context.Context) ([]*Blob, error) {
for i := range bcb.builders {
func(i int, root context.Context) {
builder := bcb.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.(*BlobMutation)
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

@@ -106,7 +106,6 @@ func (bu *BlobUpdate) RemoveLinks(b ...*Blob) *BlobUpdate {
// Save executes the query and returns the number of rows/vertices matched by this operation.
func (bu *BlobUpdate) Save(ctx context.Context) (int, error) {
var (
err error
affected int
@@ -362,7 +361,6 @@ func (buo *BlobUpdateOne) RemoveLinks(b ...*Blob) *BlobUpdateOne {
// Save executes the query and returns the updated entity.
func (buo *BlobUpdateOne) Save(ctx context.Context) (*Blob, error) {
var (
err error
node *Blob

View File

@@ -90,14 +90,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) {
@@ -105,6 +105,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
@@ -129,7 +132,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 v, ok := cc.mutation.BeforeID(); ok {
if err := car.BeforeIDValidator(v); err != nil {
return &ValidationError{Name: "before_id", err: fmt.Errorf("ent: validator failed for field \"before_id\": %w", err)}
@@ -242,13 +246,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

@@ -124,22 +124,14 @@ 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) {
if v, ok := cu.mutation.BeforeID(); ok {
if err := car.BeforeIDValidator(v); err != nil {
return 0, &ValidationError{Name: "before_id", err: fmt.Errorf("ent: validator failed for field \"before_id\": %w", err)}
}
}
if v, ok := cu.mutation.AfterID(); ok {
if err := car.AfterIDValidator(v); err != nil {
return 0, &ValidationError{Name: "after_id", err: fmt.Errorf("ent: validator failed for field \"after_id\": %w", err)}
}
}
var (
err error
affected int
)
if len(cu.hooks) == 0 {
if err = cu.check(); err != nil {
return 0, err
}
affected, err = cu.sqlSave(ctx)
} else {
var mut Mutator = MutateFunc(func(ctx context.Context, m Mutation) (Value, error) {
@@ -147,6 +139,9 @@ func (cu *CarUpdate) Save(ctx context.Context) (int, error) {
if !ok {
return nil, fmt.Errorf("unexpected mutation type %T", m)
}
if err = cu.check(); err != nil {
return 0, err
}
cu.mutation = mutation
affected, err = cu.sqlSave(ctx)
mutation.done = true
@@ -184,6 +179,21 @@ func (cu *CarUpdate) ExecX(ctx context.Context) {
}
}
// check runs all checks and user-defined validators on the builder.
func (cu *CarUpdate) check() error {
if v, ok := cu.mutation.BeforeID(); ok {
if err := car.BeforeIDValidator(v); err != nil {
return &ValidationError{Name: "before_id", err: fmt.Errorf("ent: validator failed for field \"before_id\": %w", err)}
}
}
if v, ok := cu.mutation.AfterID(); ok {
if err := car.AfterIDValidator(v); err != nil {
return &ValidationError{Name: "after_id", err: fmt.Errorf("ent: validator failed for field \"after_id\": %w", err)}
}
}
return nil
}
func (cu *CarUpdate) sqlSave(ctx context.Context) (n int, err error) {
_spec := &sqlgraph.UpdateSpec{
Node: &sqlgraph.NodeSpec{
@@ -394,22 +404,14 @@ func (cuo *CarUpdateOne) ClearOwner() *CarUpdateOne {
// Save executes the query and returns the updated entity.
func (cuo *CarUpdateOne) Save(ctx context.Context) (*Car, error) {
if v, ok := cuo.mutation.BeforeID(); ok {
if err := car.BeforeIDValidator(v); err != nil {
return nil, &ValidationError{Name: "before_id", err: fmt.Errorf("ent: validator failed for field \"before_id\": %w", err)}
}
}
if v, ok := cuo.mutation.AfterID(); ok {
if err := car.AfterIDValidator(v); err != nil {
return nil, &ValidationError{Name: "after_id", err: fmt.Errorf("ent: validator failed for field \"after_id\": %w", err)}
}
}
var (
err error
node *Car
)
if len(cuo.hooks) == 0 {
if err = cuo.check(); err != nil {
return nil, err
}
node, err = cuo.sqlSave(ctx)
} else {
var mut Mutator = MutateFunc(func(ctx context.Context, m Mutation) (Value, error) {
@@ -417,6 +419,9 @@ func (cuo *CarUpdateOne) Save(ctx context.Context) (*Car, error) {
if !ok {
return nil, fmt.Errorf("unexpected mutation type %T", m)
}
if err = cuo.check(); err != nil {
return nil, err
}
cuo.mutation = mutation
node, err = cuo.sqlSave(ctx)
mutation.done = true
@@ -454,6 +459,21 @@ func (cuo *CarUpdateOne) ExecX(ctx context.Context) {
}
}
// check runs all checks and user-defined validators on the builder.
func (cuo *CarUpdateOne) check() error {
if v, ok := cuo.mutation.BeforeID(); ok {
if err := car.BeforeIDValidator(v); err != nil {
return &ValidationError{Name: "before_id", err: fmt.Errorf("ent: validator failed for field \"before_id\": %w", err)}
}
}
if v, ok := cuo.mutation.AfterID(); ok {
if err := car.AfterIDValidator(v); err != nil {
return &ValidationError{Name: "after_id", err: fmt.Errorf("ent: validator failed for field \"after_id\": %w", err)}
}
}
return nil
}
func (cuo *CarUpdateOne) sqlSave(ctx context.Context) (c *Car, err error) {
_spec := &sqlgraph.UpdateSpec{
Node: &sqlgraph.NodeSpec{

View File

@@ -51,14 +51,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) {
@@ -66,6 +66,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
@@ -90,7 +93,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 {
return nil
}
@@ -161,13 +165,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

@@ -75,7 +75,6 @@ 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) {
var (
err error
affected int
@@ -258,7 +257,6 @@ 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) {
var (
err error
node *Group

View File

@@ -105,14 +105,14 @@ func (pc *PetCreate) Mutation() *PetMutation {
// Save creates the Pet in the database.
func (pc *PetCreate) Save(ctx context.Context) (*Pet, error) {
if err := pc.preSave(); err != nil {
return nil, err
}
var (
err error
node *Pet
)
if len(pc.hooks) == 0 {
if err = pc.check(); err != nil {
return nil, err
}
node, err = pc.sqlSave(ctx)
} else {
var mut Mutator = MutateFunc(func(ctx context.Context, m Mutation) (Value, error) {
@@ -120,6 +120,9 @@ func (pc *PetCreate) Save(ctx context.Context) (*Pet, error) {
if !ok {
return nil, fmt.Errorf("unexpected mutation type %T", m)
}
if err = pc.check(); err != nil {
return nil, err
}
pc.mutation = mutation
node, err = pc.sqlSave(ctx)
mutation.done = true
@@ -144,7 +147,8 @@ func (pc *PetCreate) SaveX(ctx context.Context) *Pet {
return v
}
func (pc *PetCreate) preSave() error {
// check runs all checks and user-defined validators on the builder.
func (pc *PetCreate) check() error {
if v, ok := pc.mutation.ID(); ok {
if err := pet.IDValidator(v); err != nil {
return &ValidationError{Name: "id", err: fmt.Errorf("ent: validator failed for field \"id\": %w", err)}
@@ -273,13 +277,13 @@ func (pcb *PetCreateBulk) Save(ctx context.Context) ([]*Pet, error) {
func(i int, root context.Context) {
builder := pcb.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.(*PetMutation)
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

@@ -162,7 +162,6 @@ func (pu *PetUpdate) ClearBestFriend() *PetUpdate {
// Save executes the query and returns the number of rows/vertices matched by this operation.
func (pu *PetUpdate) Save(ctx context.Context) (int, error) {
var (
err error
affected int
@@ -555,7 +554,6 @@ func (puo *PetUpdateOne) ClearBestFriend() *PetUpdateOne {
// Save executes the query and returns the updated entity.
func (puo *PetUpdateOne) Save(ctx context.Context) (*Pet, error) {
var (
err error
node *Pet

View File

@@ -101,14 +101,14 @@ 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
)
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) {
@@ -116,6 +116,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
@@ -140,7 +143,8 @@ func (uc *UserCreate) SaveX(ctx context.Context) *User {
return v
}
func (uc *UserCreate) preSave() error {
// check runs all checks and user-defined validators on the builder.
func (uc *UserCreate) check() error {
return nil
}
@@ -268,13 +272,13 @@ func (ucb *UserCreateBulk) Save(ctx context.Context) ([]*User, error) {
func(i int, root context.Context) {
builder := ucb.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.(*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

@@ -173,7 +173,6 @@ func (uu *UserUpdate) RemovePets(p ...*Pet) *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) {
var (
err error
affected int
@@ -596,7 +595,6 @@ func (uuo *UserUpdateOne) RemovePets(p ...*Pet) *UserUpdateOne {
// Save executes the query and returns the updated entity.
func (uuo *UserUpdateOne) Save(ctx context.Context) (*User, error) {
var (
err error
node *User