// Code generated by ent, DO NOT EDIT.

package ent

import (
	"context"
	"errors"
	"fmt"
	"time"
	"wechat-api/ent/custom_types"
	"wechat-api/ent/messagerecords"
	"wechat-api/ent/sopnode"
	"wechat-api/ent/sopstage"
	"wechat-api/ent/soptask"

	"entgo.io/ent/dialect/sql"
	"entgo.io/ent/dialect/sql/sqlgraph"
	"entgo.io/ent/schema/field"
)

// SopStageCreate is the builder for creating a SopStage entity.
type SopStageCreate struct {
	config
	mutation *SopStageMutation
	hooks    []Hook
	conflict []sql.ConflictOption
}

// SetCreatedAt sets the "created_at" field.
func (ssc *SopStageCreate) SetCreatedAt(t time.Time) *SopStageCreate {
	ssc.mutation.SetCreatedAt(t)
	return ssc
}

// SetNillableCreatedAt sets the "created_at" field if the given value is not nil.
func (ssc *SopStageCreate) SetNillableCreatedAt(t *time.Time) *SopStageCreate {
	if t != nil {
		ssc.SetCreatedAt(*t)
	}
	return ssc
}

// SetUpdatedAt sets the "updated_at" field.
func (ssc *SopStageCreate) SetUpdatedAt(t time.Time) *SopStageCreate {
	ssc.mutation.SetUpdatedAt(t)
	return ssc
}

// SetNillableUpdatedAt sets the "updated_at" field if the given value is not nil.
func (ssc *SopStageCreate) SetNillableUpdatedAt(t *time.Time) *SopStageCreate {
	if t != nil {
		ssc.SetUpdatedAt(*t)
	}
	return ssc
}

// SetStatus sets the "status" field.
func (ssc *SopStageCreate) SetStatus(u uint8) *SopStageCreate {
	ssc.mutation.SetStatus(u)
	return ssc
}

// SetNillableStatus sets the "status" field if the given value is not nil.
func (ssc *SopStageCreate) SetNillableStatus(u *uint8) *SopStageCreate {
	if u != nil {
		ssc.SetStatus(*u)
	}
	return ssc
}

// SetDeletedAt sets the "deleted_at" field.
func (ssc *SopStageCreate) SetDeletedAt(t time.Time) *SopStageCreate {
	ssc.mutation.SetDeletedAt(t)
	return ssc
}

// SetNillableDeletedAt sets the "deleted_at" field if the given value is not nil.
func (ssc *SopStageCreate) SetNillableDeletedAt(t *time.Time) *SopStageCreate {
	if t != nil {
		ssc.SetDeletedAt(*t)
	}
	return ssc
}

// SetTaskID sets the "task_id" field.
func (ssc *SopStageCreate) SetTaskID(u uint64) *SopStageCreate {
	ssc.mutation.SetTaskID(u)
	return ssc
}

// SetName sets the "name" field.
func (ssc *SopStageCreate) SetName(s string) *SopStageCreate {
	ssc.mutation.SetName(s)
	return ssc
}

// SetNillableName sets the "name" field if the given value is not nil.
func (ssc *SopStageCreate) SetNillableName(s *string) *SopStageCreate {
	if s != nil {
		ssc.SetName(*s)
	}
	return ssc
}

// SetConditionType sets the "condition_type" field.
func (ssc *SopStageCreate) SetConditionType(i int) *SopStageCreate {
	ssc.mutation.SetConditionType(i)
	return ssc
}

// SetNillableConditionType sets the "condition_type" field if the given value is not nil.
func (ssc *SopStageCreate) SetNillableConditionType(i *int) *SopStageCreate {
	if i != nil {
		ssc.SetConditionType(*i)
	}
	return ssc
}

// SetConditionOperator sets the "condition_operator" field.
func (ssc *SopStageCreate) SetConditionOperator(i int) *SopStageCreate {
	ssc.mutation.SetConditionOperator(i)
	return ssc
}

// SetNillableConditionOperator sets the "condition_operator" field if the given value is not nil.
func (ssc *SopStageCreate) SetNillableConditionOperator(i *int) *SopStageCreate {
	if i != nil {
		ssc.SetConditionOperator(*i)
	}
	return ssc
}

// SetConditionList sets the "condition_list" field.
func (ssc *SopStageCreate) SetConditionList(ct []custom_types.Condition) *SopStageCreate {
	ssc.mutation.SetConditionList(ct)
	return ssc
}

// SetActionMessage sets the "action_message" field.
func (ssc *SopStageCreate) SetActionMessage(ct []custom_types.Action) *SopStageCreate {
	ssc.mutation.SetActionMessage(ct)
	return ssc
}

// SetActionLabel sets the "action_label" field.
func (ssc *SopStageCreate) SetActionLabel(u []uint64) *SopStageCreate {
	ssc.mutation.SetActionLabel(u)
	return ssc
}

// SetIndexSort sets the "index_sort" field.
func (ssc *SopStageCreate) SetIndexSort(i int) *SopStageCreate {
	ssc.mutation.SetIndexSort(i)
	return ssc
}

// SetNillableIndexSort sets the "index_sort" field if the given value is not nil.
func (ssc *SopStageCreate) SetNillableIndexSort(i *int) *SopStageCreate {
	if i != nil {
		ssc.SetIndexSort(*i)
	}
	return ssc
}

// SetID sets the "id" field.
func (ssc *SopStageCreate) SetID(u uint64) *SopStageCreate {
	ssc.mutation.SetID(u)
	return ssc
}

// SetSopTaskID sets the "sop_task" edge to the SopTask entity by ID.
func (ssc *SopStageCreate) SetSopTaskID(id uint64) *SopStageCreate {
	ssc.mutation.SetSopTaskID(id)
	return ssc
}

// SetSopTask sets the "sop_task" edge to the SopTask entity.
func (ssc *SopStageCreate) SetSopTask(s *SopTask) *SopStageCreate {
	return ssc.SetSopTaskID(s.ID)
}

// AddStageNodeIDs adds the "stage_nodes" edge to the SopNode entity by IDs.
func (ssc *SopStageCreate) AddStageNodeIDs(ids ...uint64) *SopStageCreate {
	ssc.mutation.AddStageNodeIDs(ids...)
	return ssc
}

// AddStageNodes adds the "stage_nodes" edges to the SopNode entity.
func (ssc *SopStageCreate) AddStageNodes(s ...*SopNode) *SopStageCreate {
	ids := make([]uint64, len(s))
	for i := range s {
		ids[i] = s[i].ID
	}
	return ssc.AddStageNodeIDs(ids...)
}

