| 19 | } |
| 20 | |
| 21 | func extractChangedResources(database string, _ string, dbMetadata *model.DatabaseMetadata, asts []base.AST, statement string) (*base.ChangeSummary, error) { |
| 22 | changedResources := model.NewChangedResources(dbMetadata) |
| 23 | dmlCount := 0 |
| 24 | insertCount := 0 |
| 25 | var sampleDMLs []string |
| 26 | for _, ast := range asts { |
| 27 | tidbAST, ok := GetTiDBAST(ast) |
| 28 | if !ok { |
| 29 | return nil, errors.New("expected TiDB AST") |
| 30 | } |
| 31 | node := tidbAST.Node |
| 32 | err := getResourceChanges(database, node, statement, changedResources) |
| 33 | if err != nil { |
| 34 | return nil, err |
| 35 | } |
| 36 | |
| 37 | switch n := node.(type) { |
| 38 | case *tidbast.InsertStmt: |
| 39 | if len(n.Lists) > 0 { |
| 40 | insertCount += len(n.Lists) |
| 41 | continue |
| 42 | } |
| 43 | |
| 44 | dmlCount++ |
| 45 | if len(sampleDMLs) < common.MaximumLintExplainSize { |
| 46 | sampleDMLs = append(sampleDMLs, trimStatement(n.Text())) |
| 47 | } |
| 48 | case *tidbast.UpdateStmt, *tidbast.DeleteStmt: |
| 49 | dmlCount++ |
| 50 | if len(sampleDMLs) < common.MaximumLintExplainSize { |
| 51 | sampleDMLs = append(sampleDMLs, trimStatement(node.Text())) |
| 52 | } |
| 53 | default: |
| 54 | } |
| 55 | } |
| 56 | |
| 57 | return &base.ChangeSummary{ |
| 58 | ChangedResources: changedResources, |
| 59 | DMLCount: dmlCount, |
| 60 | SampleDMLS: sampleDMLs, |
| 61 | InsertCount: insertCount, |
| 62 | }, nil |
| 63 | } |
| 64 | |
| 65 | // addTiDBObjectDatabase records a database-only write target for a non-table object DDL |
| 66 | // (view/sequence) ONLY when its name carries an explicit database qualifier. An unqualified |