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

Function extractChangedResources

backend/plugin/parser/mysql/resource_change.go:23–168  ·  view source on GitHub ↗
(currentDatabase string, _ string, dbMetadata *model.DatabaseMetadata, asts []base.AST, _ string)

Source from the content-addressed store, hash-verified

21}
22
23func extractChangedResources(currentDatabase string, _ string, dbMetadata *model.DatabaseMetadata, asts []base.AST, _ string) (*base.ChangeSummary, error) {
24 changedResources := model.NewChangedResources(dbMetadata)
25
26 var dmlCount, insertCount int
27 var sampleDMLs []string
28
29 // addObjectDatabase records a database-only write target for a non-table object DDL
30 // (view/function/routine/trigger) ONLY when the object's own name carries an explicit
31 // database qualifier (TableRef.Schema). Unqualified names record nothing (request-database
32 // fallback). The object's own qualifier is used — never an ON-table reference. SUP-222.
33 addObjectDatabase := func(ref *ast.TableRef) {
34 if ref != nil && ref.Schema != "" {
35 changedResources.AddDatabase(ref.Schema)
36 }
37 }
38
39 for _, unifiedAST := range asts {
40 omniAST, ok := unifiedAST.(*OmniAST)
41 if !ok {
42 return nil, errors.New("expected OmniAST for MySQL")
43 }
44 if omniAST.Node == nil {
45 continue
46 }
47
48 switch n := omniAST.Node.(type) {
49 case *ast.CreateTableStmt:
50 if n.Table != nil {
51 db, table := omniTableRef(n.Table, currentDatabase)
52 changedResources.AddTable(db, "", &storepb.ChangedResourceTable{Name: table}, false)
53 }
54
55 case *ast.DropTableStmt:
56 for _, ref := range n.Tables {
57 db, table := omniTableRef(ref, currentDatabase)
58 changedResources.AddTable(db, "", &storepb.ChangedResourceTable{Name: table}, true)
59 }
60
61 case *ast.TruncateStmt:
62 for _, ref := range n.Tables {
63 db, table := omniTableRef(ref, currentDatabase)
64 changedResources.AddTable(db, "", &storepb.ChangedResourceTable{Name: table}, true)
65 }
66
67 case *ast.LoadDataStmt:
68 if n.Table != nil {
69 db, table := omniTableRef(n.Table, currentDatabase)
70 changedResources.AddTable(db, "", &storepb.ChangedResourceTable{Name: table}, false)
71 }
72
73 case *ast.AlterTableStmt:
74 if n.Table != nil {
75 db, table := omniTableRef(n.Table, currentDatabase)
76 changedResources.AddTable(db, "", &storepb.ChangedResourceTable{Name: table}, true)
77 }
78
79 case *ast.RenameTableStmt:
80 for _, pair := range n.Pairs {

Calls 6

AddDatabaseMethod · 0.95
AddTableMethod · 0.95
NewChangedResourcesFunction · 0.92
omniTableRefFunction · 0.85
extractTableExprsFunction · 0.85
omniStatementTextFunction · 0.70