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

Method GetDatabaseSDLSchema

backend/api/v1/database_service.go:619–681  ·  view source on GitHub ↗

GetDatabaseSDLSchema gets the SDL schema of a database.

(ctx context.Context, req *connect.Request[v1pb.GetDatabaseSDLSchemaRequest])

Source from the content-addressed store, hash-verified

617
618// GetDatabaseSDLSchema gets the SDL schema of a database.
619func (s *DatabaseService) GetDatabaseSDLSchema(ctx context.Context, req *connect.Request[v1pb.GetDatabaseSDLSchemaRequest]) (*connect.Response[v1pb.DatabaseSDLSchema], error) {
620 instanceID, databaseName, err := common.TrimSuffixAndGetInstanceDatabaseID(req.Msg.Name, common.SDLSchemaSuffix)
621 if err != nil {
622 return nil, connect.NewError(connect.CodeInvalidArgument, errors.Errorf("%v", err.Error()))
623 }
624
625 database, err := s.store.GetDatabase(ctx, &store.FindDatabaseMessage{
626 Workspace: common.GetWorkspaceIDFromContext(ctx),
627 InstanceID: &instanceID,
628 DatabaseName: &databaseName,
629 ShowDeleted: true,
630 })
631 if err != nil {
632 return nil, connect.NewError(connect.CodeInternal, errors.Errorf("%v", err.Error()))
633 }
634 if database == nil {
635 return nil, connect.NewError(connect.CodeNotFound, errors.Errorf("database %q not found", databaseName))
636 }
637 dbMetadata, err := s.store.GetDBSchema(ctx, &store.FindDBSchemaMessage{
638 Workspace: common.GetWorkspaceIDFromContext(ctx),
639 InstanceID: instanceID,
640 DatabaseName: databaseName,
641 })
642 if err != nil {
643 return nil, connect.NewError(connect.CodeInternal, errors.Errorf("%v", err.Error()))
644 }
645 if dbMetadata == nil {
646 if err := s.schemaSyncer.SyncDatabaseSchema(ctx, database); err != nil {
647 return nil, connect.NewError(connect.CodeInternal, errors.Errorf("failed to sync database schema for database %q, error %v", databaseName, err))
648 }
649 newDBSchema, err := s.store.GetDBSchema(ctx, &store.FindDBSchemaMessage{
650 Workspace: common.GetWorkspaceIDFromContext(ctx),
651 InstanceID: database.InstanceID,
652 DatabaseName: database.DatabaseName,
653 })
654 if err != nil {
655 return nil, connect.NewError(connect.CodeInternal, errors.Errorf("%v", err.Error()))
656 }
657 if newDBSchema == nil {
658 return nil, connect.NewError(connect.CodeNotFound, errors.Errorf("database schema %q not found", databaseName))
659 }
660 dbMetadata = newDBSchema
661 }
662
663 metadata := dbMetadata.GetProto()
664 if metadata == nil {
665 return nil, connect.NewError(connect.CodeInternal, errors.Errorf("database metadata not found for database %q", databaseName))
666 }
667
668 format := req.Msg.Format
669 if format == v1pb.GetDatabaseSDLSchemaRequest_SDL_FORMAT_UNSPECIFIED {
670 format = v1pb.GetDatabaseSDLSchemaRequest_SINGLE_FILE
671 }
672
673 switch format {
674 case v1pb.GetDatabaseSDLSchemaRequest_SINGLE_FILE:
675 return s.getSingleFileSDL(database.Engine, metadata)
676 case v1pb.GetDatabaseSDLSchemaRequest_MULTI_FILE:

Callers

nothing calls this directly

Calls 10

getSingleFileSDLMethod · 0.95
getMultiFileSDLMethod · 0.95
ErrorfMethod · 0.80
GetDBSchemaMethod · 0.80
SyncDatabaseSchemaMethod · 0.80
GetDatabaseMethod · 0.65
ErrorMethod · 0.45
GetProtoMethod · 0.45

Tested by

no test coverage detected