(database string)
| 696 | } |
| 697 | |
| 698 | func (u *updateStatementImpl) String(database string) (sql string, err error) { |
| 699 | if !validIdentifierName(database) { |
| 700 | return "", errors.New("Invalid database name specified") |
| 701 | } |
| 702 | |
| 703 | buf := new(bytes.Buffer) |
| 704 | _, _ = buf.WriteString("UPDATE ") |
| 705 | |
| 706 | if err = writeComment(u.comment, buf); err != nil { |
| 707 | return |
| 708 | } |
| 709 | |
| 710 | if u.table == nil { |
| 711 | return "", errors.Newf("nil table. Generated sql: %s", buf.String()) |
| 712 | } |
| 713 | |
| 714 | if err = u.table.SerializeSql(database, buf); err != nil { |
| 715 | return |
| 716 | } |
| 717 | |
| 718 | if len(u.updateValues) == 0 { |
| 719 | return "", errors.Newf( |
| 720 | "No column updated. Generated sql: %s", |
| 721 | buf.String()) |
| 722 | } |
| 723 | |
| 724 | _, _ = buf.WriteString(" SET ") |
| 725 | addComma := false |
| 726 | |
| 727 | // Sorting is too hard in go, just create a second map ... |
| 728 | updateValues := make(map[string]Expression) |
| 729 | for col, expr := range u.updateValues { |
| 730 | if col == nil { |
| 731 | return "", errors.Newf( |
| 732 | "nil column. Generated sql: %s", |
| 733 | buf.String()) |
| 734 | } |
| 735 | |
| 736 | updateValues[col.Name()] = expr |
| 737 | } |
| 738 | |
| 739 | for _, col := range u.table.Columns() { |
| 740 | val, inMap := updateValues[col.Name()] |
| 741 | if !inMap { |
| 742 | continue |
| 743 | } |
| 744 | |
| 745 | if addComma { |
| 746 | _, _ = buf.WriteString(", ") |
| 747 | } |
| 748 | |
| 749 | if val == nil { |
| 750 | return "", errors.Newf( |
| 751 | "nil value. Generated sql: %s", |
| 752 | buf.String()) |
| 753 | } |
| 754 | |
| 755 | if err = col.SerializeSql(buf); err != nil { |
nothing calls this directly
no test coverage detected