// AddStageMessageIDs adds the "stage_messages" edge to the MessageRecords entity by IDs.
func (ssc *SopStageCreate) AddStageMessageIDs(ids ...uint64) *SopStageCreate {
	ssc.mutation.AddStageMessageIDs(ids...)
	return ssc
}

// AddStageMessages adds the "stage_messages" edges to the MessageRecords entity.
func (ssc *SopStageCreate) AddStageMessages(m ...*MessageRecords) *SopStageCreate {
	ids := make([]uint64, len(m))
	for i := range m {
		ids[i] = m[i].ID
	}
	return ssc.AddStageMessageIDs(ids...)
}

// Mutation returns the SopStageMutation object of the builder.
func (ssc *SopStageCreate) Mutation() *SopStageMutation {
	return ssc.mutation
}

// Save creates the SopStage in the database.
func (ssc *SopStageCreate) Save(ctx context.Context) (*SopStage, error) {
	if err := ssc.defaults(); err != nil {
		return nil, err
	}
	return withHooks(ctx, ssc.sqlSave, ssc.mutation, ssc.hooks)
}

// SaveX calls Save and panics if Save returns an error.
func (ssc *SopStageCreate) SaveX(ctx context.Context) *SopStage {
	v, err := ssc.Save(ctx)
	if err != nil {
		panic(err)
	}
	return v
}

// Exec executes the query.
func (ssc *SopStageCreate) Exec(ctx context.Context) error {
	_, err := ssc.Save(ctx)
	return err
}

// ExecX is like Exec, but panics if an error occurs.
func (ssc *SopStageCreate) ExecX(ctx context.Context) {
	if err := ssc.Exec(ctx); err != nil {
		panic(err)
	}
}

// defaults sets the default values of the builder before save.
func (ssc *SopStageCreate) defaults() error {
	if _, ok := ssc.mutation.CreatedAt(); !ok {
		if sopstage.DefaultCreatedAt == nil {
			return fmt.Errorf("ent: uninitialized sopstage.DefaultCreatedAt (forgotten import ent/runtime?)")
		}
		v := sopstage.DefaultCreatedAt()
		ssc.mutation.SetCreatedAt(v)
	}
	if _, ok := ssc.mutation.UpdatedAt(); !ok {
		if sopstage.DefaultUpdatedAt == nil {
			return fmt.Errorf("ent: uninitialized sopstage.DefaultUpdatedAt (forgotten import ent/runtime?)")
		}
		v := sopstage.DefaultUpdatedAt()
		ssc.mutation.SetUpdatedAt(v)
	}
	if _, ok := ssc.mutation.Status(); !ok {
		v := sopstage.DefaultStatus
		ssc.mutation.SetStatus(v)
	}
	if _, ok := ssc.mutation.Name(); !ok {
		v := sopstage.DefaultName
		ssc.mutation.SetName(v)
	}
	if _, ok := ssc.mutation.ConditionType(); !ok {
		v := sopstage.DefaultConditionType
		ssc.mutation.SetConditionType(v)
	}
	if _, ok := ssc.mutation.ConditionOperator(); !ok {
		v := sopstage.DefaultConditionOperator
		ssc.mutation.SetConditionOperator(v)
	}
	if _, ok := ssc.mutation.IndexSort(); !ok {
		v := sopstage.DefaultIndexSort
		ssc.mutation.SetIndexSort(v)
	}
	return nil
}

// check runs all checks and user-defined validators on the builder.
func (ssc *SopStageCreate) check() error {
	if _, ok := ssc.mutation.CreatedAt(); !ok {
		return &ValidationError{Name: "created_at", err: errors.New(`ent: missing required field "SopStage.created_at"`)}
	}
	if _, ok := ssc.mutation.UpdatedAt(); !ok {
		return &ValidationError{Name: "updated_at", err: errors.New(`ent: missing required field "SopStage.updated_at"`)}
	}
	if _, ok := ssc.mutation.TaskID(); !ok {
		return &ValidationError{Name: "task_id", err: errors.New(`ent: missing required field "SopStage.task_id"`)}
	}
	if _, ok := ssc.mutation.Name(); !ok {
		return &ValidationError{Name: "name", err: errors.New(`ent: missing required field "SopStage.name"`)}
	}
	if _, ok := ssc.mutation.ConditionType(); !ok {
		return &ValidationError{Name: "condition_type", err: errors.New(`ent: missing required field "SopStage.condition_type"`)}
	}
	if _, ok := ssc.mutation.ConditionOperator(); !ok {
		return &ValidationError{Name: "condition_operator", err: errors.New(`ent: missing required field "SopStage.condition_operator"`)}
	}
	if _, ok := ssc.mutation.ConditionList(); !ok {
		return &ValidationError{Name: "condition_list", err: errors.New(`ent: missing required field "SopStage.condition_list"`)}
	}
	if _, ok := ssc.mutation.SopTaskID(); !ok {
		return &ValidationError{Name: "sop_task", err: errors.New(`ent: missing required edge "SopStage.sop_task"`)}
	}
	return nil
}

func (ssc *SopStageCreate) sqlSave(ctx context.Context) (*SopStage, error) {
	if err := ssc.check(); err != nil {
		return nil, err
	}
	_node, _spec := ssc.createSpec()
	if err := sqlgraph.CreateNode(ctx, ssc.driver, _spec); err != nil {
		if sqlgraph.IsConstraintError(err) {
			err = &ConstraintError{msg: err.Error(), wrap: err}
		}
		return nil, err
	}
	if _spec.ID.Value != _node.ID {
		id := _spec.ID.Value.(int64)
		_node.ID = uint64(id)
	}
	ssc.mutation.id = &_node.ID
	ssc.mutation.done = true
	return _node, nil
}

