diffSchemaViaSDL handles PG/CockroachDB DiffSchema using omni SDL diff.
(ctx context.Context, req *v1pb.DiffSchemaRequest, engine storepb.Engine)
| 725 | |
| 726 | // diffSchemaViaSDL handles PG/CockroachDB DiffSchema using omni SDL diff. |
| 727 | func (s *DatabaseService) diffSchemaViaSDL(ctx context.Context, req *v1pb.DiffSchemaRequest, engine storepb.Engine) (string, error) { |
| 728 | sourceMetadata, err := s.getSourceDBMetadata(ctx, req) |
| 729 | if err != nil { |
| 730 | return "", err |
| 731 | } |
| 732 | sourceSDL, err := schema.MetadataToSDL(engine, sourceMetadata) |
| 733 | if err != nil { |
| 734 | return "", errors.Wrap(err, "failed to generate source SDL") |
| 735 | } |
| 736 | |
| 737 | // Resolve target schema text. |
| 738 | var targetSDL string |
| 739 | switch { |
| 740 | case req.GetSchema() != "": |
| 741 | // Schema text from GetDatabaseSchema (raw dump) — passed directly. |
| 742 | // pgDiffSDLMigration handles LoadSDL/LoadSQL fallback internally. |
| 743 | targetSDL = req.GetSchema() |
| 744 | case req.GetChangelog() != "": |
| 745 | targetMetadata, err := s.getSourceDBMetadata(ctx, &v1pb.DiffSchemaRequest{Name: req.GetChangelog()}) |
| 746 | if err != nil { |
| 747 | return "", errors.Wrap(err, "failed to resolve target changelog") |
| 748 | } |
| 749 | targetSDL, err = schema.MetadataToSDL(engine, targetMetadata) |
| 750 | if err != nil { |
| 751 | return "", errors.Wrap(err, "failed to generate target SDL") |
| 752 | } |
| 753 | default: |
| 754 | return "", errors.Errorf("target must be either schema text or changelog") |
| 755 | } |
| 756 | |
| 757 | return schema.DiffSDLMigration(engine, sourceSDL, targetSDL) |
| 758 | } |
| 759 | |
| 760 | func (s *DatabaseService) getSourceDBMetadata(ctx context.Context, request *v1pb.DiffSchemaRequest) (*model.DatabaseMetadata, error) { |
| 761 | if strings.Contains(request.Name, common.ChangelogPrefix) { |
no test coverage detected