github.com/team-ide/go-dialect@v1.9.20/worker/convert.go (about)

     1  package worker
     2  
     3  //func NewConvertParser(srcSql string, dest dialect.Dialect) *ConvertParser {
     4  //
     5  //	return &ConvertParser{
     6  //		srcSql: srcSql,
     7  //		dest:   dest,
     8  //	}
     9  //}
    10  //
    11  //type ConvertParser struct {
    12  //	srcSql  string
    13  //	dest    dialect.Dialect
    14  //	sqlList []string
    15  //	destSql string
    16  //	Param   *dialect.ParamModel
    17  //}
    18  //
    19  //func (this_ *ConvertParser) GetSrcSql() (srcSql string) {
    20  //	srcSql = this_.srcSql
    21  //	return
    22  //}
    23  //
    24  //func (this_ *ConvertParser) GetSqlList() (sqlList []string) {
    25  //	sqlList = this_.sqlList
    26  //	return
    27  //}
    28  //
    29  //func (this_ *ConvertParser) GetDestSql() (destSql string) {
    30  //	destSql = this_.destSql
    31  //	return
    32  //}
    33  //
    34  //func GetStatements(sqlInfo string) (stmts []sqlparser.Statement, err error) {
    35  //	tokens := sqlparser.NewStringTokenizer(sqlInfo)
    36  //	for {
    37  //		var stmt sqlparser.Statement
    38  //		stmt, err = sqlparser.ParseNext(tokens)
    39  //
    40  //		if err != nil {
    41  //			if err != io.EOF {
    42  //				return
    43  //			}
    44  //			err = nil
    45  //		}
    46  //		if stmt == nil {
    47  //			break
    48  //		}
    49  //		stmts = append(stmts, stmt)
    50  //	}
    51  //	return
    52  //}
    53  //
    54  //func (this_ *ConvertParser) Parse() (err error) {
    55  //	stmts, err := GetStatements(this_.srcSql)
    56  //	if err != nil {
    57  //		return
    58  //	}
    59  //
    60  //	for _, stmt := range stmts {
    61  //		err = this_.parse(stmt)
    62  //		if err != nil {
    63  //			return
    64  //		}
    65  //	}
    66  //	destSql := ""
    67  //	for _, sqlOne := range this_.sqlList {
    68  //		destSql += sqlOne + ";\n"
    69  //	}
    70  //	this_.destSql = destSql
    71  //	return
    72  //}
    73  //func (this_ *ConvertParser) parse(stmt_ sqlparser.Statement) (err error) {
    74  //	switch stmt := stmt_.(type) {
    75  //	case *sqlparser.Select:
    76  //		return parseSelect(stmt)
    77  //	case *sqlparser.Insert:
    78  //		insert, err := parseInsert(stmt)
    79  //		if err != nil {
    80  //			return err
    81  //		}
    82  //		sqlList, err := this_.dest.InsertSql(this_.Param, insert)
    83  //		if err != nil {
    84  //			return err
    85  //		}
    86  //		this_.sqlList = append(this_.sqlList, sqlList...)
    87  //	case *sqlparser.Update:
    88  //		return parseUpdate(stmt)
    89  //	case *sqlparser.Delete:
    90  //		return parseDelete(stmt)
    91  //	case *sqlparser.CreateTable:
    92  //		databaseName, table, err := parseCreateTable(stmt)
    93  //		if err != nil {
    94  //			return err
    95  //		}
    96  //		sqlList, err := this_.dest.TableCreateSql(this_.Param, databaseName, table)
    97  //		if err != nil {
    98  //			return err
    99  //		}
   100  //		this_.sqlList = append(this_.sqlList, sqlList...)
   101  //	}
   102  //	return
   103  //}
   104  //func parseCreateTable(stmt *sqlparser.CreateTable) (databaseName string, table *dialect.TableModel, err error) {
   105  //	table = &dialect.TableModel{}
   106  //	databaseName = stmt.GetTable().Qualifier.String()
   107  //	table.TableName = stmt.GetTable().Name.String()
   108  //
   109  //	tableSpec := stmt.GetTableSpec()
   110  //	if tableSpec == nil {
   111  //		return
   112  //	}
   113  //	for _, tableSpecColumn := range tableSpec.Columns {
   114  //		if tableSpecColumn == nil {
   115  //			continue
   116  //		}
   117  //		column := &dialect.ColumnModel{}
   118  //		column.ColumnName = tableSpecColumn.Name.String()
   119  //		column.ColumnDataType = tableSpecColumn.Type.Type
   120  //		if tableSpecColumn.Type.Length != nil {
   121  //			column.ColumnLength, _ = dialect.StringToInt(tableSpecColumn.Type.Length.Val)
   122  //		}
   123  //		if tableSpecColumn.Type.Scale != nil {
   124  //			column.ColumnDecimal, _ = dialect.StringToInt(tableSpecColumn.Type.Scale.Val)
   125  //		}
   126  //		if tableSpecColumn.Type.Options != nil {
   127  //			if tableSpecColumn.Type.Options.Comment != nil {
   128  //				column.ColumnComment = tableSpecColumn.Type.Options.Comment.Val
   129  //			}
   130  //			if tableSpecColumn.Type.Options.Null != nil {
   131  //				column.ColumnNotNull = true
   132  //			}
   133  //			if tableSpecColumn.Type.Options.Default != nil {
   134  //				buf := sqlparser.NewTrackedBuffer(nil)
   135  //				tableSpecColumn.Type.Options.Default.Format(buf)
   136  //				column.ColumnDefault = buf.String()
   137  //				column.ColumnDefault = strings.TrimLeft(column.ColumnDefault, "'")
   138  //				column.ColumnDefault = strings.TrimRight(column.ColumnDefault, "'")
   139  //				column.ColumnDefault = strings.TrimLeft(column.ColumnDefault, "\"")
   140  //				column.ColumnDefault = strings.TrimRight(column.ColumnDefault, "\"")
   141  //			}
   142  //		}
   143  //		table.AddColumn(column)
   144  //	}
   145  //
   146  //	for _, tableSpecIndex := range tableSpec.Indexes {
   147  //		if tableSpecIndex == nil || tableSpecIndex.Info == nil {
   148  //			continue
   149  //		}
   150  //		if tableSpecIndex.Info.Primary {
   151  //			for _, indexColumn := range tableSpecIndex.Columns {
   152  //				table.AddPrimaryKey(&dialect.PrimaryKeyModel{ColumnName: indexColumn.Column.String()})
   153  //			}
   154  //			continue
   155  //		}
   156  //
   157  //		for _, indexColumn := range tableSpecIndex.Columns {
   158  //			index := &dialect.IndexModel{}
   159  //			index.IndexName = tableSpecIndex.Info.Name.String()
   160  //			index.ColumnName = indexColumn.Column.String()
   161  //			for _, option := range tableSpecIndex.Options {
   162  //				if option == nil || option.Value == nil {
   163  //					continue
   164  //				}
   165  //				if option.Name == "COMMENT" {
   166  //					index.IndexComment = option.Value.Val
   167  //				}
   168  //			}
   169  //			if tableSpecIndex.Info.Unique {
   170  //				index.IndexType = "unique"
   171  //			}
   172  //
   173  //			table.AddIndex(index)
   174  //		}
   175  //	}
   176  //	for _, option := range tableSpec.Options {
   177  //		if option == nil || option.Value == nil {
   178  //			continue
   179  //		}
   180  //		if option.Name == "COMMENT" {
   181  //			table.TableComment = option.Value.Val
   182  //		}
   183  //	}
   184  //
   185  //	//var bs []byte
   186  //	//bs, _ = json.MarshalIndent(stmt, "", "  ")
   187  //	//fmt.Println(string(bs))
   188  //	//
   189  //	//buf := sqlparser.NewTrackedBuffer(nil)
   190  //	//stmt.Format(buf)
   191  //	//sqlInfo := buf.String()
   192  //	//bs, _ = json.MarshalIndent(table, "", "  ")
   193  //	//fmt.Println("createTable sql:")
   194  //	//fmt.Println(sqlInfo)
   195  //	//fmt.Println("createTable table:")
   196  //	//fmt.Println(string(bs))
   197  //	return
   198  //}
   199  //
   200  //func parseSelect(stmt *sqlparser.Select) (err error) {
   201  //
   202  //	return
   203  //}
   204  //func parseInsert(stmt *sqlparser.Insert) (insert *dialect.InsertModel, err error) {
   205  //	insert = &dialect.InsertModel{}
   206  //	insert.OwnerName = stmt.Table.Qualifier.String()
   207  //	insert.TableName = stmt.Table.Name.String()
   208  //	for _, c := range stmt.Columns {
   209  //		name := c.CompliantName()
   210  //		insert.Columns = append(insert.Columns, name)
   211  //	}
   212  //	switch rows := stmt.Rows.(type) {
   213  //	case sqlparser.Values:
   214  //		for _, row := range rows {
   215  //			var insertRow []*dialect.ValueModel
   216  //			for _, rowV := range row {
   217  //				//fmt.Println("row v:", reflect.TypeOf(rowV).String())
   218  //				value := &dialect.ValueModel{}
   219  //				insertRow = append(insertRow, value)
   220  //				switch v := rowV.(type) {
   221  //				case *sqlparser.Literal:
   222  //					value.Value = v.Val
   223  //					if v.Type == sqlparser.StrVal {
   224  //						value.Type = dialect.ValueTypeString
   225  //					} else if v.Type == sqlparser.IntVal {
   226  //						value.Type = dialect.ValueTypeNumber
   227  //					} else {
   228  //						panic("parseInsert not support value type [" + value.Type + "]")
   229  //					}
   230  //					break
   231  //				case *sqlparser.FuncExpr:
   232  //					value.Type = dialect.ValueTypeFunc
   233  //					buf := sqlparser.NewTrackedBuffer(nil)
   234  //					v.Format(buf)
   235  //					value.Value = buf.String()
   236  //					break
   237  //				}
   238  //
   239  //			}
   240  //			insert.Rows = append(insert.Rows, insertRow)
   241  //		}
   242  //
   243  //	}
   244  //
   245  //	//var bs []byte
   246  //	//bs, _ = json.MarshalIndent(stmt, "", "  ")
   247  //	//fmt.Println(string(bs))
   248  //	return
   249  //}
   250  //func parseUpdate(stmt *sqlparser.Update) (err error) {
   251  //
   252  //	return
   253  //}
   254  //func parseDelete(stmt *sqlparser.Delete) (err error) {
   255  //
   256  //	return
   257  //}
   258  //
   259  //func parseCreateDatabase(stmt *sqlparser.CreateDatabase) (err error) {
   260  //
   261  //	return
   262  //}
   263  //func parseDropTable(stmt *sqlparser.DropTable) (err error) {
   264  //
   265  //	return
   266  //}
   267  //func parseDropDatabase(stmt *sqlparser.DropDatabase) (err error) {
   268  //
   269  //	return
   270  //}
   271  //func parseDropColumn(stmt *sqlparser.DropColumn) (err error) {
   272  //
   273  //	return
   274  //}
   275  //func parseDropKey(stmt *sqlparser.DropKey) (err error) {
   276  //
   277  //	return
   278  //}
   279  //func parseAddColumns(stmt *sqlparser.AddColumns) (err error) {
   280  //
   281  //	return
   282  //}
   283  //func parseAlterColumn(stmt *sqlparser.AlterColumn) (err error) {
   284  //
   285  //	return
   286  //}
   287  //func parseRenameIndex(stmt *sqlparser.RenameIndex) (err error) {
   288  //
   289  //	return
   290  //}
   291  //func parseAddIndexDefinition(stmt *sqlparser.AddIndexDefinition) (err error) {
   292  //
   293  //	return
   294  //}