(_ context.Context, req *connect.Request[v1pb.DiffMetadataRequest])
| 2176 | } |
| 2177 | |
| 2178 | func (*SQLService) DiffMetadata(_ context.Context, req *connect.Request[v1pb.DiffMetadataRequest]) (*connect.Response[v1pb.DiffMetadataResponse], error) { |
| 2179 | request := req.Msg |
| 2180 | switch request.Engine { |
| 2181 | case v1pb.Engine_MYSQL, v1pb.Engine_POSTGRES, v1pb.Engine_TIDB, v1pb.Engine_ORACLE, v1pb.Engine_MSSQL: |
| 2182 | default: |
| 2183 | return nil, connect.NewError(connect.CodeInvalidArgument, errors.Errorf("unsupported engine: %v", request.Engine)) |
| 2184 | } |
| 2185 | if request.SourceMetadata == nil || request.TargetMetadata == nil { |
| 2186 | return nil, connect.NewError(connect.CodeInvalidArgument, errors.Errorf("source_metadata and target_metadata are required")) |
| 2187 | } |
| 2188 | storeSourceMetadata := convertV1DatabaseMetadata(request.SourceMetadata) |
| 2189 | storeTargetMetadata := convertV1DatabaseMetadata(request.TargetMetadata) |
| 2190 | |
| 2191 | // Convert metadata to model.DatabaseMetadata for diffing |
| 2192 | isObjectCaseSensitive := true |
| 2193 | sourceDBSchema := model.NewDatabaseMetadata(storeSourceMetadata, nil, nil, storepb.Engine(request.Engine), isObjectCaseSensitive) |
| 2194 | targetDBSchema := model.NewDatabaseMetadata(storeTargetMetadata, nil, nil, storepb.Engine(request.Engine), isObjectCaseSensitive) |
| 2195 | |
| 2196 | migrationSQL, err := schema.DiffMigration(storepb.Engine(request.Engine), sourceDBSchema, targetDBSchema) |
| 2197 | if err != nil { |
| 2198 | return nil, connect.NewError(connect.CodeInternal, errors.Wrapf(err, "failed to compute diff between source and target schemas")) |
| 2199 | } |
| 2200 | |
| 2201 | return connect.NewResponse(&v1pb.DiffMetadataResponse{ |
| 2202 | Diff: migrationSQL, |
| 2203 | }), nil |
| 2204 | } |
| 2205 | |
| 2206 | func resolveDataSourceID(ctx context.Context, instance *store.InstanceMessage, dataSourceID string, statement string, allowAdminDataSource bool) (string, error) { |
| 2207 | if dataSourceID != "" { |
nothing calls this directly
no test coverage detected