github.com/bingoohuang/gg@v0.0.0-20240325092523-45da7dee9335/pkg/sqlparse/sqlparser/type_converter.go (about) 1 package sqlparser 2 3 import ( 4 "bytes" 5 6 "github.com/bingoohuang/gg/pkg/sqlparse/tidbparser/ast" 7 ) 8 9 func convertFromCreateTableStmt(stmt *ast.CreateTableStmt, ddl *DDL) Statement { 10 var columns []*ColumnDef 11 for _, col := range stmt.Cols { 12 var options []*ColumnOption 13 for _, option := range col.Options { 14 expr := "" 15 if option.Expr != nil { 16 var buf bytes.Buffer 17 option.Expr.Format(&buf) 18 expr = buf.String() 19 } 20 options = append(options, &ColumnOption{ 21 Type: ColumnOptionType(option.Tp), 22 Value: expr, 23 }) 24 } 25 columns = append(columns, &ColumnDef{ 26 Name: col.Name.Name.String(), 27 Type: col.Tp.String(), 28 Elems: col.Tp.Elems, 29 Options: options, 30 }) 31 } 32 var constraints []*Constraint 33 for _, constraint := range stmt.Constraints { 34 var keys []ColIdent 35 for _, key := range constraint.Keys { 36 keys = append(keys, NewColIdent(key.Column.Name.String())) 37 } 38 constraints = append(constraints, &Constraint{ 39 Type: ConstraintType(constraint.Tp), 40 Name: constraint.Name, 41 Keys: keys, 42 }) 43 } 44 var options []*TableOption 45 for _, option := range stmt.Options { 46 options = append(options, &TableOption{ 47 Type: TableOptionType(option.Tp), 48 StrValue: option.StrValue, 49 UintValue: option.UintValue, 50 }) 51 } 52 return &CreateTable{ 53 DDL: ddl, 54 Columns: columns, 55 Constraints: constraints, 56 Options: options, 57 } 58 } 59 60 func convertFromTruncateTableStmt(stmt *ast.TruncateTableStmt) Statement { 61 return &TruncateTable{Table: TableName{Name: TableIdent{v: stmt.Table.Name.String()}}} 62 } 63 64 func convertTiDBStmtToVitessOtherAdmin(stmts []ast.StmtNode, admin *OtherAdmin) Statement { 65 for _, stmt := range stmts { 66 switch adminStmt := stmt.(type) { 67 case *ast.TruncateTableStmt: 68 return convertFromTruncateTableStmt(adminStmt) 69 default: 70 return admin 71 } 72 } 73 return nil 74 } 75 76 func convertTiDBStmtToVitessDDL(stmts []ast.StmtNode, ddl *DDL) Statement { 77 for _, stmt := range stmts { 78 switch ddlStmt := stmt.(type) { 79 case *ast.CreateTableStmt: 80 return convertFromCreateTableStmt(ddlStmt, ddl) 81 default: 82 return ddl 83 } 84 } 85 return nil 86 } 87 88 func convertTiDBStmtToVitessShow(stmts []ast.StmtNode, show *Show) Statement { 89 for _, stmt := range stmts { 90 switch showStmt := stmt.(type) { 91 case *ast.ShowStmt: 92 return &Show{TableName: showStmt.Table.Name.String()} 93 default: 94 return show 95 } 96 } 97 return nil 98 }