1package norm
2
3import (
4 "context"
5 "database/sql"
6 "fmt"
7 "strings"
8)
9
10type delete_ struct {
11 from string
12 where *Expr
13}
14
15func Delete() delete_ {
16 return delete_{}
17}
18
19type DeleteOpt func(s *delete_)
20
21func (s delete_) From(table string) delete_ {
22 s.from = table
23 return s
24}
25
26func (s delete_) Where(expr Expr) delete_ {
27 s.where = &expr
28 return s
29}
30
31func (s delete_) Compile() (string, []any, error) {
32 var sql strings.Builder
33 var args []any
34
35 sql.WriteString("DELETE")
36
37 if s.from == "" {
38 return "", nil, fmt.Errorf("FROM clause is required")
39 }
40 sql.WriteString(" FROM ")
41 sql.WriteString(s.from)
42
43 if s.where != nil {
44 sql.WriteString(" WHERE ")
45 sql.WriteString(s.where.String())
46
47 args = s.where.Binds()
48 }
49
50 return sql.String(), args, nil
51}
52
53func (s delete_) MustCompile() (string, []any) {
54 sql, args, err := s.Compile()
55 if err != nil {
56 panic(err)
57 }
58
59 return sql, args
60}
61
62func (s delete_) Build(p Database) (*sql.Stmt, []any, error) { return Build(s, p) }
63func (s delete_) MustBuild(p Database) (*sql.Stmt, []any) { return MustBuild(s, p) }
64
65func (s delete_) Exec(p Database) (sql.Result, error) { return Exec(s, p) }
66func (s delete_) ExecContext(ctx context.Context, p Database) (sql.Result, error) {
67 return ExecContext(ctx, s, p)
68}
69func (s delete_) MustExec(p Database) sql.Result { return MustExec(s, p) }
70func (s delete_) MustExecContext(ctx context.Context, p Database) sql.Result {
71 return MustExecContext(ctx, s, p)
72}