(ctx context.Context, rCtx base.RestoreContext, sqlForComment string, node ast.Node, backupItem *storepb.PriorBackupDetail_Item)
| 64 | } |
| 65 | |
| 66 | func doGenerate(ctx context.Context, rCtx base.RestoreContext, sqlForComment string, node ast.Node, backupItem *storepb.PriorBackupDetail_Item) (string, error) { |
| 67 | _, sourceDatabase, err := common.GetInstanceDatabaseID(backupItem.SourceTable.Database) |
| 68 | if err != nil { |
| 69 | return "", errors.Wrapf(err, "failed to get source database ID for %s", backupItem.SourceTable.Database) |
| 70 | } |
| 71 | _, targetDatabase, err := common.GetInstanceDatabaseID(backupItem.TargetTable.Database) |
| 72 | if err != nil { |
| 73 | return "", errors.Wrapf(err, "failed to get target database ID for %s", backupItem.TargetTable.Database) |
| 74 | } |
| 75 | _, normalColumns, err := classifyColumns(ctx, rCtx.GetDatabaseMetadataFunc, rCtx.ListDatabaseNamesFunc, rCtx.IsCaseSensitive, rCtx.InstanceID, &TableReference{ |
| 76 | Database: sourceDatabase, |
| 77 | Table: backupItem.SourceTable.Table, |
| 78 | }) |
| 79 | if err != nil { |
| 80 | return "", errors.Wrapf(err, "failed to classify columns for %s.%s", backupItem.SourceTable.Database, backupItem.SourceTable.Table) |
| 81 | } |
| 82 | |
| 83 | var result string |
| 84 | switch n := node.(type) { |
| 85 | case *ast.DeleteStmt: |
| 86 | result = generateDeleteRestore(sourceDatabase, backupItem.SourceTable.Table, targetDatabase, backupItem.TargetTable.Table, normalColumns) |
| 87 | case *ast.UpdateStmt: |
| 88 | r, err := generateUpdateRestore(ctx, rCtx, n, sourceDatabase, backupItem.SourceTable.Table, targetDatabase, backupItem.TargetTable.Table, normalColumns) |
| 89 | if err != nil { |
| 90 | return "", err |
| 91 | } |
| 92 | result = r |
| 93 | default: |
| 94 | return "", errors.Errorf("unexpected statement type: %T", node) |
| 95 | } |
| 96 | |
| 97 | return fmt.Sprintf("/*\nOriginal SQL:\n%s\n*/\n%s", sqlForComment, result), nil |
| 98 | } |
| 99 | |
| 100 | func generateDeleteRestore(originalDatabase, originalTable, backupDatabase, backupTable string, normalColumns []string) string { |
| 101 | quotedColumnList := quoteMySQLColumns(normalColumns) |
no test coverage detected