diff --git a/.gitignore b/.gitignore index 4a0699f0..92e6d894 100644 --- a/.gitignore +++ b/.gitignore @@ -1 +1,2 @@ -squirrel.test \ No newline at end of file +squirrel.test +.idea \ No newline at end of file diff --git a/update.go b/update.go index eb2a9c4d..8a227495 100644 --- a/update.go +++ b/update.go @@ -226,6 +226,15 @@ func (b UpdateBuilder) Set(column string, value interface{}) UpdateBuilder { return builder.Append(b, "SetClauses", setClause{column: column, value: value}).(UpdateBuilder) } +// SetCoalesceNullIf sets the column to COALESCE(NULLIF(?, zeroValue), column). +func (b UpdateBuilder) SetCoalesceNullIf(column string, value, zeroValue interface{}) UpdateBuilder { + expr := Expr(fmt.Sprintf("COALESCE(NULLIF(?, ?), %s)", column), value, zeroValue) + return builder.Append(b, "SetClauses", setClause{ + column: column, + value: expr, + }).(UpdateBuilder) +} + // SetMap is a convenience method which calls .Set for each key/value pair in clauses. func (b UpdateBuilder) SetMap(clauses map[string]interface{}) UpdateBuilder { keys := make([]string, len(clauses))