func (ssc *SopStageCreate) createSpec() (*SopStage, *sqlgraph.CreateSpec) {
	var (
		_node = &SopStage{config: ssc.config}
		_spec = sqlgraph.NewCreateSpec(sopstage.Table, sqlgraph.NewFieldSpec(sopstage.FieldID, field.TypeUint64))
	)
	_spec.OnConflict = ssc.conflict
	if id, ok := ssc.mutation.ID(); ok {
		_node.ID = id
		_spec.ID.Value = id
	}
	if value, ok := ssc.mutation.CreatedAt(); ok {
		_spec.SetField(sopstage.FieldCreatedAt, field.TypeTime, value)
		_node.CreatedAt = value
	}
	if value, ok := ssc.mutation.UpdatedAt(); ok {
		_spec.SetField(sopstage.FieldUpdatedAt, field.TypeTime, value)
		_node.UpdatedAt = value
	}
	if value, ok := ssc.mutation.Status(); ok {
		_spec.SetField(sopstage.FieldStatus, field.TypeUint8, value)
		_node.Status = value
	}
	if value, ok := ssc.mutation.DeletedAt(); ok {
		_spec.SetField(sopstage.FieldDeletedAt, field.TypeTime, value)
		_node.DeletedAt = value
	}
	if value, ok := ssc.mutation.Name(); ok {
		_spec.SetField(sopstage.FieldName, field.TypeString, value)
		_node.Name = value
	}
	if value, ok := ssc.mutation.ConditionType(); ok {
		_spec.SetField(sopstage.FieldConditionType, field.TypeInt, value)
		_node.ConditionType = value
	}
	if value, ok := ssc.mutation.ConditionOperator(); ok {
		_spec.SetField(sopstage.FieldConditionOperator, field.TypeInt, value)
		_node.ConditionOperator = value
	}
	if value, ok := ssc.mutation.ConditionList(); ok {
		_spec.SetField(sopstage.FieldConditionList, field.TypeJSON, value)
		_node.ConditionList = value
	}
	if value, ok := ssc.mutation.ActionMessage(); ok {
		_spec.SetField(sopstage.FieldActionMessage, field.TypeJSON, value)
		_node.ActionMessage = value
	}
	if value, ok := ssc.mutation.ActionLabel(); ok {
		_spec.SetField(sopstage.FieldActionLabel, field.TypeJSON, value)
		_node.ActionLabel = value
	}
	if value, ok := ssc.mutation.IndexSort(); ok {
		_spec.SetField(sopstage.FieldIndexSort, field.TypeInt, value)
		_node.IndexSort = value
	}
	if nodes := ssc.mutation.SopTaskIDs(); len(nodes) > 0 {
		edge := &sqlgraph.EdgeSpec{
			Rel:     sqlgraph.M2O,
			Inverse: true,
			Table:   sopstage.SopTaskTable,
			Columns: []string{sopstage.SopTaskColumn},
			Bidi:    false,
			Target: &sqlgraph.EdgeTarget{
				IDSpec: sqlgraph.NewFieldSpec(soptask.FieldID, field.TypeUint64),
			},
		}
		for _, k := range nodes {
			edge.Target.Nodes = append(edge.Target.Nodes, k)
		}
		_node.TaskID = nodes[0]
		_spec.Edges = append(_spec.Edges, edge)
	}
	if nodes := ssc.mutation.StageNodesIDs(); len(nodes) > 0 {
		edge := &sqlgraph.EdgeSpec{
			Rel:     sqlgraph.O2M,
			Inverse: false,
			Table:   sopstage.StageNodesTable,
			Columns: []string{sopstage.StageNodesColumn},
			Bidi:    false,
			Target: &sqlgraph.EdgeTarget{
				IDSpec: sqlgraph.NewFieldSpec(sopnode.FieldID, field.TypeUint64),
			},
		}
		for _, k := range nodes {
			edge.Target.Nodes = append(edge.Target.Nodes, k)
		}
		_spec.Edges = append(_spec.Edges, edge)
	}
	if nodes := ssc.mutation.StageMessagesIDs(); len(nodes) > 0 {
		edge := &sqlgraph.EdgeSpec{
			Rel:     sqlgraph.O2M,
			Inverse: false,
			Table:   sopstage.StageMessagesTable,
			Columns: []string{sopstage.StageMessagesColumn},
			Bidi:    false,
			Target: &sqlgraph.EdgeTarget{
				IDSpec: sqlgraph.NewFieldSpec(messagerecords.FieldID, field.TypeUint64),
			},
		}
		for _, k := range nodes {
			edge.Target.Nodes = append(edge.Target.Nodes, k)
		}
		_spec.Edges = append(_spec.Edges, edge)
	}
	return _node, _spec
}

// OnConflict allows configuring the `ON CONFLICT` / `ON DUPLICATE KEY` clause
// of the `INSERT` statement. For example:
//
//	client.SopStage.Create().
//		SetCreatedAt(v).
//		OnConflict(
//			// Update the row with the new values
//			// the was proposed for insertion.
//			sql.ResolveWithNewValues(),
//		).
//		// Override some of the fields with custom
//		// update values.
//		Update(func(u *ent.SopStageUpsert) {
//			SetCreatedAt(v+v).
//		}).
//		Exec(ctx)
func (ssc *SopStageCreate) OnConflict(opts ...sql.ConflictOption) *SopStageUpsertOne {
	ssc.conflict = opts
	return &SopStageUpsertOne{
		create: ssc,
	}
}

// OnConflictColumns calls `OnConflict` and configures the columns
// as conflict target. Using this option is equivalent to using:
//
//	client.SopStage.Create().
//		OnConflict(sql.ConflictColumns(columns...)).
//		Exec(ctx)
func (ssc *SopStageCreate) OnConflictColumns(columns ...string) *SopStageUpsertOne {
	ssc.conflict = append(ssc.conflict, sql.ConflictColumns(columns...))
	return &SopStageUpsertOne{
		create: ssc,
	}
}

type (
	// SopStageUpsertOne is the builder for "upsert"-ing
	//  one SopStage node.
	SopStageUpsertOne struct {
		create *SopStageCreate
	}

	// SopStageUpsert is the "OnConflict" setter.
	SopStageUpsert struct {
		*sql.UpdateSet
	}
)

// SetUpdatedAt sets the "updated_at" field.
func (u *SopStageUpsert) SetUpdatedAt(v time.Time) *SopStageUpsert {
	u.Set(sopstage.FieldUpdatedAt, v)
	return u
}

// UpdateUpdatedAt sets the "updated_at" field to the value that was provided on create.
func (u *SopStageUpsert) UpdateUpdatedAt() *SopStageUpsert {
	u.SetExcluded(sopstage.FieldUpdatedAt)
	return u
}

// SetStatus sets the "status" field.
func (u *SopStageUpsert) SetStatus(v uint8) *SopStageUpsert {
	u.Set(sopstage.FieldStatus, v)
	return u
}

// UpdateStatus sets the "status" field to the value that was provided on create.
func (u *SopStageUpsert) UpdateStatus() *SopStageUpsert {
	u.SetExcluded(sopstage.FieldStatus)
	return u
}

