github.com/wanlay/gorm-dm8@v1.0.5/clauses/merge.go (about) 1 package clauses 2 3 import ( 4 "gorm.io/gorm/clause" 5 ) 6 7 type Merge struct { 8 Table clause.Table 9 Using []clause.Interface 10 On []clause.Expression 11 } 12 13 func (merge Merge) Name() string { 14 return "MERGE" 15 } 16 17 func MergeDefaultExcludeName() string { 18 return "excluded" 19 } 20 21 // Build build from clause 22 func (merge Merge) Build(builder clause.Builder) { 23 clause.Insert{}.Build(builder) 24 builder.WriteString(" USING (") 25 for idx, iface := range merge.Using { 26 if idx > 0 { 27 builder.WriteByte(' ') 28 } 29 builder.WriteString(iface.Name()) 30 builder.WriteByte(' ') 31 iface.Build(builder) 32 } 33 builder.WriteString(") ") 34 builder.WriteString(MergeDefaultExcludeName()) 35 builder.WriteString(" ON (") 36 for idx, on := range merge.On { 37 if idx > 0 { 38 builder.WriteString(", ") 39 } 40 on.Build(builder) 41 } 42 builder.WriteString(")") 43 } 44 45 // MergeClause merge values clauses 46 func (merge Merge) MergeClause(clause *clause.Clause) { 47 clause.Name = merge.Name() 48 clause.Expression = merge 49 }