MCPcopy Index your code
hub / github.com/bytebase/bytebase / GetSchemaString

Method GetSchemaString

backend/api/v1/database_service.go:1042–1197  ·  view source on GitHub ↗
(ctx context.Context, req *connect.Request[v1pb.GetSchemaStringRequest])

Source from the content-addressed store, hash-verified

1040}
1041
1042func (s *DatabaseService) GetSchemaString(ctx context.Context, req *connect.Request[v1pb.GetSchemaStringRequest]) (*connect.Response[v1pb.GetSchemaStringResponse], error) {
1043 instanceID, databaseName, err := common.TrimSuffixAndGetInstanceDatabaseID(req.Msg.Name, common.SchemaStringSuffix)
1044 if err != nil {
1045 return nil, connect.NewError(connect.CodeInvalidArgument, errors.Wrapf(err, "failed to parse %q", req.Msg.Name))
1046 }
1047 database, err := s.store.GetDatabase(ctx, &store.FindDatabaseMessage{
1048 Workspace: common.GetWorkspaceIDFromContext(ctx),
1049 InstanceID: &instanceID,
1050 DatabaseName: &databaseName,
1051 ShowDeleted: true,
1052 })
1053 if err != nil {
1054 return nil, connect.NewError(connect.CodeInternal, errors.Wrapf(err, "failed to get database %q", req.Msg.Name))
1055 }
1056 if database == nil {
1057 return nil, connect.NewError(connect.CodeNotFound, errors.Errorf("database %q not found", req.Msg.Name))
1058 }
1059 dbMetadata, err := s.store.GetDBSchema(ctx, &store.FindDBSchemaMessage{
1060 Workspace: common.GetWorkspaceIDFromContext(ctx),
1061 InstanceID: instanceID,
1062 DatabaseName: databaseName,
1063 })
1064 if err != nil {
1065 return nil, connect.NewError(connect.CodeInternal, errors.Errorf("Failed to get database schema: %v", err))
1066 }
1067
1068 switch req.Msg.Type {
1069 case v1pb.GetSchemaStringRequest_OBJECT_TYPE_UNSPECIFIED:
1070 if req.Msg.Metadata == nil {
1071 return nil, connect.NewError(connect.CodeInvalidArgument, errors.Errorf("metadata is required"))
1072 }
1073 storeSchema := convertV1DatabaseMetadata(req.Msg.Metadata)
1074 s, err := schema.GetDatabaseDefinition(database.Engine, schema.GetDefinitionContext{
1075 SkipBackupSchema: false,
1076 PrintHeader: false,
1077 }, storeSchema)
1078 if err != nil {
1079 return nil, connect.NewError(connect.CodeInternal, errors.Errorf("Failed to get database schema: %v", err))
1080 }
1081 return connect.NewResponse(&v1pb.GetSchemaStringResponse{SchemaString: s}), nil
1082 case v1pb.GetSchemaStringRequest_DATABASE:
1083 metadata := dbMetadata.GetProto()
1084 s, err := schema.GetDatabaseDefinition(database.Engine, schema.GetDefinitionContext{
1085 SkipBackupSchema: false,
1086 PrintHeader: false,
1087 }, metadata)
1088 if err != nil {
1089 return nil, connect.NewError(connect.CodeInternal, errors.Errorf("Failed to get database schema: %v", err))
1090 }
1091 return connect.NewResponse(&v1pb.GetSchemaStringResponse{SchemaString: s}), nil
1092 case v1pb.GetSchemaStringRequest_SCHEMA:
1093 schemaMetadata := dbMetadata.GetSchemaMetadata(req.Msg.Schema)
1094 if schemaMetadata == nil {
1095 return nil, connect.NewError(connect.CodeNotFound, errors.Errorf("schema %q not found", req.Msg.Schema))
1096 }
1097
1098 s, err := schema.GetSchemaDefinition(database.Engine, schemaMetadata.GetProto())
1099 if err != nil {

Callers

nothing calls this directly

Calls 15

GetDatabaseDefinitionFunction · 0.92
GetSchemaDefinitionFunction · 0.92
GetTableDefinitionFunction · 0.92
GetViewDefinitionFunction · 0.92
GetFunctionDefinitionFunction · 0.92
GetProcedureDefinitionFunction · 0.92
GetSequenceDefinitionFunction · 0.92
ErrorfMethod · 0.80

Tested by

no test coverage detected