AddSetClause returns a Rule that appends a new assignment to the SET clause of an UPDATE statement. If a column with the same name already exists (case- insensitive), its value is overwritten rather than duplicated. Parameters: - column: the column name to set - valueSQL: a SQL expression string fo
(column, valueSQL string)
| 58 | // |
| 59 | // transform.Apply(stmt, transform.AddSetClause("updated_at", "NOW()")) |
| 60 | func AddSetClause(column, valueSQL string) Rule { |
| 61 | return RuleFunc(func(stmt ast.Statement) error { |
| 62 | upd, ok := stmt.(*ast.UpdateStatement) |
| 63 | if !ok { |
| 64 | return &ErrUnsupportedStatement{Transform: "AddSetClause", Got: stmtTypeName(stmt)} |
| 65 | } |
| 66 | |
| 67 | valueExpr, err := parseValueExpr(valueSQL) |
| 68 | if err != nil { |
| 69 | return fmt.Errorf("AddSetClause: %w", err) |
| 70 | } |
| 71 | |
| 72 | // Replace existing assignment for the same column (case-insensitive). |
| 73 | for i, a := range upd.Assignments { |
| 74 | if strings.EqualFold(identifierName(a.Column), column) { |
| 75 | upd.Assignments[i].Value = valueExpr |
| 76 | return nil |
| 77 | } |
| 78 | } |
| 79 | |
| 80 | // Append a new assignment. |
| 81 | upd.Assignments = append(upd.Assignments, ast.UpdateExpression{ |
| 82 | Column: &ast.Identifier{Name: column}, |
| 83 | Value: valueExpr, |
| 84 | }) |
| 85 | return nil |
| 86 | }) |
| 87 | } |
| 88 | |
| 89 | // SetClause is an alias for AddSetClause. It sets the value of a column in the |
| 90 | // UPDATE SET clause, adding it if not present or replacing it if already there. |