UpsertDatabase upserts a database.
(ctx context.Context, create *DatabaseMessage)
| 290 | |
| 291 | // UpsertDatabase upserts a database. |
| 292 | func (s *Store) UpsertDatabase(ctx context.Context, create *DatabaseMessage) (*DatabaseMessage, error) { |
| 293 | metadataString, err := protojson.Marshal(create.Metadata) |
| 294 | if err != nil { |
| 295 | return nil, err |
| 296 | } |
| 297 | |
| 298 | var environment *string |
| 299 | if create.EnvironmentID != nil && *create.EnvironmentID != "" { |
| 300 | environment = create.EnvironmentID |
| 301 | } |
| 302 | |
| 303 | q := qb.Q().Space(` |
| 304 | INSERT INTO db ( |
| 305 | instance, |
| 306 | project, |
| 307 | environment, |
| 308 | name, |
| 309 | deleted, |
| 310 | metadata |
| 311 | ) |
| 312 | VALUES (?, ?, ?, ?, ?, ?) |
| 313 | ON CONFLICT (instance, name) DO UPDATE SET |
| 314 | project = EXCLUDED.project, |
| 315 | environment = EXCLUDED.environment, |
| 316 | name = EXCLUDED.name, |
| 317 | metadata = EXCLUDED.metadata`, |
| 318 | create.InstanceID, |
| 319 | create.ProjectID, |
| 320 | environment, |
| 321 | create.DatabaseName, |
| 322 | create.Deleted, |
| 323 | metadataString, |
| 324 | ) |
| 325 | |
| 326 | query, args, err := q.ToSQL() |
| 327 | if err != nil { |
| 328 | return nil, errors.Wrapf(err, "failed to build sql") |
| 329 | } |
| 330 | |
| 331 | if _, err := s.GetDB().ExecContext(ctx, query, args...); err != nil { |
| 332 | return nil, err |
| 333 | } |
| 334 | |
| 335 | // Invalidate and update the cache. |
| 336 | s.removeDatabaseCache(ctx, create.InstanceID, create.DatabaseName) |
| 337 | return s.GetDatabase(ctx, &FindDatabaseMessage{InstanceID: &create.InstanceID, DatabaseName: &create.DatabaseName, ShowDeleted: true}) |
| 338 | } |
| 339 | |
| 340 | // UpdateDatabase updates a database. |
| 341 | func (s *Store) UpdateDatabase(ctx context.Context, patch *UpdateDatabaseMessage) (*DatabaseMessage, error) { |
no test coverage detected