11package services
22
33import (
4- "github.com/pingcap/parser/ast"
5- "github.com/pingcap/parser/test_driver"
6- _ "github.com/pingcap/parser/test_driver"
7- "log"
8- "reflect"
94 "sql-dog/src/domain/model"
105 "strings"
116
127 "github.com/pingcap/parser"
8+ "github.com/pingcap/parser/ast"
9+ "github.com/pingcap/parser/test_driver"
1310)
1411
1512type analyzerService struct {}
@@ -38,47 +35,53 @@ type Visitor struct {
3835 Analyzer model.Analyzer
3936}
4037
41- func checkNilValue (in ast.Node , analyzer * model.Analyzer ) {
42- if patternInExpr , ok := in .(* ast.PatternInExpr ); ok {
43- if valueExpr , ok := patternInExpr .List [0 ].(* test_driver.ValueExpr ); ok {
44- if valueExpr .Datum .GetValue () == nil {
45- var nullValueOperation model.AnalyzerNullValueOperation
46- nullValueOperation .TableName = analyzer .TableName
47- nullValueOperation .Value = valueExpr .Datum .GetValue ()
48- nullValueOperation .Type = model .OpTypeIn
49- if columnNameExpr , ok := patternInExpr .Expr .(* ast.ColumnNameExpr ); ok {
50- nullValueOperation .Column = columnNameExpr .Name .String ()
51- }
52- analyzer .NullValueOperation = append (analyzer .NullValueOperation , nullValueOperation )
53- }
54- }
55- }
56-
57- if binaryOperationExpr , ok := in .(* ast.BinaryOperationExpr ); ok {
58- if binaryOperationExpr .Op .String () == string (model .OpTypeEq ) {
59- if valueExpr , ok := binaryOperationExpr .R .(* test_driver.ValueExpr ); ok {
60- if valueExpr .Datum .GetValue () == nil {
61- var nullValueOperation model.AnalyzerNullValueOperation
62- nullValueOperation .TableName = analyzer .TableName
63- nullValueOperation .Value = valueExpr .Datum .GetValue ()
64- nullValueOperation .Type = model .OpTypeEq
65- if columnNameExpr , ok := binaryOperationExpr .R .(* ast.ColumnNameExpr ); ok {
66- nullValueOperation .Column = columnNameExpr .Name .String ()
67- }
68- analyzer .NullValueOperation = append (analyzer .NullValueOperation , nullValueOperation )
69- }
70- }
71- }
72- }
73- }
38+ // TODO : `checkNilValue` is unused (deadcode)
39+ //func checkNilValue(in ast.Node, analyzer *model.Analyzer) {
40+ // if patternInExpr, ok := in.(*ast.PatternInExpr); ok {
41+ // if valueExpr, ok := patternInExpr.List[0].(*test_driver.ValueExpr); ok {
42+ // if valueExpr.Datum.GetValue() == nil {
43+ // var nullValueOperation model.AnalyzerNullValueOperation
44+ // nullValueOperation.TableName = analyzer.TableName
45+ // nullValueOperation.Value = valueExpr.Datum.GetValue()
46+ // nullValueOperation.Type = model.OpTypeIn
47+ // if columnNameExpr, ok := patternInExpr.Expr.(*ast.ColumnNameExpr); ok {
48+ // nullValueOperation.Column = columnNameExpr.Name.String()
49+ // }
50+ // analyzer.NullValueOperation = append(analyzer.NullValueOperation, nullValueOperation)
51+ // }
52+ // }
53+ // }
54+ //
55+ // if binaryOperationExpr, ok := in.(*ast.BinaryOperationExpr); ok {
56+ // if binaryOperationExpr.Op.String() == string(model.OpTypeEq) {
57+ // if valueExpr, ok := binaryOperationExpr.R.(*test_driver.ValueExpr); ok {
58+ // if valueExpr.Datum.GetValue() == nil {
59+ // var nullValueOperation model.AnalyzerNullValueOperation
60+ // nullValueOperation.TableName = analyzer.TableName
61+ // nullValueOperation.Value = valueExpr.Datum.GetValue()
62+ // nullValueOperation.Type = model.OpTypeEq
63+ // if columnNameExpr, ok := binaryOperationExpr.R.(*ast.ColumnNameExpr); ok {
64+ // nullValueOperation.Column = columnNameExpr.Name.String()
65+ // }
66+ // analyzer.NullValueOperation = append(analyzer.NullValueOperation, nullValueOperation)
67+ // }
68+ // }
69+ // }
70+ // }
71+ //}
7472
7573func (v * Visitor ) Enter (in ast.Node ) (ast.Node , bool ) {
76-
77- // TableName
78- if tableName , ok := in .(* ast.TableName ); ok {
79- // TODO : sub query
74+ // Set tableName
75+ if TableSource , ok := in .(* ast.TableSource ); ok {
8076 if len (v .Analyzer .TableName ) == 0 {
81- v .Analyzer .TableName = tableName .Name .String ()
77+ if tableName , ok := TableSource .Source .(* ast.TableName ); ok {
78+ if len (v .Analyzer .TableName ) == 0 {
79+ v .Analyzer .TableName = tableName .Name .String ()
80+ }
81+ }
82+ if len (TableSource .AsName .String ()) > 0 {
83+ v .Analyzer .TableName = TableSource .AsName .String ()
84+ }
8285 }
8386 }
8487
@@ -120,26 +123,25 @@ func (v *Visitor) Enter(in ast.Node) (ast.Node, bool) {
120123 if columnNameExpr , ok := isNullExpr .Expr .(* ast.ColumnNameExpr ); ok {
121124 v .Analyzer .NotNullColumns = append (
122125 v .Analyzer .NotNullColumns ,
123- formatColumnName (columnNameExpr .Name .String (), v .Analyzer .TableName ))
126+ v . formatColumnName (columnNameExpr .Name .String (), v .Analyzer .TableName ))
124127 }
125128 }
126129
127- // patternInExpr
130+ // PatternInExpr
128131 if patternInExpr , ok := in .(* ast.PatternInExpr ); ok {
129-
130132 var operation model.AnalyzerOperation
131133 operation .Type = model .OpTypeIn
132134
133135 if columnNameExpr , ok := patternInExpr .Expr .(* ast.ColumnNameExpr ); ok {
134- operation .Column = formatColumnName (columnNameExpr .Name .String (), v .Analyzer .TableName )
136+ operation .Column = v . formatColumnName (columnNameExpr .Name .String (), v .Analyzer .TableName )
135137 }
136138
137139 if valueExpr , ok := patternInExpr .List [0 ].(* test_driver.ValueExpr ); ok {
138- operation .Value = valueExpr .Datum .GetInt64 ()
140+ operation .Value = valueExpr .Datum .GetInt64 ()
139141 }
140142
141143 //if columnNameExpr, ok := patternInExpr.List[0].(*ast.ColumnNameExpr); ok {
142- //operation.Value = columnNameExpr..GetInt64()
144+ //operation.Value = columnNameExpr..GetInt64()
143145 //}
144146
145147 v .Analyzer .Operations = append (v .Analyzer .Operations , operation )
@@ -148,13 +150,11 @@ func (v *Visitor) Enter(in ast.Node) (ast.Node, bool) {
148150 // BinaryOperationExpr
149151 if binaryOperationExpr , ok := in .(* ast.BinaryOperationExpr ); ok {
150152 if binaryOperationExpr .Op .String () == string (model .OpTypeEq ) {
151-
152153 var operation model.AnalyzerOperation
153154 operation .Type = model .OpType (binaryOperationExpr .Op .String ())
154155
155156 if columnNameExpr , ok := binaryOperationExpr .L .(* ast.ColumnNameExpr ); ok {
156- // TODO : table name
157- operation .Column = formatColumnName (columnNameExpr .Name .String (), v .Analyzer .TableName )
157+ operation .Column = v .formatColumnName (columnNameExpr .Name .String (), v .Analyzer .TableName )
158158 }
159159
160160 if valueExpr , ok := binaryOperationExpr .R .(* test_driver.ValueExpr ); ok {
@@ -176,7 +176,7 @@ func (v *Visitor) Leave(in ast.Node) (ast.Node, bool) {
176176 return in , true
177177}
178178
179- func formatColumnName (column string , tableName string ) string {
179+ func ( v * Visitor ) formatColumnName (column string , tableName string ) string {
180180 slice := strings .Split (column , "." )
181181 if len (slice ) == 1 {
182182 return column
@@ -187,7 +187,7 @@ func formatColumnName(column string, tableName string) string {
187187 return column
188188}
189189
190- func debug (in interface {}) {
191- log .Print ("---debug---" )
192- log .Print (reflect .TypeOf (in ))
193- }
190+ // func (v *Visitor) debug(in interface{}) {
191+ // log.Print("---debug---")
192+ // log.Print(reflect.TypeOf(in))
193+ // }
0 commit comments