github.com/wanlay/gorm-dm8@v1.0.5/clauses/when_matched.go (about) 1 package clauses 2 3 import ( 4 "gorm.io/gorm/clause" 5 ) 6 7 type WhenMatched struct { 8 clause.Set 9 Where, Delete clause.Where 10 } 11 12 func (w WhenMatched) Name() string { 13 return "WHEN MATCHED" 14 } 15 16 func (w WhenMatched) Build(builder clause.Builder) { 17 if len(w.Set) > 0 { 18 builder.WriteString("THEN") 19 builder.WriteString(" UPDATE") 20 builder.WriteString(" SET") 21 builder.WriteByte(' ') 22 w.Set.Build(builder) 23 24 buildWhere := func(where clause.Where) { 25 builder.WriteString(where.Name()) 26 builder.WriteByte(' ') 27 where.Build(builder) 28 } 29 30 if len(w.Where.Exprs) > 0 { 31 buildWhere(w.Where) 32 } 33 34 if len(w.Delete.Exprs) > 0 { 35 builder.WriteString(" DELETE ") 36 buildWhere(w.Delete) 37 } 38 } 39 } 40 41 func (w WhenMatched) MergeClause(clause *clause.Clause) { 42 clause.Name = w.Name() 43 clause.Expression = w 44 }