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

Function prepareTransformation

backend/plugin/parser/mysql/backup.go:72–112  ·  view source on GitHub ↗
(databaseName, statement string, dbMetadata *model.DatabaseMetadata)

Source from the content-addressed store, hash-verified

70}
71
72func prepareTransformation(databaseName, statement string, dbMetadata *model.DatabaseMetadata) ([]StatementInfo, error) {
73 list, err := SplitSQL(statement)
74 if err != nil {
75 return nil, errors.Wrap(err, "failed to split sql")
76 }
77
78 var result []StatementInfo
79 for i, item := range list {
80 if len(item.Text) == 0 || item.Empty {
81 continue
82 }
83
84 parsed, err := ParseMySQLOmni(item.Text)
85 if err != nil {
86 return nil, errors.Wrap(err, "failed to parse sql")
87 }
88 if parsed == nil || len(parsed.Items) == 0 {
89 continue
90 }
91
92 for _, node := range parsed.Items {
93 tables, err := ExtractTables(databaseName, node, item.Text, i, dbMetadata)
94 if err != nil {
95 return nil, errors.Wrap(err, "failed to extract tables")
96 }
97 for _, table := range tables {
98 result = append(result, StatementInfo{
99 Offset: table.Offset,
100 Statement: table.Statement,
101 Node: table.Node,
102 Table: table.Table,
103 StartPosition: item.Start,
104 EndPosition: item.End,
105 FullSQL: item.Text,
106 })
107 }
108 }
109 }
110
111 return result, nil
112}
113
114// ExtractTables extracts table references from a DML statement.
115func ExtractTables(databaseName string, node ast.Node, fullSQL string, offset int, dbMetadata *model.DatabaseMetadata) ([]StatementInfo, error) {

Callers 1

TransformDMLToSelectFunction · 0.70

Calls 3

ParseMySQLOmniFunction · 0.85
ExtractTablesFunction · 0.85
SplitSQLFunction · 0.70

Tested by

no test coverage detected