//Update update resource in the db func (tx *Transaction) Update(resource *schema.Resource) error { s := resource.Schema() data := resource.Data() db := tx.db q := sq.Update(quote(s.GetDbTableName())) for _, attr := range s.Properties { //TODO(nati) support optional value if _, ok := data[attr.ID]; ok { handler := db.handler(&attr) encoded, err := handler.encode(&attr, data[attr.ID]) if err != nil { return fmt.Errorf("SQL Update encoding error: %s", err) } q = q.Set(quote(attr.ID), encoded) } } if s.Parent != "" { q.Set(s.ParentSchemaPropertyID(), resource.ParentID()) } q = q.Where(sq.Eq{"id": resource.ID()}) sql, args, err := q.ToSql() if err != nil { return err } return tx.Exec(sql, args...) }
func (tx *Transaction) updateQuery(resource *schema.Resource) (sq.UpdateBuilder, error) { s := resource.Schema() db := tx.db data := resource.Data() q := sq.Update(quote(s.GetDbTableName())) for _, attr := range s.Properties { //TODO(nati) support optional value if _, ok := data[attr.ID]; ok { handler := db.handler(&attr) encoded, err := handler.encode(&attr, data[attr.ID]) if err != nil { return q, fmt.Errorf("SQL Update encoding error: %s", err) } q = q.Set(quote(attr.ID), encoded) } } if s.Parent != "" { q = q.Set(s.ParentSchemaPropertyID(), resource.ParentID()) } return q, nil }