GetDatabaseSchema gets the schema of a database.
(ctx context.Context, req *connect.Request[v1pb.GetDatabaseSchemaRequest])
| 570 | |
| 571 | // GetDatabaseSchema gets the schema of a database. |
| 572 | func (s *DatabaseService) GetDatabaseSchema(ctx context.Context, req *connect.Request[v1pb.GetDatabaseSchemaRequest]) (*connect.Response[v1pb.DatabaseSchema], error) { |
| 573 | instanceID, databaseName, err := common.TrimSuffixAndGetInstanceDatabaseID(req.Msg.Name, common.SchemaSuffix) |
| 574 | if err != nil { |
| 575 | return nil, connect.NewError(connect.CodeInvalidArgument, errors.Errorf("%v", err.Error())) |
| 576 | } |
| 577 | database, err := s.store.GetDatabase(ctx, &store.FindDatabaseMessage{ |
| 578 | Workspace: common.GetWorkspaceIDFromContext(ctx), |
| 579 | InstanceID: &instanceID, |
| 580 | DatabaseName: &databaseName, |
| 581 | ShowDeleted: true, |
| 582 | }) |
| 583 | if err != nil { |
| 584 | return nil, connect.NewError(connect.CodeInternal, errors.Errorf("%v", err.Error())) |
| 585 | } |
| 586 | if database == nil { |
| 587 | return nil, connect.NewError(connect.CodeNotFound, errors.Errorf("database %q not found", databaseName)) |
| 588 | } |
| 589 | dbMetadata, err := s.store.GetDBSchema(ctx, &store.FindDBSchemaMessage{ |
| 590 | Workspace: common.GetWorkspaceIDFromContext(ctx), |
| 591 | InstanceID: database.InstanceID, |
| 592 | DatabaseName: database.DatabaseName, |
| 593 | }) |
| 594 | if err != nil { |
| 595 | return nil, connect.NewError(connect.CodeInternal, errors.Errorf("%v", err.Error())) |
| 596 | } |
| 597 | if dbMetadata == nil { |
| 598 | if err := s.schemaSyncer.SyncDatabaseSchema(ctx, database); err != nil { |
| 599 | return nil, connect.NewError(connect.CodeInternal, errors.Errorf("failed to sync database schema for database %q, error %v", databaseName, err)) |
| 600 | } |
| 601 | newDBSchema, err := s.store.GetDBSchema(ctx, &store.FindDBSchemaMessage{ |
| 602 | Workspace: common.GetWorkspaceIDFromContext(ctx), |
| 603 | InstanceID: database.InstanceID, |
| 604 | DatabaseName: database.DatabaseName, |
| 605 | }) |
| 606 | if err != nil { |
| 607 | return nil, connect.NewError(connect.CodeInternal, errors.Errorf("%v", err.Error())) |
| 608 | } |
| 609 | if newDBSchema == nil { |
| 610 | return nil, connect.NewError(connect.CodeNotFound, errors.Errorf("database schema %q not found", databaseName)) |
| 611 | } |
| 612 | dbMetadata = newDBSchema |
| 613 | } |
| 614 | schemaString := string(dbMetadata.GetRawDump()) |
| 615 | return connect.NewResponse(&v1pb.DatabaseSchema{Schema: schemaString}), nil |
| 616 | } |
| 617 | |
| 618 | // GetDatabaseSDLSchema gets the SDL schema of a database. |
| 619 | func (s *DatabaseService) GetDatabaseSDLSchema(ctx context.Context, req *connect.Request[v1pb.GetDatabaseSDLSchemaRequest]) (*connect.Response[v1pb.DatabaseSDLSchema], error) { |
nothing calls this directly
no test coverage detected