(ctx context.Context, req *connect.Request[v1pb.GetSchemaStringRequest])
| 1040 | } |
| 1041 | |
| 1042 | func (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 { |
nothing calls this directly
no test coverage detected