{{/* 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. */}} {{ define "delete" }} {{ $pkg := base $.Config.Package }} {{ template "header" $ }} {{ template "import" $ }} import ( "{{ $.Config.Package }}/{{ $.Package }}" ) {{ $builder := print (pascal $.Name) "Delete" }} {{ $receiver := receiver $builder }} {{ $mutation := print $receiver ".mutation" }} // {{ $builder }} is the builder for deleting a {{ pascal $.Name }} entity. type {{ $builder }} struct { config hooks []Hook mutation *{{ $.MutationName }} predicates []predicate.{{ $.Name }} } // Where adds a new predicate to the delete builder. func ({{ $receiver }} *{{ $builder }}) Where(ps ...predicate.{{ $.Name }}) *{{ $builder }} { {{ $receiver}}.predicates = append({{ $receiver}}.predicates, ps...) return {{ $receiver }} } // Exec executes the deletion query and returns how many vertices were deleted. func ({{ $receiver}} *{{ $builder }}) Exec(ctx context.Context) (int, error) { var ( err error affected int ) if len({{ $receiver }}.hooks) == 0 { affected, err = {{ $receiver }}.{{ $.Storage }}Exec(ctx) } else { var mut Mutator = MutateFunc(func(ctx context.Context, m Mutation) (Value, error) { mutation, ok := m.(*{{ $.MutationName }}) if !ok { return nil, fmt.Errorf("unexpected mutation type %T", m) } {{ $mutation }} = mutation affected, err = {{ $receiver }}.{{ $.Storage }}Exec(ctx) mutation.done = true return affected, err }) for i := len({{ $receiver }}.hooks) - 1; i >= 0; i-- { mut = {{ $receiver }}.hooks[i](mut) } if _, err := mut.Mutate(ctx, {{ $mutation }}); err != nil { return 0, err } } return affected, err } // ExecX is like Exec, but panics if an error occurs. func ({{ $receiver }} *{{ $builder }}) ExecX(ctx context.Context) int { n, err := {{ $receiver }}.Exec(ctx) if err != nil { panic(err) } return n } {{ with extend $ "Builder" $builder }} {{ $tmpl := printf "dialect/%s/delete" $.Storage }} {{ xtemplate $tmpl . }} {{ end }} {{ $onebuilder := print $builder "One" }} {{ $oneReceiver := receiver $onebuilder }} // {{ $onebuilder }} is the builder for deleting a single {{ $.Name }} entity. type {{ $onebuilder }} struct { {{ $receiver }} *{{ $builder }} } // Exec executes the deletion query. func ({{ $oneReceiver }} *{{ $onebuilder }}) Exec(ctx context.Context) error { n, err := {{ $oneReceiver }}.{{ $receiver }}.Exec(ctx) switch { case err != nil: return err case n == 0: return &NotFoundError{ {{ $.Package }}.Label} default: return nil } } // ExecX is like Exec, but panics if an error occurs. func ({{ $oneReceiver }} *{{ $onebuilder }}) ExecX(ctx context.Context) { {{ $oneReceiver }}.{{ $receiver }}.ExecX(ctx) } {{ end }}