mirror of
https://github.com/ent/ent.git
synced 2026-05-24 09:31:56 +03:00
Also, for some reason, the TimeMixin.UpdateTime was an immutable field, but this was incorrent, because the codegen just skip generating update setters to it. Removing the Immutable modifier allows users to set this field explicitly.
623 lines
16 KiB
Go
623 lines
16 KiB
Go
// Copyright 2019-present Facebook Inc. All rights reserved.
|
|
// This source code is licensed under the Apache 2.0 license found
|
|
// in the LICENSE file in the root directory of this source tree.
|
|
|
|
// Code generated by entc, DO NOT EDIT.
|
|
|
|
package ent
|
|
|
|
import (
|
|
"context"
|
|
"errors"
|
|
"fmt"
|
|
|
|
"entgo.io/ent/dialect/sql"
|
|
"entgo.io/ent/dialect/sql/sqlgraph"
|
|
"entgo.io/ent/entc/integration/ent/node"
|
|
"entgo.io/ent/schema/field"
|
|
)
|
|
|
|
// NodeCreate is the builder for creating a Node entity.
|
|
type NodeCreate struct {
|
|
config
|
|
mutation *NodeMutation
|
|
hooks []Hook
|
|
conflict []sql.ConflictOption
|
|
}
|
|
|
|
// SetValue sets the "value" field.
|
|
func (nc *NodeCreate) SetValue(i int) *NodeCreate {
|
|
nc.mutation.SetValue(i)
|
|
return nc
|
|
}
|
|
|
|
// SetNillableValue sets the "value" field if the given value is not nil.
|
|
func (nc *NodeCreate) SetNillableValue(i *int) *NodeCreate {
|
|
if i != nil {
|
|
nc.SetValue(*i)
|
|
}
|
|
return nc
|
|
}
|
|
|
|
// SetPrevID sets the "prev" edge to the Node entity by ID.
|
|
func (nc *NodeCreate) SetPrevID(id int) *NodeCreate {
|
|
nc.mutation.SetPrevID(id)
|
|
return nc
|
|
}
|
|
|
|
// SetNillablePrevID sets the "prev" edge to the Node entity by ID if the given value is not nil.
|
|
func (nc *NodeCreate) SetNillablePrevID(id *int) *NodeCreate {
|
|
if id != nil {
|
|
nc = nc.SetPrevID(*id)
|
|
}
|
|
return nc
|
|
}
|
|
|
|
// SetPrev sets the "prev" edge to the Node entity.
|
|
func (nc *NodeCreate) SetPrev(n *Node) *NodeCreate {
|
|
return nc.SetPrevID(n.ID)
|
|
}
|
|
|
|
// SetNextID sets the "next" edge to the Node entity by ID.
|
|
func (nc *NodeCreate) SetNextID(id int) *NodeCreate {
|
|
nc.mutation.SetNextID(id)
|
|
return nc
|
|
}
|
|
|
|
// SetNillableNextID sets the "next" edge to the Node entity by ID if the given value is not nil.
|
|
func (nc *NodeCreate) SetNillableNextID(id *int) *NodeCreate {
|
|
if id != nil {
|
|
nc = nc.SetNextID(*id)
|
|
}
|
|
return nc
|
|
}
|
|
|
|
// SetNext sets the "next" edge to the Node entity.
|
|
func (nc *NodeCreate) SetNext(n *Node) *NodeCreate {
|
|
return nc.SetNextID(n.ID)
|
|
}
|
|
|
|
// Mutation returns the NodeMutation object of the builder.
|
|
func (nc *NodeCreate) Mutation() *NodeMutation {
|
|
return nc.mutation
|
|
}
|
|
|
|
// Save creates the Node in the database.
|
|
func (nc *NodeCreate) Save(ctx context.Context) (*Node, error) {
|
|
var (
|
|
err error
|
|
node *Node
|
|
)
|
|
if len(nc.hooks) == 0 {
|
|
if err = nc.check(); err != nil {
|
|
return nil, err
|
|
}
|
|
node, err = nc.sqlSave(ctx)
|
|
} else {
|
|
var mut Mutator = MutateFunc(func(ctx context.Context, m Mutation) (Value, error) {
|
|
mutation, ok := m.(*NodeMutation)
|
|
if !ok {
|
|
return nil, fmt.Errorf("unexpected mutation type %T", m)
|
|
}
|
|
if err = nc.check(); err != nil {
|
|
return nil, err
|
|
}
|
|
nc.mutation = mutation
|
|
if node, err = nc.sqlSave(ctx); err != nil {
|
|
return nil, err
|
|
}
|
|
mutation.id = &node.ID
|
|
mutation.done = true
|
|
return node, err
|
|
})
|
|
for i := len(nc.hooks) - 1; i >= 0; i-- {
|
|
if nc.hooks[i] == nil {
|
|
return nil, fmt.Errorf("ent: uninitialized hook (forgotten import ent/runtime?)")
|
|
}
|
|
mut = nc.hooks[i](mut)
|
|
}
|
|
if _, err := mut.Mutate(ctx, nc.mutation); err != nil {
|
|
return nil, err
|
|
}
|
|
}
|
|
return node, err
|
|
}
|
|
|
|
// SaveX calls Save and panics if Save returns an error.
|
|
func (nc *NodeCreate) SaveX(ctx context.Context) *Node {
|
|
v, err := nc.Save(ctx)
|
|
if err != nil {
|
|
panic(err)
|
|
}
|
|
return v
|
|
}
|
|
|
|
// Exec executes the query.
|
|
func (nc *NodeCreate) Exec(ctx context.Context) error {
|
|
_, err := nc.Save(ctx)
|
|
return err
|
|
}
|
|
|
|
// ExecX is like Exec, but panics if an error occurs.
|
|
func (nc *NodeCreate) ExecX(ctx context.Context) {
|
|
if err := nc.Exec(ctx); err != nil {
|
|
panic(err)
|
|
}
|
|
}
|
|
|
|
// check runs all checks and user-defined validators on the builder.
|
|
func (nc *NodeCreate) check() error {
|
|
return nil
|
|
}
|
|
|
|
func (nc *NodeCreate) sqlSave(ctx context.Context) (*Node, error) {
|
|
_node, _spec := nc.createSpec()
|
|
if err := sqlgraph.CreateNode(ctx, nc.driver, _spec); err != nil {
|
|
if sqlgraph.IsConstraintError(err) {
|
|
err = &ConstraintError{err.Error(), err}
|
|
}
|
|
return nil, err
|
|
}
|
|
id := _spec.ID.Value.(int64)
|
|
_node.ID = int(id)
|
|
return _node, nil
|
|
}
|
|
|
|
func (nc *NodeCreate) createSpec() (*Node, *sqlgraph.CreateSpec) {
|
|
var (
|
|
_node = &Node{config: nc.config}
|
|
_spec = &sqlgraph.CreateSpec{
|
|
Table: node.Table,
|
|
ID: &sqlgraph.FieldSpec{
|
|
Type: field.TypeInt,
|
|
Column: node.FieldID,
|
|
},
|
|
}
|
|
)
|
|
_spec.OnConflict = nc.conflict
|
|
if value, ok := nc.mutation.Value(); ok {
|
|
_spec.Fields = append(_spec.Fields, &sqlgraph.FieldSpec{
|
|
Type: field.TypeInt,
|
|
Value: value,
|
|
Column: node.FieldValue,
|
|
})
|
|
_node.Value = value
|
|
}
|
|
if nodes := nc.mutation.PrevIDs(); len(nodes) > 0 {
|
|
edge := &sqlgraph.EdgeSpec{
|
|
Rel: sqlgraph.O2O,
|
|
Inverse: true,
|
|
Table: node.PrevTable,
|
|
Columns: []string{node.PrevColumn},
|
|
Bidi: false,
|
|
Target: &sqlgraph.EdgeTarget{
|
|
IDSpec: &sqlgraph.FieldSpec{
|
|
Type: field.TypeInt,
|
|
Column: node.FieldID,
|
|
},
|
|
},
|
|
}
|
|
for _, k := range nodes {
|
|
edge.Target.Nodes = append(edge.Target.Nodes, k)
|
|
}
|
|
_node.node_next = &nodes[0]
|
|
_spec.Edges = append(_spec.Edges, edge)
|
|
}
|
|
if nodes := nc.mutation.NextIDs(); len(nodes) > 0 {
|
|
edge := &sqlgraph.EdgeSpec{
|
|
Rel: sqlgraph.O2O,
|
|
Inverse: false,
|
|
Table: node.NextTable,
|
|
Columns: []string{node.NextColumn},
|
|
Bidi: false,
|
|
Target: &sqlgraph.EdgeTarget{
|
|
IDSpec: &sqlgraph.FieldSpec{
|
|
Type: field.TypeInt,
|
|
Column: node.FieldID,
|
|
},
|
|
},
|
|
}
|
|
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.Node.Create().
|
|
// SetValue(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.NodeUpsert) {
|
|
// SetValue(v+v).
|
|
// }).
|
|
// Exec(ctx)
|
|
//
|
|
func (nc *NodeCreate) OnConflict(opts ...sql.ConflictOption) *NodeUpsertOne {
|
|
nc.conflict = opts
|
|
return &NodeUpsertOne{
|
|
create: nc,
|
|
}
|
|
}
|
|
|
|
// OnConflictColumns calls `OnConflict` and configures the columns
|
|
// as conflict target. Using this option is equivalent to using:
|
|
//
|
|
// client.Node.Create().
|
|
// OnConflict(sql.ConflictColumns(columns...)).
|
|
// Exec(ctx)
|
|
//
|
|
func (nc *NodeCreate) OnConflictColumns(columns ...string) *NodeUpsertOne {
|
|
nc.conflict = append(nc.conflict, sql.ConflictColumns(columns...))
|
|
return &NodeUpsertOne{
|
|
create: nc,
|
|
}
|
|
}
|
|
|
|
type (
|
|
// NodeUpsertOne is the builder for "upsert"-ing
|
|
// one Node node.
|
|
NodeUpsertOne struct {
|
|
create *NodeCreate
|
|
}
|
|
|
|
// NodeUpsert is the "OnConflict" setter.
|
|
NodeUpsert struct {
|
|
*sql.UpdateSet
|
|
}
|
|
)
|
|
|
|
// SetValue sets the "value" field.
|
|
func (u *NodeUpsert) SetValue(v int) *NodeUpsert {
|
|
u.Set(node.FieldValue, v)
|
|
return u
|
|
}
|
|
|
|
// UpdateValue sets the "value" field to the value that was provided on create.
|
|
func (u *NodeUpsert) UpdateValue() *NodeUpsert {
|
|
u.SetExcluded(node.FieldValue)
|
|
return u
|
|
}
|
|
|
|
// AddValue adds v to the "value" field.
|
|
func (u *NodeUpsert) AddValue(v int) *NodeUpsert {
|
|
u.Add(node.FieldValue, v)
|
|
return u
|
|
}
|
|
|
|
// ClearValue clears the value of the "value" field.
|
|
func (u *NodeUpsert) ClearValue() *NodeUpsert {
|
|
u.SetNull(node.FieldValue)
|
|
return u
|
|
}
|
|
|
|
// UpdateNewValues updates the mutable fields using the new values that were set on create.
|
|
// Using this option is equivalent to using:
|
|
//
|
|
// client.Node.Create().
|
|
// OnConflict(
|
|
// sql.ResolveWithNewValues(),
|
|
// ).
|
|
// Exec(ctx)
|
|
//
|
|
func (u *NodeUpsertOne) UpdateNewValues() *NodeUpsertOne {
|
|
u.create.conflict = append(u.create.conflict, sql.ResolveWithNewValues())
|
|
return u
|
|
}
|
|
|
|
// Ignore sets each column to itself in case of conflict.
|
|
// Using this option is equivalent to using:
|
|
//
|
|
// client.Node.Create().
|
|
// OnConflict(sql.ResolveWithIgnore()).
|
|
// Exec(ctx)
|
|
//
|
|
func (u *NodeUpsertOne) Ignore() *NodeUpsertOne {
|
|
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 *NodeUpsertOne) DoNothing() *NodeUpsertOne {
|
|
u.create.conflict = append(u.create.conflict, sql.DoNothing())
|
|
return u
|
|
}
|
|
|
|
// Update allows overriding fields `UPDATE` values. See the NodeCreate.OnConflict
|
|
// documentation for more info.
|
|
func (u *NodeUpsertOne) Update(set func(*NodeUpsert)) *NodeUpsertOne {
|
|
u.create.conflict = append(u.create.conflict, sql.ResolveWith(func(update *sql.UpdateSet) {
|
|
set(&NodeUpsert{UpdateSet: update})
|
|
}))
|
|
return u
|
|
}
|
|
|
|
// SetValue sets the "value" field.
|
|
func (u *NodeUpsertOne) SetValue(v int) *NodeUpsertOne {
|
|
return u.Update(func(s *NodeUpsert) {
|
|
s.SetValue(v)
|
|
})
|
|
}
|
|
|
|
// AddValue adds v to the "value" field.
|
|
func (u *NodeUpsertOne) AddValue(v int) *NodeUpsertOne {
|
|
return u.Update(func(s *NodeUpsert) {
|
|
s.AddValue(v)
|
|
})
|
|
}
|
|
|
|
// UpdateValue sets the "value" field to the value that was provided on create.
|
|
func (u *NodeUpsertOne) UpdateValue() *NodeUpsertOne {
|
|
return u.Update(func(s *NodeUpsert) {
|
|
s.UpdateValue()
|
|
})
|
|
}
|
|
|
|
// ClearValue clears the value of the "value" field.
|
|
func (u *NodeUpsertOne) ClearValue() *NodeUpsertOne {
|
|
return u.Update(func(s *NodeUpsert) {
|
|
s.ClearValue()
|
|
})
|
|
}
|
|
|
|
// Exec executes the query.
|
|
func (u *NodeUpsertOne) Exec(ctx context.Context) error {
|
|
if len(u.create.conflict) == 0 {
|
|
return errors.New("ent: missing options for NodeCreate.OnConflict")
|
|
}
|
|
return u.create.Exec(ctx)
|
|
}
|
|
|
|
// ExecX is like Exec, but panics if an error occurs.
|
|
func (u *NodeUpsertOne) 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 *NodeUpsertOne) ID(ctx context.Context) (id int, 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 *NodeUpsertOne) IDX(ctx context.Context) int {
|
|
id, err := u.ID(ctx)
|
|
if err != nil {
|
|
panic(err)
|
|
}
|
|
return id
|
|
}
|
|
|
|
// NodeCreateBulk is the builder for creating many Node entities in bulk.
|
|
type NodeCreateBulk struct {
|
|
config
|
|
builders []*NodeCreate
|
|
conflict []sql.ConflictOption
|
|
}
|
|
|
|
// Save creates the Node entities in the database.
|
|
func (ncb *NodeCreateBulk) Save(ctx context.Context) ([]*Node, error) {
|
|
specs := make([]*sqlgraph.CreateSpec, len(ncb.builders))
|
|
nodes := make([]*Node, len(ncb.builders))
|
|
mutators := make([]Mutator, len(ncb.builders))
|
|
for i := range ncb.builders {
|
|
func(i int, root context.Context) {
|
|
builder := ncb.builders[i]
|
|
var mut Mutator = MutateFunc(func(ctx context.Context, m Mutation) (Value, error) {
|
|
mutation, ok := m.(*NodeMutation)
|
|
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
|
|
if i < len(mutators)-1 {
|
|
_, err = mutators[i+1].Mutate(root, ncb.builders[i+1].mutation)
|
|
} else {
|
|
spec := &sqlgraph.BatchCreateSpec{Nodes: specs}
|
|
spec.OnConflict = ncb.conflict
|
|
// Invoke the actual operation on the latest mutation in the chain.
|
|
if err = sqlgraph.BatchCreate(ctx, ncb.driver, spec); err != nil {
|
|
if sqlgraph.IsConstraintError(err) {
|
|
err = &ConstraintError{err.Error(), err}
|
|
}
|
|
}
|
|
}
|
|
if err != nil {
|
|
return nil, err
|
|
}
|
|
mutation.id = &nodes[i].ID
|
|
mutation.done = true
|
|
if specs[i].ID.Value != nil {
|
|
id := specs[i].ID.Value.(int64)
|
|
nodes[i].ID = int(id)
|
|
}
|
|
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, ncb.builders[0].mutation); err != nil {
|
|
return nil, err
|
|
}
|
|
}
|
|
return nodes, nil
|
|
}
|
|
|
|
// SaveX is like Save, but panics if an error occurs.
|
|
func (ncb *NodeCreateBulk) SaveX(ctx context.Context) []*Node {
|
|
v, err := ncb.Save(ctx)
|
|
if err != nil {
|
|
panic(err)
|
|
}
|
|
return v
|
|
}
|
|
|
|
// Exec executes the query.
|
|
func (ncb *NodeCreateBulk) Exec(ctx context.Context) error {
|
|
_, err := ncb.Save(ctx)
|
|
return err
|
|
}
|
|
|
|
// ExecX is like Exec, but panics if an error occurs.
|
|
func (ncb *NodeCreateBulk) ExecX(ctx context.Context) {
|
|
if err := ncb.Exec(ctx); err != nil {
|
|
panic(err)
|
|
}
|
|
}
|
|
|
|
// OnConflict allows configuring the `ON CONFLICT` / `ON DUPLICATE KEY` clause
|
|
// of the `INSERT` statement. For example:
|
|
//
|
|
// client.Node.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.NodeUpsert) {
|
|
// SetValue(v+v).
|
|
// }).
|
|
// Exec(ctx)
|
|
//
|
|
func (ncb *NodeCreateBulk) OnConflict(opts ...sql.ConflictOption) *NodeUpsertBulk {
|
|
ncb.conflict = opts
|
|
return &NodeUpsertBulk{
|
|
create: ncb,
|
|
}
|
|
}
|
|
|
|
// OnConflictColumns calls `OnConflict` and configures the columns
|
|
// as conflict target. Using this option is equivalent to using:
|
|
//
|
|
// client.Node.Create().
|
|
// OnConflict(sql.ConflictColumns(columns...)).
|
|
// Exec(ctx)
|
|
//
|
|
func (ncb *NodeCreateBulk) OnConflictColumns(columns ...string) *NodeUpsertBulk {
|
|
ncb.conflict = append(ncb.conflict, sql.ConflictColumns(columns...))
|
|
return &NodeUpsertBulk{
|
|
create: ncb,
|
|
}
|
|
}
|
|
|
|
// NodeUpsertBulk is the builder for "upsert"-ing
|
|
// a bulk of Node nodes.
|
|
type NodeUpsertBulk struct {
|
|
create *NodeCreateBulk
|
|
}
|
|
|
|
// UpdateNewValues updates the mutable fields using the new values that
|
|
// were set on create. Using this option is equivalent to using:
|
|
//
|
|
// client.Node.Create().
|
|
// OnConflict(
|
|
// sql.ResolveWithNewValues(),
|
|
// ).
|
|
// Exec(ctx)
|
|
//
|
|
func (u *NodeUpsertBulk) UpdateNewValues() *NodeUpsertBulk {
|
|
u.create.conflict = append(u.create.conflict, sql.ResolveWithNewValues())
|
|
return u
|
|
}
|
|
|
|
// Ignore sets each column to itself in case of conflict.
|
|
// Using this option is equivalent to using:
|
|
//
|
|
// client.Node.Create().
|
|
// OnConflict(sql.ResolveWithIgnore()).
|
|
// Exec(ctx)
|
|
//
|
|
func (u *NodeUpsertBulk) Ignore() *NodeUpsertBulk {
|
|
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 *NodeUpsertBulk) DoNothing() *NodeUpsertBulk {
|
|
u.create.conflict = append(u.create.conflict, sql.DoNothing())
|
|
return u
|
|
}
|
|
|
|
// Update allows overriding fields `UPDATE` values. See the NodeCreateBulk.OnConflict
|
|
// documentation for more info.
|
|
func (u *NodeUpsertBulk) Update(set func(*NodeUpsert)) *NodeUpsertBulk {
|
|
u.create.conflict = append(u.create.conflict, sql.ResolveWith(func(update *sql.UpdateSet) {
|
|
set(&NodeUpsert{UpdateSet: update})
|
|
}))
|
|
return u
|
|
}
|
|
|
|
// SetValue sets the "value" field.
|
|
func (u *NodeUpsertBulk) SetValue(v int) *NodeUpsertBulk {
|
|
return u.Update(func(s *NodeUpsert) {
|
|
s.SetValue(v)
|
|
})
|
|
}
|
|
|
|
// AddValue adds v to the "value" field.
|
|
func (u *NodeUpsertBulk) AddValue(v int) *NodeUpsertBulk {
|
|
return u.Update(func(s *NodeUpsert) {
|
|
s.AddValue(v)
|
|
})
|
|
}
|
|
|
|
// UpdateValue sets the "value" field to the value that was provided on create.
|
|
func (u *NodeUpsertBulk) UpdateValue() *NodeUpsertBulk {
|
|
return u.Update(func(s *NodeUpsert) {
|
|
s.UpdateValue()
|
|
})
|
|
}
|
|
|
|
// ClearValue clears the value of the "value" field.
|
|
func (u *NodeUpsertBulk) ClearValue() *NodeUpsertBulk {
|
|
return u.Update(func(s *NodeUpsert) {
|
|
s.ClearValue()
|
|
})
|
|
}
|
|
|
|
// Exec executes the query.
|
|
func (u *NodeUpsertBulk) Exec(ctx context.Context) error {
|
|
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 NodeCreateBulk instead", i)
|
|
}
|
|
}
|
|
if len(u.create.conflict) == 0 {
|
|
return errors.New("ent: missing options for NodeCreateBulk.OnConflict")
|
|
}
|
|
return u.create.Exec(ctx)
|
|
}
|
|
|
|
// ExecX is like Exec, but panics if an error occurs.
|
|
func (u *NodeUpsertBulk) ExecX(ctx context.Context) {
|
|
if err := u.create.Exec(ctx); err != nil {
|
|
panic(err)
|
|
}
|
|
}
|