github.com/eden-framework/sqlx@v0.0.2/builder/stmt_update.go (about) 1 package builder 2 3 import ( 4 "context" 5 "errors" 6 ) 7 8 var ( 9 UpdateNeedLimitByWhere = errors.New("no where limit for update") 10 ) 11 12 func Update(table *Table, modifiers ...string) *StmtUpdate { 13 return &StmtUpdate{ 14 table: table, 15 modifiers: modifiers, 16 } 17 } 18 19 type StmtUpdate struct { 20 table *Table 21 modifiers []string 22 assignments []*Assignment 23 additions []Addition 24 } 25 26 func (s *StmtUpdate) IsNil() bool { 27 return s == nil || IsNilExpr(s.table) || len(s.assignments) == 0 28 } 29 30 func (s StmtUpdate) Set(assignments ...*Assignment) *StmtUpdate { 31 s.assignments = assignments 32 return &s 33 } 34 35 func (s StmtUpdate) Where(c SqlCondition, additions ...Addition) *StmtUpdate { 36 s.additions = []Addition{Where(c)} 37 if len(additions) > 0 { 38 s.additions = append(s.additions, additions...) 39 } 40 return &s 41 } 42 43 func (s *StmtUpdate) Ex(ctx context.Context) *Ex { 44 e := Expr("UPDATE") 45 46 if len(s.modifiers) > 0 { 47 for i := range s.modifiers { 48 e.WriteByte(' ') 49 e.WriteString(s.modifiers[i]) 50 } 51 } 52 53 e.WriteByte(' ') 54 e.WriteExpr(s.table) 55 e.WriteString(" SET ") 56 57 WriteAssignments(e, s.assignments...) 58 WriteAdditions(e, s.additions...) 59 60 return e.Ex(ctx) 61 }