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

Method GetDatabaseMetadata

backend/api/v1/database_service.go:514–569  ·  view source on GitHub ↗

GetDatabaseMetadata gets the metadata of a database.

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

Source from the content-addressed store, hash-verified

512
513// GetDatabaseMetadata gets the metadata of a database.
514func (s *DatabaseService) GetDatabaseMetadata(ctx context.Context, req *connect.Request[v1pb.GetDatabaseMetadataRequest]) (*connect.Response[v1pb.DatabaseMetadata], error) {
515 name, err := common.TrimSuffix(req.Msg.Name, common.MetadataSuffix)
516 if err != nil {
517 return nil, connect.NewError(connect.CodeInvalidArgument, errors.Errorf("%v", err.Error()))
518 }
519 instanceID, databaseName, err := common.GetInstanceDatabaseID(name)
520 if err != nil {
521 return nil, connect.NewError(connect.CodeInvalidArgument, errors.Wrapf(err, "failed to parse %q", name))
522 }
523 database, err := s.store.GetDatabase(ctx, &store.FindDatabaseMessage{
524 Workspace: common.GetWorkspaceIDFromContext(ctx),
525 InstanceID: &instanceID,
526 DatabaseName: &databaseName,
527 ShowDeleted: true,
528 })
529 if err != nil {
530 return nil, connect.NewError(connect.CodeInternal, errors.Wrapf(err, "failed to get database"))
531 }
532 if database == nil {
533 return nil, connect.NewError(connect.CodeNotFound, errors.Errorf("database %q not found", name))
534 }
535 dbMetadata, err := s.store.GetDBSchema(ctx, &store.FindDBSchemaMessage{
536 Workspace: common.GetWorkspaceIDFromContext(ctx),
537 InstanceID: database.InstanceID,
538 DatabaseName: database.DatabaseName,
539 })
540 if err != nil {
541 return nil, connect.NewError(connect.CodeInternal, errors.Errorf("%v", err.Error()))
542 }
543 if dbMetadata == nil {
544 if err := s.schemaSyncer.SyncDatabaseSchema(ctx, database); err != nil {
545 return nil, connect.NewError(connect.CodeInternal, errors.Errorf("failed to sync database schema for database %q, error %v", name, err))
546 }
547 newDBSchema, err := s.store.GetDBSchema(ctx, &store.FindDBSchemaMessage{
548 Workspace: common.GetWorkspaceIDFromContext(ctx),
549 InstanceID: database.InstanceID,
550 DatabaseName: database.DatabaseName,
551 })
552 if err != nil {
553 return nil, connect.NewError(connect.CodeInternal, errors.Errorf("%v", err.Error()))
554 }
555 if newDBSchema == nil {
556 return nil, connect.NewError(connect.CodeNotFound, errors.Errorf("database schema %q not found", name))
557 }
558 dbMetadata = newDBSchema
559 }
560
561 filter, err := getDatabaseMetadataFilter(req.Msg.Filter)
562 if err != nil {
563 return nil, err
564 }
565 v1pbMetadata := convertStoreDatabaseMetadata(dbMetadata.GetProto(), filter, int(req.Msg.Limit))
566 v1pbMetadata.Name = fmt.Sprintf("%s%s/%s%s%s", common.InstanceNamePrefix, database.InstanceID, common.DatabaseIDPrefix, database.DatabaseName, common.MetadataSuffix)
567
568 return connect.NewResponse(v1pbMetadata), nil
569}
570
571// GetDatabaseSchema gets the schema of a database.

Callers

nothing calls this directly

Calls 11

TrimSuffixFunction · 0.92
GetInstanceDatabaseIDFunction · 0.92
ErrorfMethod · 0.80
GetDBSchemaMethod · 0.80
SyncDatabaseSchemaMethod · 0.80
GetDatabaseMethod · 0.65
ErrorMethod · 0.45
GetProtoMethod · 0.45

Tested by

no test coverage detected