// Package sql2go... // // Description : sql2go... // // Author : go_developer@163.com<白茶清欢> // // Date : 2021-10-25 4:49 下午 package sql2go import ( "fmt" "strings" "git.zhangdeman.cn/zhangdeman/gopkg/util" "github.com/xwb1989/sqlparser" ) const ( // CreateSQLColumnTPL 每个字段的模版 CreateSQLColumnTPL = "{FIELD} {TYPE} `json:\"{JSON_TAG}\" gorm:\"column:{COLUMN};default:{DEFAULT_VALUE};{NOT_NULL}\"` // {COMMENT}" ) // ParseCreateTableSql 解析建表sql // // Author : go_developer@163.com<白茶清欢> // // Date : 4:49 下午 2021/10/25 func ParseCreateTableSql(sql string) { var ( stmt sqlparser.Statement err error ) sql = strings.ReplaceAll(sql, " ", "") if stmt, err = sqlparser.ParseStrictDDL(sql); nil != err { fmt.Println(err.Error(), string(sql[786:])) return } r := stmt.(*sqlparser.DDL) for _, item := range r.TableSpec.Columns { data := map[string]string{ "{FIELD}": util.SnakeCaseToCamel(item.Name.String()), "{COLUMN}": item.Name.String(), "{JSON_TAG}": item.Name.String(), "{DEFAULT_VALUE}": "", "{COMMENT}": item.Name.String() + " " + string(item.Type.Comment.Val), "{TYPE}": sqlTypeMap[item.Type.Type], } if item.Type.NotNull { data["{NOT_NULL}"] = "NOT NULL" } if nil != item.Type.Default { data["{DEFAULT_VALUE}"] += string(item.Type.Default.Val) } val := CreateSQLColumnTPL for k, v := range data { val = strings.ReplaceAll(val, k, v) } fmt.Println(val) } // fmt.Println(r.TableSpec) }