// AddStatus adds v to the "status" field.
func (u *SopStageUpsert) AddStatus(v uint8) *SopStageUpsert {
	u.Add(sopstage.FieldStatus, v)
	return u
}

// ClearStatus clears the value of the "status" field.
func (u *SopStageUpsert) ClearStatus() *SopStageUpsert {
	u.SetNull(sopstage.FieldStatus)
	return u
}

// SetDeletedAt sets the "deleted_at" field.
func (u *SopStageUpsert) SetDeletedAt(v time.Time) *SopStageUpsert {
	u.Set(sopstage.FieldDeletedAt, v)
	return u
}

// UpdateDeletedAt sets the "deleted_at" field to the value that was provided on create.
func (u *SopStageUpsert) UpdateDeletedAt() *SopStageUpsert {
	u.SetExcluded(sopstage.FieldDeletedAt)
	return u
}

// ClearDeletedAt clears the value of the "deleted_at" field.
func (u *SopStageUpsert) ClearDeletedAt() *SopStageUpsert {
	u.SetNull(sopstage.FieldDeletedAt)
	return u
}

// SetTaskID sets the "task_id" field.
func (u *SopStageUpsert) SetTaskID(v uint64) *SopStageUpsert {
	u.Set(sopstage.FieldTaskID, v)
	return u
}

// UpdateTaskID sets the "task_id" field to the value that was provided on create.
func (u *SopStageUpsert) UpdateTaskID() *SopStageUpsert {
	u.SetExcluded(sopstage.FieldTaskID)
	return u
}

// SetName sets the "name" field.
func (u *SopStageUpsert) SetName(v string) *SopStageUpsert {
	u.Set(sopstage.FieldName, v)
	return u
}

// UpdateName sets the "name" field to the value that was provided on create.
func (u *SopStageUpsert) UpdateName() *SopStageUpsert {
	u.SetExcluded(sopstage.FieldName)
	return u
}

// SetConditionType sets the "condition_type" field.
func (u *SopStageUpsert) SetConditionType(v int) *SopStageUpsert {
	u.Set(sopstage.FieldConditionType, v)
	return u
}

// UpdateConditionType sets the "condition_type" field to the value that was provided on create.
func (u *SopStageUpsert) UpdateConditionType() *SopStageUpsert {
	u.SetExcluded(sopstage.FieldConditionType)
	return u
}

// AddConditionType adds v to the "condition_type" field.
func (u *SopStageUpsert) AddConditionType(v int) *SopStageUpsert {
	u.Add(sopstage.FieldConditionType, v)
	return u
}

// SetConditionOperator sets the "condition_operator" field.
func (u *SopStageUpsert) SetConditionOperator(v int) *SopStageUpsert {
	u.Set(sopstage.FieldConditionOperator, v)
	return u
}

// UpdateConditionOperator sets the "condition_operator" field to the value that was provided on create.
func (u *SopStageUpsert) UpdateConditionOperator() *SopStageUpsert {
	u.SetExcluded(sopstage.FieldConditionOperator)
	return u
}

// AddConditionOperator adds v to the "condition_operator" field.
func (u *SopStageUpsert) AddConditionOperator(v int) *SopStageUpsert {
	u.Add(sopstage.FieldConditionOperator, v)
	return u
}

// SetConditionList sets the "condition_list" field.
func (u *SopStageUpsert) SetConditionList(v []custom_types.Condition) *SopStageUpsert {
	u.Set(sopstage.FieldConditionList, v)
	return u
}

// UpdateConditionList sets the "condition_list" field to the value that was provided on create.
func (u *SopStageUpsert) UpdateConditionList() *SopStageUpsert {
	u.SetExcluded(sopstage.FieldConditionList)
	return u
}

// SetActionMessage sets the "action_message" field.
func (u *SopStageUpsert) SetActionMessage(v []custom_types.Action) *SopStageUpsert {
	u.Set(sopstage.FieldActionMessage, v)
	return u
}

// UpdateActionMessage sets the "action_message" field to the value that was provided on create.
func (u *SopStageUpsert) UpdateActionMessage() *SopStageUpsert {
	u.SetExcluded(sopstage.FieldActionMessage)
	return u
}

// ClearActionMessage clears the value of the "action_message" field.
func (u *SopStageUpsert) ClearActionMessage() *SopStageUpsert {
	u.SetNull(sopstage.FieldActionMessage)
	return u
}

// SetActionLabel sets the "action_label" field.
func (u *SopStageUpsert) SetActionLabel(v []uint64) *SopStageUpsert {
	u.Set(sopstage.FieldActionLabel, v)
	return u
}

// UpdateActionLabel sets the "action_label" field to the value that was provided on create.
func (u *SopStageUpsert) UpdateActionLabel() *SopStageUpsert {
	u.SetExcluded(sopstage.FieldActionLabel)
	return u
}

// ClearActionLabel clears the value of the "action_label" field.
func (u *SopStageUpsert) ClearActionLabel() *SopStageUpsert {
	u.SetNull(sopstage.FieldActionLabel)
	return u
}

// SetIndexSort sets the "index_sort" field.
func (u *SopStageUpsert) SetIndexSort(v int) *SopStageUpsert {
	u.Set(sopstage.FieldIndexSort, v)
	return u
}

// UpdateIndexSort sets the "index_sort" field to the value that was provided on create.
func (u *SopStageUpsert) UpdateIndexSort() *SopStageUpsert {
	u.SetExcluded(sopstage.FieldIndexSort)
	return u
}

// AddIndexSort adds v to the "index_sort" field.
func (u *SopStageUpsert) AddIndexSort(v int) *SopStageUpsert {
	u.Add(sopstage.FieldIndexSort, v)
	return u
}

// ClearIndexSort clears the value of the "index_sort" field.
func (u *SopStageUpsert) ClearIndexSort() *SopStageUpsert {
	u.SetNull(sopstage.FieldIndexSort)
	return u
}

// UpdateNewValues updates the mutable fields using the new values that were set on create except the ID field.
// Using this option is equivalent to using:
//
//	client.SopStage.Create().
//		OnConflict(
//			sql.ResolveWithNewValues(),
//			sql.ResolveWith(func(u *sql.UpdateSet) {
//				u.SetIgnore(sopstage.FieldID)
//			}),
//		).
//		Exec(ctx)
func (u *SopStageUpsertOne) UpdateNewValues() *SopStageUpsertOne {
	u.create.conflict = append(u.create.conflict, sql.ResolveWithNewValues())
	u.create.conflict = append(u.create.conflict, sql.ResolveWith(func(s *sql.UpdateSet) {
		if _, exists := u.create.mutation.ID(); exists {
			s.SetIgnore(sopstage.FieldID)
		}
		if _, exists := u.create.mutation.CreatedAt(); exists {
			s.SetIgnore(sopstage.FieldCreatedAt)
		}
	}))
	return u
}

