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

Function doGenerate

backend/plugin/parser/tsql/restore.go:67–120  ·  view source on GitHub ↗
(ctx context.Context, rCtx base.RestoreContext, sqlForComment string, node ast.Node, backupItem *storepb.PriorBackupDetail_Item)

Source from the content-addressed store, hash-verified

65}
66
67func doGenerate(ctx context.Context, rCtx base.RestoreContext, sqlForComment string, node ast.Node, backupItem *storepb.PriorBackupDetail_Item) (string, error) {
68 _, sourceDatabase, err := common.GetInstanceDatabaseID(backupItem.SourceTable.Database)
69 if err != nil {
70 return "", errors.Wrapf(err, "failed to get source database ID for %s", backupItem.SourceTable.Database)
71 }
72 _, targetDatabase, err := common.GetInstanceDatabaseID(backupItem.TargetTable.Database)
73 if err != nil {
74 return "", errors.Wrapf(err, "failed to get target database ID for %s", backupItem.TargetTable.Database)
75 }
76
77 if rCtx.GetDatabaseMetadataFunc == nil {
78 return "", errors.Errorf("GetDatabaseMetadataFunc is required")
79 }
80
81 _, metadata, err := rCtx.GetDatabaseMetadataFunc(ctx, rCtx.InstanceID, sourceDatabase)
82 if err != nil {
83 return "", errors.Wrapf(err, "failed to get database metadata for %s", sourceDatabase)
84 }
85
86 if metadata == nil {
87 return "", errors.Errorf("database metadata is nil")
88 }
89
90 schema := backupItem.SourceTable.Schema
91 if schema == "" {
92 schema = "dbo"
93 }
94 schemaMetadata := metadata.GetSchemaMetadata(schema)
95 if schemaMetadata == nil {
96 return "", errors.Errorf("schema metadata not found for %s", schema)
97 }
98
99 tableMetadata := schemaMetadata.GetTable(backupItem.SourceTable.Table)
100 if tableMetadata == nil {
101 return "", errors.Errorf("table metadata not found for %s.%s", schema, backupItem.SourceTable.Table)
102 }
103
104 g := &generator{
105 ctx: ctx,
106 rCtx: rCtx,
107 backupDatabase: targetDatabase,
108 backupTable: backupItem.TargetTable.Table,
109 originalDatabase: sourceDatabase,
110 originalSchema: schema,
111 originalTable: backupItem.SourceTable.Table,
112 pk: tableMetadata.GetPrimaryKey(),
113 table: tableMetadata,
114 }
115 result, err := g.generate(node)
116 if err != nil {
117 return "", err
118 }
119 return fmt.Sprintf("/*\nOriginal SQL:\n%s\n*/\n%s", sqlForComment, result), nil
120}
121
122type generator struct {
123 ctx context.Context

Callers 1

GenerateRestoreSQLFunction · 0.70

Calls 7

generateMethod · 0.95
GetInstanceDatabaseIDFunction · 0.92
ErrorfMethod · 0.80
GetSchemaMetadataMethod · 0.80
GetPrimaryKeyMethod · 0.80
GetTableMethod · 0.45

Tested by

no test coverage detected