{{ define "delete" }} {{ $pkg := base $.Config.Package }} {{ template "header" $ }} {{ template "import" $ }} {{ $builder := print (pascal $.Name) "Delete" }} {{ $receiver := receiver $builder }} // {{ $builder }} is the builder for deleting a {{ pascal $.Name }} entity. type {{ $builder }} struct { config predicates []predicate.{{ $.Name }} } // Where adds a new predicate for the builder. func ({{ $receiver}} *{{ $builder }}) Where(ps ...predicate.{{ $.Name }}) *{{ $builder }} { {{ $receiver}}.predicates = append({{ $receiver}}.predicates, ps...) return {{ $receiver }} } // Exec executes the deletion query. func ({{ $receiver}} *{{ $builder }}) Exec(ctx context.Context) error { {{- if gt (len $.Storage) 1 -}} switch {{ $receiver }}.driver.Dialect() { {{- range $_, $storage := $.Storage }} case {{ join $storage.Dialects ", " }}: return {{ $receiver }}.{{ $storage }}Exec(ctx) {{- end }} default: return errors.New("{{ $pkg }}: unsupported dialect") } {{- else -}} return {{ $receiver }}.{{ index $.Storage 0 }}Exec(ctx) {{- end }} } // ExecX is like Exec, but panics if an error occurs. func ({{ $receiver }} *{{ $builder }}) ExecX(ctx context.Context) { if err := {{ $receiver }}.Exec(ctx); err != nil { panic(err) } } {{- range $_, $storage := $.Storage }} {{ with extend $ "Builder" $builder }} {{ $tmpl := printf "dialect/%s/delete" $storage }} {{ xtemplate $tmpl . }} {{ end }} {{ 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 { return {{ $oneReceiver }}.{{ $receiver }}.Exec(ctx) } // ExecX is like Exec, but panics if an error occurs. func ({{ $oneReceiver }} *{{ $onebuilder }}) ExecX(ctx context.Context) { {{ $oneReceiver }}.{{ $receiver }}.ExecX(ctx) } {{ end }}