// 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 ent, DO NOT EDIT. package ent import ( "context" "errors" "entgo.io/ent/dialect/gremlin" "entgo.io/ent/dialect/gremlin/graph/dsl" "entgo.io/ent/dialect/gremlin/graph/dsl/__" "entgo.io/ent/dialect/gremlin/graph/dsl/g" "entgo.io/ent/entc/integration/gremlin/ent/predicate" "entgo.io/ent/entc/integration/gremlin/ent/spec" ) // SpecUpdate is the builder for updating Spec entities. type SpecUpdate struct { config hooks []Hook mutation *SpecMutation } // Where appends a list predicates to the SpecUpdate builder. func (_u *SpecUpdate) Where(ps ...predicate.Spec) *SpecUpdate { _u.mutation.Where(ps...) return _u } // AddCardIDs adds the "card" edge to the Card entity by IDs. func (_u *SpecUpdate) AddCardIDs(ids ...string) *SpecUpdate { _u.mutation.AddCardIDs(ids...) return _u } // AddCard adds the "card" edges to the Card entity. func (_u *SpecUpdate) AddCard(v ...*Card) *SpecUpdate { ids := make([]string, len(v)) for i := range v { ids[i] = v[i].ID } return _u.AddCardIDs(ids...) } // Mutation returns the SpecMutation object of the builder. func (_u *SpecUpdate) Mutation() *SpecMutation { return _u.mutation } // ClearCard clears all "card" edges to the Card entity. func (_u *SpecUpdate) ClearCard() *SpecUpdate { _u.mutation.ClearCard() return _u } // RemoveCardIDs removes the "card" edge to Card entities by IDs. func (_u *SpecUpdate) RemoveCardIDs(ids ...string) *SpecUpdate { _u.mutation.RemoveCardIDs(ids...) return _u } // RemoveCard removes "card" edges to Card entities. func (_u *SpecUpdate) RemoveCard(v ...*Card) *SpecUpdate { ids := make([]string, len(v)) for i := range v { ids[i] = v[i].ID } return _u.RemoveCardIDs(ids...) } // Save executes the query and returns the number of nodes affected by the update operation. func (_u *SpecUpdate) Save(ctx context.Context) (int, error) { return withHooks(ctx, _u.gremlinSave, _u.mutation, _u.hooks) } // SaveX is like Save, but panics if an error occurs. func (_u *SpecUpdate) SaveX(ctx context.Context) int { affected, err := _u.Save(ctx) if err != nil { panic(err) } return affected } // Exec executes the query. func (_u *SpecUpdate) Exec(ctx context.Context) error { _, err := _u.Save(ctx) return err } // ExecX is like Exec, but panics if an error occurs. func (_u *SpecUpdate) ExecX(ctx context.Context) { if err := _u.Exec(ctx); err != nil { panic(err) } } func (_u *SpecUpdate) gremlinSave(ctx context.Context) (int, error) { res := &gremlin.Response{} query, bindings := _u.gremlin().Query() if err := _u.driver.Exec(ctx, query, bindings, res); err != nil { return 0, err } if err, ok := isConstantError(res); ok { return 0, err } _u.mutation.done = true return res.ReadInt() } func (_u *SpecUpdate) gremlin() *dsl.Traversal { v := g.V().HasLabel(spec.Label) for _, p := range _u.mutation.Predicates() { p(v) } var ( rv = v.Clone() _ = rv trs []*dsl.Traversal ) for _, id := range _u.mutation.RemovedCardIDs() { tr := rv.Clone().OutE(spec.CardLabel).Where(__.OtherV().HasID(id)).Drop().Iterate() trs = append(trs, tr) } for _, id := range _u.mutation.CardIDs() { v.AddE(spec.CardLabel).To(g.V(id)).OutV() } v.Count() trs = append(trs, v) return dsl.Join(trs...) } // SpecUpdateOne is the builder for updating a single Spec entity. type SpecUpdateOne struct { config fields []string hooks []Hook mutation *SpecMutation } // AddCardIDs adds the "card" edge to the Card entity by IDs. func (_u *SpecUpdateOne) AddCardIDs(ids ...string) *SpecUpdateOne { _u.mutation.AddCardIDs(ids...) return _u } // AddCard adds the "card" edges to the Card entity. func (_u *SpecUpdateOne) AddCard(v ...*Card) *SpecUpdateOne { ids := make([]string, len(v)) for i := range v { ids[i] = v[i].ID } return _u.AddCardIDs(ids...) } // Mutation returns the SpecMutation object of the builder. func (_u *SpecUpdateOne) Mutation() *SpecMutation { return _u.mutation } // ClearCard clears all "card" edges to the Card entity. func (_u *SpecUpdateOne) ClearCard() *SpecUpdateOne { _u.mutation.ClearCard() return _u } // RemoveCardIDs removes the "card" edge to Card entities by IDs. func (_u *SpecUpdateOne) RemoveCardIDs(ids ...string) *SpecUpdateOne { _u.mutation.RemoveCardIDs(ids...) return _u } // RemoveCard removes "card" edges to Card entities. func (_u *SpecUpdateOne) RemoveCard(v ...*Card) *SpecUpdateOne { ids := make([]string, len(v)) for i := range v { ids[i] = v[i].ID } return _u.RemoveCardIDs(ids...) } // Where appends a list predicates to the SpecUpdate builder. func (_u *SpecUpdateOne) Where(ps ...predicate.Spec) *SpecUpdateOne { _u.mutation.Where(ps...) return _u } // Select allows selecting one or more fields (columns) of the returned entity. // The default is selecting all fields defined in the entity schema. func (_u *SpecUpdateOne) Select(field string, fields ...string) *SpecUpdateOne { _u.fields = append([]string{field}, fields...) return _u } // Save executes the query and returns the updated Spec entity. func (_u *SpecUpdateOne) Save(ctx context.Context) (*Spec, error) { return withHooks(ctx, _u.gremlinSave, _u.mutation, _u.hooks) } // SaveX is like Save, but panics if an error occurs. func (_u *SpecUpdateOne) SaveX(ctx context.Context) *Spec { node, err := _u.Save(ctx) if err != nil { panic(err) } return node } // Exec executes the query on the entity. func (_u *SpecUpdateOne) Exec(ctx context.Context) error { _, err := _u.Save(ctx) return err } // ExecX is like Exec, but panics if an error occurs. func (_u *SpecUpdateOne) ExecX(ctx context.Context) { if err := _u.Exec(ctx); err != nil { panic(err) } } func (_u *SpecUpdateOne) gremlinSave(ctx context.Context) (*Spec, error) { res := &gremlin.Response{} id, ok := _u.mutation.ID() if !ok { return nil, &ValidationError{Name: "id", err: errors.New(`ent: missing "Spec.id" for update`)} } query, bindings := _u.gremlin(id).Query() if err := _u.driver.Exec(ctx, query, bindings, res); err != nil { return nil, err } if err, ok := isConstantError(res); ok { return nil, err } _u.mutation.done = true _m := &Spec{config: _u.config} if err := _m.FromResponse(res); err != nil { return nil, err } return _m, nil } func (_u *SpecUpdateOne) gremlin(id string) *dsl.Traversal { v := g.V(id) var ( rv = v.Clone() _ = rv trs []*dsl.Traversal ) for _, id := range _u.mutation.RemovedCardIDs() { tr := rv.Clone().OutE(spec.CardLabel).Where(__.OtherV().HasID(id)).Drop().Iterate() trs = append(trs, tr) } for _, id := range _u.mutation.CardIDs() { v.AddE(spec.CardLabel).To(g.V(id)).OutV() } if len(_u.fields) > 0 { fields := make([]any, 0, len(_u.fields)+1) fields = append(fields, true) for _, f := range _u.fields { fields = append(fields, f) } v.ValueMap(fields...) } else { v.ValueMap(true) } trs = append(trs, v) return dsl.Join(trs...) }