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

Method GetDatabaseSchema

backend/api/v1/database_service.go:572–616  ·  view source on GitHub ↗

GetDatabaseSchema gets the schema of a database.

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

Source from the content-addressed store, hash-verified

570
571// GetDatabaseSchema gets the schema of a database.
572func (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.
619func (s *DatabaseService) GetDatabaseSDLSchema(ctx context.Context, req *connect.Request[v1pb.GetDatabaseSDLSchemaRequest]) (*connect.Response[v1pb.DatabaseSDLSchema], error) {

Callers

nothing calls this directly

Calls 8

ErrorfMethod · 0.80
GetDBSchemaMethod · 0.80
SyncDatabaseSchemaMethod · 0.80
GetRawDumpMethod · 0.80
GetDatabaseMethod · 0.65
ErrorMethod · 0.45

Tested by

no test coverage detected