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  }