// Ignore sets each column to itself in case of conflict.
// Using this option is equivalent to using:
//
//	client.SopStage.Create().
//	    OnConflict(sql.ResolveWithIgnore()).
//	    Exec(ctx)
func (u *SopStageUpsertOne) Ignore() *SopStageUpsertOne {
	u.create.conflict = append(u.create.conflict, sql.ResolveWithIgnore())
	return u
}

// DoNothing configures the conflict_action to `DO NOTHING`.
// Supported only by SQLite and PostgreSQL.
func (u *SopStageUpsertOne) DoNothing() *SopStageUpsertOne {
	u.create.conflict = append(u.create.conflict, sql.DoNothing())
	return u
}

// Update allows overriding fields `UPDATE` values. See the SopStageCreate.OnConflict
// documentation for more info.
func (u *SopStageUpsertOne) Update(set func(*SopStageUpsert)) *SopStageUpsertOne {
	u.create.conflict = append(u.create.conflict, sql.ResolveWith(func(update *sql.UpdateSet) {
		set(&SopStageUpsert{UpdateSet: update})
	}))
	return u
}

// SetUpdatedAt sets the "updated_at" field.
func (u *SopStageUpsertOne) SetUpdatedAt(v time.Time) *SopStageUpsertOne {
	return u.Update(func(s *SopStageUpsert) {
		s.SetUpdatedAt(v)
	})
}

// UpdateUpdatedAt sets the "updated_at" field to the value that was provided on create.
func (u *SopStageUpsertOne) UpdateUpdatedAt() *SopStageUpsertOne {
	return u.Update(func(s *SopStageUpsert) {
		s.UpdateUpdatedAt()
	})
}

// SetStatus sets the "status" field.
func (u *SopStageUpsertOne) SetStatus(v uint8) *SopStageUpsertOne {
	return u.Update(func(s *SopStageUpsert) {
		s.SetStatus(v)
	})
}

// AddStatus adds v to the "status" field.
func (u *SopStageUpsertOne) AddStatus(v uint8) *SopStageUpsertOne {
	return u.Update(func(s *SopStageUpsert) {
		s.AddStatus(v)
	})
}

// UpdateStatus sets the "status" field to the value that was provided on create.
func (u *SopStageUpsertOne) UpdateStatus() *SopStageUpsertOne {
	return u.Update(func(s *SopStageUpsert) {
		s.UpdateStatus()
	})
}

// ClearStatus clears the value of the "status" field.
func (u *SopStageUpsertOne) ClearStatus() *SopStageUpsertOne {
	return u.Update(func(s *SopStageUpsert) {
		s.ClearStatus()
	})
}

// SetDeletedAt sets the "deleted_at" field.
func (u *SopStageUpsertOne) SetDeletedAt(v time.Time) *SopStageUpsertOne {
	return u.Update(func(s *SopStageUpsert) {
		s.SetDeletedAt(v)
	})
}

// UpdateDeletedAt sets the "deleted_at" field to the value that was provided on create.
func (u *SopStageUpsertOne) UpdateDeletedAt() *SopStageUpsertOne {
	return u.Update(func(s *SopStageUpsert) {
		s.UpdateDeletedAt()
	})
}

// ClearDeletedAt clears the value of the "deleted_at" field.
func (u *SopStageUpsertOne) ClearDeletedAt() *SopStageUpsertOne {
	return u.Update(func(s *SopStageUpsert) {
		s.ClearDeletedAt()
	})
}

// SetTaskID sets the "task_id" field.
func (u *SopStageUpsertOne) SetTaskID(v uint64) *SopStageUpsertOne {
	return u.Update(func(s *SopStageUpsert) {
		s.SetTaskID(v)
	})
}

// UpdateTaskID sets the "task_id" field to the value that was provided on create.
func (u *SopStageUpsertOne) UpdateTaskID() *SopStageUpsertOne {
	return u.Update(func(s *SopStageUpsert) {
		s.UpdateTaskID()
	})
}

// SetName sets the "name" field.
func (u *SopStageUpsertOne) SetName(v string) *SopStageUpsertOne {
	return u.Update(func(s *SopStageUpsert) {
		s.SetName(v)
	})
}

// UpdateName sets the "name" field to the value that was provided on create.
func (u *SopStageUpsertOne) UpdateName() *SopStageUpsertOne {
	return u.Update(func(s *SopStageUpsert) {
		s.UpdateName()
	})
}

// SetConditionType sets the "condition_type" field.
func (u *SopStageUpsertOne) SetConditionType(v int) *SopStageUpsertOne {
	return u.Update(func(s *SopStageUpsert) {
		s.SetConditionType(v)
	})
}

// AddConditionType adds v to the "condition_type" field.
func (u *SopStageUpsertOne) AddConditionType(v int) *SopStageUpsertOne {
	return u.Update(func(s *SopStageUpsert) {
		s.AddConditionType(v)
	})
}

// UpdateConditionType sets the "condition_type" field to the value that was provided on create.
func (u *SopStageUpsertOne) UpdateConditionType() *SopStageUpsertOne {
	return u.Update(func(s *SopStageUpsert) {
		s.UpdateConditionType()
	})
}

// SetConditionOperator sets the "condition_operator" field.
func (u *SopStageUpsertOne) SetConditionOperator(v int) *SopStageUpsertOne {
	return u.Update(func(s *SopStageUpsert) {
		s.SetConditionOperator(v)
	})
}

// AddConditionOperator adds v to the "condition_operator" field.
func (u *SopStageUpsertOne) AddConditionOperator(v int) *SopStageUpsertOne {
	return u.Update(func(s *SopStageUpsert) {
		s.AddConditionOperator(v)
	})
}

// UpdateConditionOperator sets the "condition_operator" field to the value that was provided on create.
func (u *SopStageUpsertOne) UpdateConditionOperator() *SopStageUpsertOne {
	return u.Update(func(s *SopStageUpsert) {
		s.UpdateConditionOperator()
	})
}

