MCPcopy Create free account
hub / github.com/bytebase/bytebase / UpsertSetting

Method UpsertSetting

backend/store/setting.go:322–370  ·  view source on GitHub ↗

UpsertSetting upserts the setting by name.

(ctx context.Context, update *SettingMessage)

Source from the content-addressed store, hash-verified

320
321// UpsertSetting upserts the setting by name.
322func (s *Store) UpsertSetting(ctx context.Context, update *SettingMessage) (*SettingMessage, error) {
323 valueBytes, err := protojson.Marshal(update.Value)
324 if err != nil {
325 return nil, errors.Wrap(err, "failed to marshal setting value")
326 }
327
328 q := qb.Q().Space(`
329 INSERT INTO setting (name, workspace, value)
330 VALUES (?, ?, ?)
331 ON CONFLICT (name, workspace) DO UPDATE SET value = EXCLUDED.value
332 RETURNING name, workspace, value
333 `, update.Name.String(), update.Workspace, string(valueBytes))
334
335 query, args, err := q.ToSQL()
336 if err != nil {
337 return nil, errors.Wrapf(err, "failed to build sql")
338 }
339
340 var setting SettingMessage
341 var nameString string
342 var valueString string
343 if err := s.GetDB().QueryRowContext(ctx, query, args...).Scan(
344 &nameString,
345 &setting.Workspace,
346 &valueString,
347 ); err != nil {
348 if err == sql.ErrNoRows {
349 return nil, &common.Error{Code: common.NotFound, Err: errors.Errorf("setting not found: %s", update.Name)}
350 }
351 return nil, err
352 }
353 value, ok := storepb.SettingName_value[nameString]
354 if !ok {
355 return nil, errors.Errorf("invalid setting name string: %s", nameString)
356 }
357 setting.Name = storepb.SettingName(value)
358
359 msg, err := getSettingMessage(setting.Name)
360 if err != nil {
361 return nil, err
362 }
363 if err := common.ProtojsonUnmarshaler.Unmarshal([]byte(valueString), msg); err != nil {
364 return nil, err
365 }
366 setting.Value = msg
367
368 s.settingCache.Add(getSettingCacheKey(setting.Workspace, setting.Name), &setting)
369 return &setting, nil
370}
371
372// DeleteSetting deletes a setting by the name.
373func (s *Store) DeleteSetting(ctx context.Context, workspace string, name storepb.SettingName) error {

Callers 2

UpdateLicenseMethod · 0.95
UpdateSettingMethod · 0.80

Calls 10

GetDBMethod · 0.95
QFunction · 0.92
getSettingMessageFunction · 0.85
getSettingCacheKeyFunction · 0.85
SpaceMethod · 0.80
ToSQLMethod · 0.80
ScanMethod · 0.80
ErrorfMethod · 0.80
UnmarshalMethod · 0.80
StringMethod · 0.65

Tested by

no test coverage detected