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

Function extractChangedResources

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

Source from the content-addressed store, hash-verified

19}
20
21func extractChangedResources(currentDatabase string, currentSchema string, dbMetadata *model.DatabaseMetadata, asts []base.AST, _ string) (*base.ChangeSummary, error) {
22 changedResources := model.NewChangedResources(dbMetadata)
23
24 var dmlCount, insertCount int
25 var sampleDMLs []string
26
27 addDML := func(text string) {
28 dmlCount++
29 if len(sampleDMLs) < common.MaximumLintExplainSize {
30 sampleDMLs = append(sampleDMLs, trimStatement(text))
31 }
32 }
33
34 addTable := func(ref *ast.TableRef, affectData bool) {
35 d, s, t := omniTableRefTriple(ref, currentDatabase, currentSchema)
36 if t == "" {
37 return
38 }
39 changedResources.AddTable(d, s, &storepb.ChangedResourceTable{Name: t}, affectData)
40 }
41
42 // addObjectDatabase records a database-only write target for a non-table object DDL
43 // (view/procedure/function/trigger) ONLY when the object's own name carries an explicit
44 // database qualifier. Unqualified names record nothing (request-database fallback). The
45 // object's own qualifier is used — never an ON-table or body reference. SUP-222 / BYT-9698.
46 addObjectDatabase := func(ref *ast.TableRef) {
47 if ref != nil && ref.Database != "" {
48 changedResources.AddDatabase(ref.Database)
49 }
50 }
51
52 for _, unifiedAST := range asts {
53 omniAST, ok := unifiedAST.(*OmniAST)
54 if !ok {
55 return nil, errors.New("expected OmniAST for MSSQL")
56 }
57 if omniAST.Node == nil {
58 continue
59 }
60
61 switch n := omniAST.Node.(type) {
62 case *ast.CreateTableStmt:
63 addTable(n.Name, false)
64
65 case *ast.AlterTableStmt:
66 addTable(n.Name, true)
67
68 case *ast.DropStmt:
69 switch n.ObjectType {
70 case ast.DropTable:
71 if n.Names == nil {
72 continue
73 }
74 for _, item := range n.Names.Items {
75 if ref, ok := item.(*ast.TableRef); ok {
76 addTable(ref, true)
77 }
78 }

Calls 7

AddTableMethod · 0.95
AddDatabaseMethod · 0.95
NewChangedResourcesFunction · 0.92
omniTableRefTripleFunction · 0.85
selectIntoTargetFunction · 0.85
LenMethod · 0.80
trimStatementFunction · 0.70