// SetConditionList sets the "condition_list" field.
func (u *SopStageUpsertOne) SetConditionList(v []custom_types.Condition) *SopStageUpsertOne {
	return u.Update(func(s *SopStageUpsert) {
		s.SetConditionList(v)
	})
}

// UpdateConditionList sets the "condition_list" field to the value that was provided on create.
func (u *SopStageUpsertOne) UpdateConditionList() *SopStageUpsertOne {
	return u.Update(func(s *SopStageUpsert) {
		s.UpdateConditionList()
	})
}

// SetActionMessage sets the "action_message" field.
func (u *SopStageUpsertOne) SetActionMessage(v []custom_types.Action) *SopStageUpsertOne {
	return u.Update(func(s *SopStageUpsert) {
		s.SetActionMessage(v)
	})
}

// UpdateActionMessage sets the "action_message" field to the value that was provided on create.
func (u *SopStageUpsertOne) UpdateActionMessage() *SopStageUpsertOne {
	return u.Update(func(s *SopStageUpsert) {
		s.UpdateActionMessage()
	})
}

// ClearActionMessage clears the value of the "action_message" field.
func (u *SopStageUpsertOne) ClearActionMessage() *SopStageUpsertOne {
	return u.Update(func(s *SopStageUpsert) {
		s.ClearActionMessage()
	})
}

// SetActionLabel sets the "action_label" field.
func (u *SopStageUpsertOne) SetActionLabel(v []uint64) *SopStageUpsertOne {
	return u.Update(func(s *SopStageUpsert) {
		s.SetActionLabel(v)
	})
}

// UpdateActionLabel sets the "action_label" field to the value that was provided on create.
func (u *SopStageUpsertOne) UpdateActionLabel() *SopStageUpsertOne {
	return u.Update(func(s *SopStageUpsert) {
		s.UpdateActionLabel()
	})
}

// ClearActionLabel clears the value of the "action_label" field.
func (u *SopStageUpsertOne) ClearActionLabel() *SopStageUpsertOne {
	return u.Update(func(s *SopStageUpsert) {
		s.ClearActionLabel()
	})
}

// SetIndexSort sets the "index_sort" field.
func (u *SopStageUpsertOne) SetIndexSort(v int) *SopStageUpsertOne {
	return u.Update(func(s *SopStageUpsert) {
		s.SetIndexSort(v)
	})
}

// AddIndexSort adds v to the "index_sort" field.
func (u *SopStageUpsertOne) AddIndexSort(v int) *SopStageUpsertOne {
	return u.Update(func(s *SopStageUpsert) {
		s.AddIndexSort(v)
	})
}

// UpdateIndexSort sets the "index_sort" field to the value that was provided on create.
func (u *SopStageUpsertOne) UpdateIndexSort() *SopStageUpsertOne {
	return u.Update(func(s *SopStageUpsert) {
		s.UpdateIndexSort()
	})
}

// ClearIndexSort clears the value of the "index_sort" field.
func (u *SopStageUpsertOne) ClearIndexSort() *SopStageUpsertOne {
	return u.Update(func(s *SopStageUpsert) {
		s.ClearIndexSort()
	})
}

// Exec executes the query.
func (u *SopStageUpsertOne) Exec(ctx context.Context) error {
	if len(u.create.conflict) == 0 {
		return errors.New("ent: missing options for SopStageCreate.OnConflict")
	}
	return u.create.Exec(ctx)
}

// ExecX is like Exec, but panics if an error occurs.
func (u *SopStageUpsertOne) ExecX(ctx context.Context) {
	if err := u.create.Exec(ctx); err != nil {
		panic(err)
	}
}

// Exec executes the UPSERT query and returns the inserted/updated ID.
func (u *SopStageUpsertOne) ID(ctx context.Context) (id uint64, err error) {
	node, err := u.create.Save(ctx)
	if err != nil {
		return id, err
	}
	return node.ID, nil
}

// IDX is like ID, but panics if an error occurs.
func (u *SopStageUpsertOne) IDX(ctx context.Context) uint64 {
	id, err := u.ID(ctx)
	if err != nil {
		panic(err)
	}
	return id
}

// SopStageCreateBulk is the builder for creating many SopStage entities in bulk.
type SopStageCreateBulk struct {
	config
	err      error
	builders []*SopStageCreate
	conflict []sql.ConflictOption
}

// Save creates the SopStage entities in the database.
func (sscb *SopStageCreateBulk) Save(ctx context.Context) ([]*SopStage, error) {
	if sscb.err != nil {
		return nil, sscb.err
	}
	specs := make([]*sqlgraph.CreateSpec, len(sscb.builders))
	nodes := make([]*SopStage, len(sscb.builders))
	mutators := make([]Mutator, len(sscb.builders))
	for i := range sscb.builders {
		func(i int, root context.Context) {
			builder := sscb.builders[i]
			builder.defaults()
			var mut Mutator = MutateFunc(func(ctx context.Context, m Mutation) (Value, error) {
				mutation, ok := m.(*SopStageMutation)
				if !ok {
					return nil, fmt.Errorf("unexpected mutation type %T", m)
				}
				if err := builder.check(); err != nil {
					return nil, err
				}
				builder.mutation = mutation
				var err error
				nodes[i], specs[i] = builder.createSpec()
				if i < len(mutators)-1 {
					_, err = mutators[i+1].Mutate(root, sscb.builders[i+1].mutation)
				} else {
					spec := &sqlgraph.BatchCreateSpec{Nodes: specs}
					spec.OnConflict = sscb.conflict
					// Invoke the actual operation on the latest mutation in the chain.
					if err = sqlgraph.BatchCreate(ctx, sscb.driver, spec); err != nil {
						if sqlgraph.IsConstraintError(err) {
							err = &ConstraintError{msg: err.Error(), wrap: err}
						}
					}
				}
				if err != nil {
					return nil, err
				}
				mutation.id = &nodes[i].ID
				if specs[i].ID.Value != nil && nodes[i].ID == 0 {
					id := specs[i].ID.Value.(int64)
					nodes[i].ID = uint64(id)
				}
				mutation.done = true
				return nodes[i], nil
			})
			for i := len(builder.hooks) - 1; i >= 0; i-- {
				mut = builder.hooks[i](mut)
			}
			mutators[i] = mut
		}(i, ctx)
	}
	if len(mutators) > 0 {
		if _, err := mutators[0].Mutate(ctx, sscb.builders[0].mutation); err != nil {
			return nil, err
		}
	}
	return nodes, nil
}

// SaveX is like Save, but panics if an error occurs.
func (sscb *SopStageCreateBulk) SaveX(ctx context.Context) []*SopStage {
	v, err := sscb.Save(ctx)
	if err != nil {
		panic(err)
	}
	return v
}

// Exec executes the query.
func (sscb *SopStageCreateBulk) Exec(ctx context.Context) error {
	_, err := sscb.Save(ctx)
	return err
}

// ExecX is like Exec, but panics if an error occurs.
func (sscb *SopStageCreateBulk) ExecX(ctx context.Context) {
	if err := sscb.Exec(ctx); err != nil {
		panic(err)
	}
}

// OnConflict allows configuring the `ON CONFLICT` / `ON DUPLICATE KEY` clause
// of the `INSERT` statement. For example:
//
//	client.SopStage.CreateBulk(builders...).
//		OnConflict(
//			// Update the row with the new values
//			// the was proposed for insertion.
//			sql.ResolveWithNewValues(),
//		).
//		// Override some of the fields with custom
//		// update values.
//		Update(func(u *ent.SopStageUpsert) {
//			SetCreatedAt(v+v).
//		}).
//		Exec(ctx)
func (sscb *SopStageCreateBulk) OnConflict(opts ...sql.ConflictOption) *SopStageUpsertBulk {
	sscb.conflict = opts
	return &SopStageUpsertBulk{
		create: sscb,
	}
}

// OnConflictColumns calls `OnConflict` and configures the columns
// as conflict target. Using this option is equivalent to using:
//
//	client.SopStage.Create().
//		OnConflict(sql.ConflictColumns(columns...)).
//		Exec(ctx)
func (sscb *SopStageCreateBulk) OnConflictColumns(columns ...string) *SopStageUpsertBulk {
	sscb.conflict = append(sscb.conflict, sql.ConflictColumns(columns...))
	return &SopStageUpsertBulk{
		create: sscb,
	}
}

// SopStageUpsertBulk is the builder for "upsert"-ing
// a bulk of SopStage nodes.
type SopStageUpsertBulk struct {
	create *SopStageCreateBulk
}

// UpdateNewValues updates the mutable fields using the new values that
// were set on create. Using this option is equivalent to using:
//
//	client.SopStage.Create().
//		OnConflict(
//			sql.ResolveWithNewValues(),
//			sql.ResolveWith(func(u *sql.UpdateSet) {
//				u.SetIgnore(sopstage.FieldID)
//			}),
//		).
//		Exec(ctx)
func (u *SopStageUpsertBulk) UpdateNewValues() *SopStageUpsertBulk {
	u.create.conflict = append(u.create.conflict, sql.ResolveWithNewValues())
	u.create.conflict = append(u.create.conflict, sql.ResolveWith(func(s *sql.UpdateSet) {
		for _, b := range u.create.builders {
			if _, exists := b.mutation.ID(); exists {
				s.SetIgnore(sopstage.FieldID)
			}
			if _, exists := b.mutation.CreatedAt(); exists {
				s.SetIgnore(sopstage.FieldCreatedAt)
			}
		}
	}))
	return u
}

// Ignore sets each column to itself in case of conflict.
// Using this option is equivalent to using:
//
//	client.SopStage.Create().
//		OnConflict(sql.ResolveWithIgnore()).
//		Exec(ctx)
func (u *SopStageUpsertBulk) Ignore() *SopStageUpsertBulk {
	u.create.conflict = append(u.create.conflict, sql.ResolveWithIgnore())
	return u
}

// DoNothing configures the conflict_action to `DO NOTHING`.
// Supported only by SQLite and PostgreSQL.
func (u *SopStageUpsertBulk) DoNothing() *SopStageUpsertBulk {
	u.create.conflict = append(u.create.conflict, sql.DoNothing())
	return u
}

// Update allows overriding fields `UPDATE` values. See the SopStageCreateBulk.OnConflict
// documentation for more info.
func (u *SopStageUpsertBulk) Update(set func(*SopStageUpsert)) *SopStageUpsertBulk {
	u.create.conflict = append(u.create.conflict, sql.ResolveWith(func(update *sql.UpdateSet) {
		set(&SopStageUpsert{UpdateSet: update})
	}))
	return u
}

// SetUpdatedAt sets the "updated_at" field.
func (u *SopStageUpsertBulk) SetUpdatedAt(v time.Time) *SopStageUpsertBulk {
	return u.Update(func(s *SopStageUpsert) {
		s.SetUpdatedAt(v)
	})
}

// UpdateUpdatedAt sets the "updated_at" field to the value that was provided on create.
func (u *SopStageUpsertBulk) UpdateUpdatedAt() *SopStageUpsertBulk {
	return u.Update(func(s *SopStageUpsert) {
		s.UpdateUpdatedAt()
	})
}

// SetStatus sets the "status" field.
func (u *SopStageUpsertBulk) SetStatus(v uint8) *SopStageUpsertBulk {
	return u.Update(func(s *SopStageUpsert) {
		s.SetStatus(v)
	})
}

// AddStatus adds v to the "status" field.
func (u *SopStageUpsertBulk) AddStatus(v uint8) *SopStageUpsertBulk {
	return u.Update(func(s *SopStageUpsert) {
		s.AddStatus(v)
	})
}

// UpdateStatus sets the "status" field to the value that was provided on create.
func (u *SopStageUpsertBulk) UpdateStatus() *SopStageUpsertBulk {
	return u.Update(func(s *SopStageUpsert) {
		s.UpdateStatus()
	})
}

// ClearStatus clears the value of the "status" field.
func (u *SopStageUpsertBulk) ClearStatus() *SopStageUpsertBulk {
	return u.Update(func(s *SopStageUpsert) {
		s.ClearStatus()
	})
}

// SetDeletedAt sets the "deleted_at" field.
func (u *SopStageUpsertBulk) SetDeletedAt(v time.Time) *SopStageUpsertBulk {
	return u.Update(func(s *SopStageUpsert) {
		s.SetDeletedAt(v)
	})
}

// UpdateDeletedAt sets the "deleted_at" field to the value that was provided on create.
func (u *SopStageUpsertBulk) UpdateDeletedAt() *SopStageUpsertBulk {
	return u.Update(func(s *SopStageUpsert) {
		s.UpdateDeletedAt()
	})
}

// ClearDeletedAt clears the value of the "deleted_at" field.
func (u *SopStageUpsertBulk) ClearDeletedAt() *SopStageUpsertBulk {
	return u.Update(func(s *SopStageUpsert) {
		s.ClearDeletedAt()
	})
}

// SetTaskID sets the "task_id" field.
func (u *SopStageUpsertBulk) SetTaskID(v uint64) *SopStageUpsertBulk {
	return u.Update(func(s *SopStageUpsert) {
		s.SetTaskID(v)
	})
}

// UpdateTaskID sets the "task_id" field to the value that was provided on create.
func (u *SopStageUpsertBulk) UpdateTaskID() *SopStageUpsertBulk {
	return u.Update(func(s *SopStageUpsert) {
		s.UpdateTaskID()
	})
}

// SetName sets the "name" field.
func (u *SopStageUpsertBulk) SetName(v string) *SopStageUpsertBulk {
	return u.Update(func(s *SopStageUpsert) {
		s.SetName(v)
	})
}

// UpdateName sets the "name" field to the value that was provided on create.
func (u *SopStageUpsertBulk) UpdateName() *SopStageUpsertBulk {
	return u.Update(func(s *SopStageUpsert) {
		s.UpdateName()
	})
}

// SetConditionType sets the "condition_type" field.
func (u *SopStageUpsertBulk) SetConditionType(v int) *SopStageUpsertBulk {
	return u.Update(func(s *SopStageUpsert) {
		s.SetConditionType(v)
	})
}

// AddConditionType adds v to the "condition_type" field.
func (u *SopStageUpsertBulk) AddConditionType(v int) *SopStageUpsertBulk {
	return u.Update(func(s *SopStageUpsert) {
		s.AddConditionType(v)
	})
}

// UpdateConditionType sets the "condition_type" field to the value that was provided on create.
func (u *SopStageUpsertBulk) UpdateConditionType() *SopStageUpsertBulk {
	return u.Update(func(s *SopStageUpsert) {
		s.UpdateConditionType()
	})
}

// SetConditionOperator sets the "condition_operator" field.
func (u *SopStageUpsertBulk) SetConditionOperator(v int) *SopStageUpsertBulk {
	return u.Update(func(s *SopStageUpsert) {
		s.SetConditionOperator(v)
	})
}

// AddConditionOperator adds v to the "condition_operator" field.
func (u *SopStageUpsertBulk) AddConditionOperator(v int) *SopStageUpsertBulk {
	return u.Update(func(s *SopStageUpsert) {
		s.AddConditionOperator(v)
	})
}

// UpdateConditionOperator sets the "condition_operator" field to the value that was provided on create.
func (u *SopStageUpsertBulk) UpdateConditionOperator() *SopStageUpsertBulk {
	return u.Update(func(s *SopStageUpsert) {
		s.UpdateConditionOperator()
	})
}

// SetConditionList sets the "condition_list" field.
func (u *SopStageUpsertBulk) SetConditionList(v []custom_types.Condition) *SopStageUpsertBulk {
	return u.Update(func(s *SopStageUpsert) {
		s.SetConditionList(v)
	})
}

// UpdateConditionList sets the "condition_list" field to the value that was provided on create.
func (u *SopStageUpsertBulk) UpdateConditionList() *SopStageUpsertBulk {
	return u.Update(func(s *SopStageUpsert) {
		s.UpdateConditionList()
	})
}

// SetActionMessage sets the "action_message" field.
func (u *SopStageUpsertBulk) SetActionMessage(v []custom_types.Action) *SopStageUpsertBulk {
	return u.Update(func(s *SopStageUpsert) {
		s.SetActionMessage(v)
	})
}

// UpdateActionMessage sets the "action_message" field to the value that was provided on create.
func (u *SopStageUpsertBulk) UpdateActionMessage() *SopStageUpsertBulk {
	return u.Update(func(s *SopStageUpsert) {
		s.UpdateActionMessage()
	})
}

// ClearActionMessage clears the value of the "action_message" field.
func (u *SopStageUpsertBulk) ClearActionMessage() *SopStageUpsertBulk {
	return u.Update(func(s *SopStageUpsert) {
		s.ClearActionMessage()
	})
}

// SetActionLabel sets the "action_label" field.
func (u *SopStageUpsertBulk) SetActionLabel(v []uint64) *SopStageUpsertBulk {
	return u.Update(func(s *SopStageUpsert) {
		s.SetActionLabel(v)
	})
}

// UpdateActionLabel sets the "action_label" field to the value that was provided on create.
func (u *SopStageUpsertBulk) UpdateActionLabel() *SopStageUpsertBulk {
	return u.Update(func(s *SopStageUpsert) {
		s.UpdateActionLabel()
	})
}

// ClearActionLabel clears the value of the "action_label" field.
func (u *SopStageUpsertBulk) ClearActionLabel() *SopStageUpsertBulk {
	return u.Update(func(s *SopStageUpsert) {
		s.ClearActionLabel()
	})
}

// SetIndexSort sets the "index_sort" field.
func (u *SopStageUpsertBulk) SetIndexSort(v int) *SopStageUpsertBulk {
	return u.Update(func(s *SopStageUpsert) {
		s.SetIndexSort(v)
	})
}

// AddIndexSort adds v to the "index_sort" field.
func (u *SopStageUpsertBulk) AddIndexSort(v int) *SopStageUpsertBulk {
	return u.Update(func(s *SopStageUpsert) {
		s.AddIndexSort(v)
	})
}

// UpdateIndexSort sets the "index_sort" field to the value that was provided on create.
func (u *SopStageUpsertBulk) UpdateIndexSort() *SopStageUpsertBulk {
	return u.Update(func(s *SopStageUpsert) {
		s.UpdateIndexSort()
	})
}

// ClearIndexSort clears the value of the "index_sort" field.
func (u *SopStageUpsertBulk) ClearIndexSort() *SopStageUpsertBulk {
	return u.Update(func(s *SopStageUpsert) {
		s.ClearIndexSort()
	})
}

// Exec executes the query.
func (u *SopStageUpsertBulk) Exec(ctx context.Context) error {
	if u.create.err != nil {
		return u.create.err
	}
	for i, b := range u.create.builders {
		if len(b.conflict) != 0 {
			return fmt.Errorf("ent: OnConflict was set for builder %d. Set it on the SopStageCreateBulk instead", i)
		}
	}
	if len(u.create.conflict) == 0 {
		return errors.New("ent: missing options for SopStageCreateBulk.OnConflict")
	}
	return u.create.Exec(ctx)
}

// ExecX is like Exec, but panics if an error occurs.
func (u *SopStageUpsertBulk) ExecX(ctx context.Context) {
	if err := u.create.Exec(ctx); err != nil {
		panic(err)
	}
}