diff --git a/.DS_Store b/.DS_Store new file mode 100644 index 0000000..73a209a Binary files /dev/null and b/.DS_Store differ diff --git a/data/cmd/cmd.go b/data/cmd/cmd.go index 897c676..839efae 100644 --- a/data/cmd/cmd.go +++ b/data/cmd/cmd.go @@ -24,7 +24,7 @@ var rootCmd = &cobra.Command{ Long: `base on gorm tools for mysql database to golang struct`, Run: func(cmd *cobra.Command, args []string) { gtools.Execute() - //开始做事情 + // Start doing things.开始做事情 }, } @@ -74,7 +74,7 @@ func initConfig() { } } -//MergeMysqlDbInfo 合并 +// MergeMysqlDbInfo merge parm func MergeMysqlDbInfo() { var tmp = config.GetMysqlDbInfo() if len(mysqlInfo.Database) > 0 { diff --git a/data/config/MyIni.go b/data/config/MyIni.go index 76fc59f..5a57805 100644 --- a/data/config/MyIni.go +++ b/data/config/MyIni.go @@ -2,7 +2,7 @@ package config import "fmt" -//Config . +// Config custom config struct type Config struct { CfgBase MySQLInfo MysqlDbInfo `toml:"mysql_info"` @@ -12,26 +12,26 @@ type Config struct { SingularTable bool `toml:"singular_table"` } -//MysqlDbInfo mysql 数据库信息 +// MysqlDbInfo mysql database information. mysql 数据库信息 type MysqlDbInfo struct { - Host string `validate:"required"` //地址 - Port int `validate:"required"` //端口号 - Username string `validate:"required"` //用户名 - Password string `validate:"required"` //密码 - Database string `validate:"required"` //数据库名 + Host string `validate:"required"` // Host. 地址 + Port int `validate:"required"` // Port 端口号 + Username string `validate:"required"` // Username 用户名 + Password string `validate:"required"` // Password 密码 + Database string `validate:"required"` // Database 数据库名 } -//SetMysqlDbInfo 更新mysql配置信息 +// SetMysqlDbInfo Update MySQL configuration information func SetMysqlDbInfo(info *MysqlDbInfo) { _map.MySQLInfo = *info } -//GetMysqlDbInfo 获取mysql配置信息 +// GetMysqlDbInfo Get MySQL configuration information .获取mysql配置信息 func GetMysqlDbInfo() MysqlDbInfo { return _map.MySQLInfo } -//GetMysqlConStr 获取mysql 连接字符串 +// GetMysqlConStr Get MySQL connection string.获取mysql 连接字符串 func GetMysqlConStr() string { return fmt.Sprintf("%s:%s@tcp(%s:%d)/%s?charset=utf8&parseTime=True&loc=Local", _map.MySQLInfo.Username, @@ -42,32 +42,32 @@ func GetMysqlConStr() string { ) } -//SetOutDir 设置输出目录 +// SetOutDir Setting Output Directory.设置输出目录 func SetOutDir(outDir string) { _map.OutDir = outDir } -//GetOutDir 获取输出目录 +// GetOutDir Get Output Directory.获取输出目录 func GetOutDir() string { return _map.OutDir } -//SetSingularTable 设置禁用表名复数 +// SetSingularTable Set Disabled Table Name Plurals.设置禁用表名复数 func SetSingularTable(b bool) { _map.SingularTable = b } -//GetSingularTable 获取禁用表名复数 +// GetSingularTable Get Disabled Table Name Plurals.获取禁用表名复数 func GetSingularTable() bool { return _map.SingularTable } -//GetSimple 简单输出 +// GetSimple simple output.简单输出 func GetSimple() bool { return _map.Simple } -//GetIsJSONTag json标记 +// GetIsJSONTag json tag.json标记 func GetIsJSONTag() bool { return _map.IsJSONTag } diff --git a/data/config/common.go b/data/config/common.go index e4ef7fc..c1e2c31 100644 --- a/data/config/common.go +++ b/data/config/common.go @@ -9,13 +9,13 @@ import ( "github.com/BurntSushi/toml" ) -//CfgBase . +// CfgBase base config struct type CfgBase struct { - SerialNumber string `json:"serial_number" toml:"serial_number"` //版本号 - ServiceName string `json:"service_name" toml:"service_name"` //service名字 - ServiceDisplayname string `json:"service_displayname" toml:"service_displayname"` //显示名 - SerciceDesc string `json:"sercice_desc" toml:"sercice_desc"` //service描述 - IsDev bool `json:"is_dev" toml:"is_dev"` //是否是开发版本 + SerialNumber string `json:"serial_number" toml:"serial_number"` // version.版本号 + ServiceName string `json:"service_name" toml:"service_name"` // service name .service名字 + ServiceDisplayname string `json:"service_displayname" toml:"service_displayname"` // display name .显示名 + SerciceDesc string `json:"sercice_desc" toml:"sercice_desc"` // sercice desc .service描述 + IsDev bool `json:"is_dev" toml:"is_dev"` // Is it a development version?是否是开发版本 } var _map = Config{} @@ -34,7 +34,7 @@ func onInit() { } } -//InitFile ... +// InitFile default value from file . func InitFile(filename string) error { if _, err := toml.DecodeFile(filename, &_map); err != nil { fmt.Println("read toml error: ", err.Error()) @@ -44,7 +44,7 @@ func InitFile(filename string) error { return nil } -//GetServiceConfig 获取service配置信息 +// GetServiceConfig Get service configuration information func GetServiceConfig() (name, displayName, desc string) { name = _map.ServiceName displayName = _map.ServiceDisplayname diff --git a/data/config/test_def.go b/data/config/test_def.go index 8f02574..3b53969 100644 --- a/data/config/test_def.go +++ b/data/config/test_def.go @@ -10,7 +10,7 @@ const ( ` ) -//IsRunTesting 判断是否在测试环境下使用 +// IsRunTesting Determine whether to use it in a test environment.判断是否在测试环境下使用 func IsRunTesting() bool { if len(os.Args) > 1 { return strings.HasPrefix(os.Args[1], "-test") diff --git a/data/view/gtools/def.go b/data/view/cnf/def.go similarity index 60% rename from data/view/gtools/def.go rename to data/view/cnf/def.go index 274fcfd..c690fd2 100644 --- a/data/view/gtools/def.go +++ b/data/view/cnf/def.go @@ -1,12 +1,14 @@ -package gtools +package cnf -const ( - _tagGorm = "gorm" - _tagJSON = "json" -) +// EImportsHead imports head options. import包含选项 +var EImportsHead = map[string]string{ + "stirng": `"string"`, + "time.Time": `"time"`, + "gorm.Model": `"github.com/jinzhu/gorm"`, +} -//TypeDicMp 精确匹配类型 -var TypeDicMp = map[string]string{ +// TypeMysqlDicMp Accurate matching type.精确匹配类型 +var TypeMysqlDicMp = map[string]string{ "int": "int", "bigint": "int64", "varchar": "string", @@ -22,8 +24,8 @@ var TypeDicMp = map[string]string{ "timestamp": "time.Time", } -//TypeMatchMp 模糊匹配类型 -var TypeMatchMp = map[string]string{ +// TypeMysqlMatchMp Fuzzy Matching Types.模糊匹配类型 +var TypeMysqlMatchMp = map[string]string{ `^(int)[(]\d+[)]`: "int", `^(bigint)[(]\d+[)]`: "int64", `^(char)[(]\d+[)]`: "string", diff --git a/data/view/generate/common.go b/data/view/generate/common.go new file mode 100644 index 0000000..e96428e --- /dev/null +++ b/data/view/generate/common.go @@ -0,0 +1,17 @@ +package generate + +import "github.com/xxjwxc/public/tools" + +// Add add one to print.打印 +func (p *PrintAtom) Add(str ...interface{}) { + var tmp string + for _, v := range str { + tmp += tools.AsString(v) + _interval + } + p.lines = append(p.lines, tmp) +} + +// Generates Get the generated list.获取生成列表 +func (p *PrintAtom) Generates() []string { + return p.lines +} diff --git a/data/view/generate/def.go b/data/view/generate/def.go new file mode 100644 index 0000000..5ee4b71 --- /dev/null +++ b/data/view/generate/def.go @@ -0,0 +1,9 @@ +package generate + +// interval.间隔 +var _interval = "\t" + +// PrintAtom . atom print .原始打印 +type PrintAtom struct { + lines []string +} diff --git a/data/view/generate/def_ifs.go b/data/view/generate/def_ifs.go new file mode 100644 index 0000000..c8cdd95 --- /dev/null +++ b/data/view/generate/def_ifs.go @@ -0,0 +1,7 @@ +package generate + +// IGenerate Generate Printing Interface.生成打印接口 +type IGenerate interface { + // Get the generate data .获取结果数据 + Generate() string +} diff --git a/data/view/gtools/generate/generate.go b/data/view/generate/generate.go similarity index 100% rename from data/view/gtools/generate/generate.go rename to data/view/generate/generate.go diff --git a/data/view/gtools/generate/common.go b/data/view/genstruct/common.go similarity index 65% rename from data/view/gtools/generate/common.go rename to data/view/genstruct/common.go index c7e64f8..e1fd4db 100644 --- a/data/view/gtools/generate/common.go +++ b/data/view/genstruct/common.go @@ -1,4 +1,4 @@ -package generate +package genstruct import ( "fmt" @@ -6,40 +6,26 @@ import ( "strings" "github.com/xxjwxc/gormt/data/config" - - "github.com/xxjwxc/public/tools" + "github.com/xxjwxc/gormt/data/view/cnf" + "github.com/xxjwxc/gormt/data/view/generate" ) -//Add 打印 -func (p *PrintAtom) Add(str ...interface{}) { - var tmp string - for _, v := range str { - tmp += tools.AsString(v) + _interval - } - p.lines = append(p.lines, tmp) -} - -//Generate 打印 -func (p *PrintAtom) Generate() []string { - return p.lines -} - -//SetName 设置元素名字 +// SetName Setting element name.设置元素名字 func (e *GenElement) SetName(name string) { e.Name = name } -//SetType 设置元素类型 +// SetType Setting element type.设置元素类型 func (e *GenElement) SetType(tp string) { e.Type = tp } -//SetNotes 设置注释 +// SetNotes Setting element notes.设置注释 func (e *GenElement) SetNotes(notes string) { e.Notes = strings.Replace(notes, "\n", ",", -1) } -//AddTag 添加一个tag标记 +// AddTag Add a tag .添加一个tag标记 func (e *GenElement) AddTag(k string, v string) { if e.Tags == nil { e.Tags = make(map[string][]string) @@ -47,7 +33,7 @@ func (e *GenElement) AddTag(k string, v string) { e.Tags[k] = append(e.Tags[k], v) } -//Generate 获取结果数据 +// Generate Get the result data.获取结果数据 func (e *GenElement) Generate() string { tag := "" @@ -65,31 +51,31 @@ func (e *GenElement) Generate() string { tag = fmt.Sprintf("`%v`", strings.Join(tags, " ")) } - var p PrintAtom + var p generate.PrintAtom if len(e.Notes) > 0 { p.Add(e.Name, e.Type, tag, "// "+e.Notes) } else { p.Add(e.Name, e.Type, tag) } - return p.Generate()[0] + return p.Generates()[0] } ////////////////////////////////////////////////////////////////////////////// // struct ////////////////////////////////////////////////////////////////////////////// -//SetCreatTableStr 设置创建语句,备份使用 +// SetCreatTableStr Set up SQL create statement, backup use setup create statement, backup use.设置创建语句,备份使用 func (s *GenStruct) SetCreatTableStr(sql string) { s.SQLBuildStr = sql } -//SetStructName 获取结果数据 +// SetStructName Setting the name of struct.设置struct名字 func (s *GenStruct) SetStructName(name string) { s.Name = name } -//SetNotes 设置注释 +// SetNotes set the notes.设置注释 func (s *GenStruct) SetNotes(notes string) { a := strings.Split(notes, "\n") var text []string @@ -102,14 +88,14 @@ func (s *GenStruct) SetNotes(notes string) { s.Notes = strings.Join(text, "\r\n") } -//AddElement 添加一个/或多个元素 +// AddElement Add one or more elements.添加一个/或多个元素 func (s *GenStruct) AddElement(e ...GenElement) { s.Em = append(s.Em, e...) } -//Generate 获取结果数据 -func (s *GenStruct) Generate() []string { - var p PrintAtom +// Generates Get the result data.获取结果数据 +func (s *GenStruct) Generates() []string { + var p generate.PrintAtom if !config.GetSimple() { p.Add("/******sql******") p.Add(s.SQLBuildStr) @@ -122,19 +108,19 @@ func (s *GenStruct) Generate() []string { } p.Add("}") - return p.Generate() + return p.Generates() } ////////////////////////////////////////////////////////////////////////////// // package ////////////////////////////////////////////////////////////////////////////// -//SetPackage 定义包名 +// SetPackage Defining package names.定义包名 func (p *GenPackage) SetPackage(pname string) { p.Name = pname } -//AddImport 通过类型添加import +// AddImport Add import by type.通过类型添加import func (p *GenPackage) AddImport(imp string) { if p.Imports == nil { p.Imports = make(map[string]string) @@ -142,18 +128,18 @@ func (p *GenPackage) AddImport(imp string) { p.Imports[imp] = imp } -//AddStruct 添加一个结构体 +// AddStruct Add a structure.添加一个结构体 func (p *GenPackage) AddStruct(st GenStruct) { p.Structs = append(p.Structs, st) } -//Generate 获取结果数据 +// Generate Get the result data.获取结果数据 func (p *GenPackage) Generate() string { - p.genimport() //补充 import + p.genimport() // auto add import .补充 import - var pa PrintAtom + var pa generate.PrintAtom pa.Add("package", p.Name) - //add import + // add import if p.Imports != nil { pa.Add("import (") for _, v := range p.Imports { @@ -161,29 +147,29 @@ func (p *GenPackage) Generate() string { } pa.Add(")") } - //-----------end - //add struct + // -----------end + // add struct for _, v := range p.Structs { - for _, v1 := range v.Generate() { + for _, v1 := range v.Generates() { pa.Add(v1) } } - //-----------end + // -----------end - //输出 + // output.输出 strOut := "" - for _, v := range pa.Generate() { + for _, v := range pa.Generates() { strOut += v + "\n" } return strOut } -//获取结果数据 +// compensate and import .获取结果数据 func (p *GenPackage) genimport() { for _, v := range p.Structs { for _, v1 := range v.Em { - if v2, ok := EImportsHead[v1.Type]; ok { + if v2, ok := cnf.EImportsHead[v1.Type]; ok { if len(v2) > 0 { p.AddImport(v2) } diff --git a/data/view/genstruct/def.go b/data/view/genstruct/def.go new file mode 100644 index 0000000..66dc294 --- /dev/null +++ b/data/view/genstruct/def.go @@ -0,0 +1,24 @@ +package genstruct + +// GenElement element of sturct.元素类 +type GenElement struct { + Name string // Name.元素名 + Type string // Type.类型标记 + Notes string // Notes.注释 + Tags map[string][]string // tages.标记 +} + +// GenStruct struct of IStruct .结构体 +type GenStruct struct { + SQLBuildStr string // Create SQL statements.创建sql语句 + Name string // name.名字 + Notes string // notes.注释 + Em []GenElement // em.元素组合 +} + +// GenPackage package of IPackage.包体 +type GenPackage struct { + Name string // name.名字 + Imports map[string]string // Inclusion term.元素组合 + Structs []GenStruct // struct list .结构体组合 +} diff --git a/data/view/genstruct/def_ifs.go b/data/view/genstruct/def_ifs.go new file mode 100644 index 0000000..0c92b46 --- /dev/null +++ b/data/view/genstruct/def_ifs.go @@ -0,0 +1,47 @@ +package genstruct + +import "github.com/xxjwxc/gormt/data/view/generate" + +// IPackage package of interface +type IPackage interface { + generate.IGenerate + // Defining package names.定义包名 + SetPackage(string) + // Add import by type.通过类型添加import + AddImport(string) + // Add a structure.添加一个结构体 + AddStruct(IStruct) +} + +// IStruct struct of interface +type IStruct interface { + generate.IGenerate + + // Set up SQL create statement, backup use.设置创建语句,备份使用 + SetCreatTableStr(string) + + // Setting Structural Name设置结构体名字 + SetStructName(string) + + // setting the notes.设置注释 + SetNotes(string) + + // add one element.添加一个元素 + AddElement(...IElement) +} + +// IElement element in stuct of interface.元素类 +type IElement interface { + generate.IGenerate + + // setting name of element.设置元素名字 + SetName(string) + // Setting element type.设置元素类型 + SetType(string) + + // setting notes of element .设置注释 + SetNotes(string) + + // add one tag.添加一个tag标记 + AddTag(k string, v string) +} diff --git a/data/view/gtools/generate/def.go b/data/view/gtools/generate/def.go deleted file mode 100644 index f58a3c4..0000000 --- a/data/view/gtools/generate/def.go +++ /dev/null @@ -1,90 +0,0 @@ -package generate - -//IPackage 包类 -type IPackage interface { - //定义包名 - SetPackage(string) - //通过类型添加import - AddImport(string) - //添加一个结构体 - AddStruct(IStruct) - //获取结果数据 - Generate() string -} - -//IStruct 结构体类 -type IStruct interface { - //设置创建语句,备份使用 - SetCreatTableStr(string) - - //设置结构体名字 - SetStructName(string) - - //设置注释 - SetNotes(string) - - //添加一个元素 - AddElement(...IElement) - - //获取结果数据 - Generate() []string -} - -//IElement 元素类 -type IElement interface { - //设置元素名字 - SetName(string) - //设置元素类型 - SetType(string) - - //设置注释 - SetNotes(string) - - //添加一个tag标记 - AddTag(k string, v string) - - //获取结果数据 - Generate() string -} - -////////////////////////////////////////////////////////////////////////////// -// -////////////////////////////////////////////////////////////////////////////// - -//GenElement 元素类 -type GenElement struct { - Name string //元素名 - Type string //类型标记 - Notes string //注释 - Tags map[string][]string //标记 -} - -//GenStruct 结构体 -type GenStruct struct { - SQLBuildStr string //创建sql语句 - Name string //名字 - Notes string //注释 - Em []GenElement //元素组合 -} - -//GenPackage 包体 -type GenPackage struct { - Name string //名字 - Imports map[string]string //元素组合 - Structs []GenStruct //结构体组合 -} - -//间隔 -var _interval = "\t" - -//EImportsHead . -var EImportsHead = map[string]string{ - "stirng": `"string"`, - "time.Time": `"time"`, - "gorm.Model": `"github.com/jinzhu/gorm"`, -} - -//PrintAtom . -type PrintAtom struct { - lines []string -} diff --git a/data/view/gtools/gtools.go b/data/view/gtools/gtools.go index 8fee0bc..aa07502 100644 --- a/data/view/gtools/gtools.go +++ b/data/view/gtools/gtools.go @@ -6,23 +6,20 @@ import ( "strings" "github.com/xxjwxc/gormt/data/config" + "github.com/xxjwxc/gormt/data/view/model/genmysql" - "github.com/xxjwxc/public/mysqldb" "github.com/xxjwxc/public/tools" ) -//Execute 开始执行 +// Execute func Execute() { - orm := mysqldb.OnInitDBOrm(config.GetMysqlConStr()) - defer orm.OnDestoryDB() - // var tt oauth_db.UserInfoTbl // tt.Nickname = "ticket_001" // orm.Where("nickname = ?", "ticket_001").Find(&tt) // fmt.Println(tt) - pkg := OnGetPackageInfo(orm, OnGetTables(orm)) + pkg := genmysql.GenMysql() pkg.SetPackage(getPkgName()) str := pkg.Generate() @@ -39,7 +36,7 @@ func Execute() { fmt.Println(string(cmd)) } -// 通过config outdir 配置获取报名 +// Getting package names through config outdir configuration.通过config outdir 配置获取包名 func getPkgName() string { dir := config.GetOutDir() dir = strings.Replace(dir, "\\", "/", -1) diff --git a/data/view/model/genmysql/common.go b/data/view/model/genmysql/common.go new file mode 100644 index 0000000..f9a6fca --- /dev/null +++ b/data/view/model/genmysql/common.go @@ -0,0 +1 @@ +package genmysql diff --git a/data/view/model/genmysql/def.go b/data/view/model/genmysql/def.go new file mode 100644 index 0000000..105d230 --- /dev/null +++ b/data/view/model/genmysql/def.go @@ -0,0 +1,15 @@ +package genmysql + +const ( + _tagGorm = "gorm" + _tagJSON = "json" +) + +// GenColumns show full columns +type GenColumns struct { + Field string `gorm:"column:Field"` + Type string `gorm:"column:Type"` + Key string `gorm:"column:Key"` + Desc string `gorm:"column:Comment"` + Null string `gorm:"column:Null"` +} diff --git a/data/view/gtools/common.go b/data/view/model/genmysql/genmysql.go similarity index 60% rename from data/view/gtools/common.go rename to data/view/model/genmysql/genmysql.go index d199369..0f2255a 100644 --- a/data/view/gtools/common.go +++ b/data/view/model/genmysql/genmysql.go @@ -1,4 +1,4 @@ -package gtools +package genmysql import ( "fmt" @@ -6,17 +6,25 @@ import ( "strings" "github.com/xxjwxc/gormt/data/config" - "github.com/xxjwxc/gormt/data/view/gtools/generate" - + "github.com/xxjwxc/gormt/data/view/cnf" + "github.com/xxjwxc/gormt/data/view/genstruct" "github.com/xxjwxc/public/mybigcamel" "github.com/xxjwxc/public/mysqldb" ) -//OnGetTables 获取表列及注释 +// GenMysql 开始mysql解析 +func GenMysql() genstruct.GenPackage { + orm := mysqldb.OnInitDBOrm(config.GetMysqlConStr()) + defer orm.OnDestoryDB() + + return OnGetPackageInfo(orm, OnGetTables(orm)) +} + +// OnGetTables Get columns and comments.获取表列及注释 func OnGetTables(orm *mysqldb.MySqlDB) map[string]string { tbDesc := make(map[string]string) - //获取列名 + // Get column names.获取列名 var tables []string rows, err := orm.Raw("show tables").Rows() if err != nil { @@ -32,7 +40,7 @@ func OnGetTables(orm *mysqldb.MySqlDB) map[string]string { tbDesc[table] = "" } - //获取表注释 + // Get table annotations.获取表注释 rows, err = orm.Raw("SELECT TABLE_NAME,TABLE_COMMENT FROM information_schema.TABLES WHERE table_schema=?;", config.GetMysqlDbInfo().Database).Rows() if err != nil { @@ -49,18 +57,18 @@ func OnGetTables(orm *mysqldb.MySqlDB) map[string]string { return tbDesc } -//OnGetPackageInfo 获取包信息 -func OnGetPackageInfo(orm *mysqldb.MySqlDB, tabls map[string]string) generate.GenPackage { - var pkg generate.GenPackage +// OnGetPackageInfo getpackage info.获取包信息 +func OnGetPackageInfo(orm *mysqldb.MySqlDB, tabls map[string]string) genstruct.GenPackage { + var pkg genstruct.GenPackage for tab, desc := range tabls { - var sct generate.GenStruct - sct.SetStructName(OnGetCamelName(tab)) //大驼峰 + var sct genstruct.GenStruct + sct.SetStructName(OnGetCamelName(tab)) // Big hump.大驼峰 sct.SetNotes(desc) - //构造元素 + // build element.构造元素 ems := OnGetTableElement(orm, tab) - //--------end + // --------end sct.AddElement(ems...) - //获取表注释 + // Get table annotations.获取表注释 rows, err := orm.Raw("show create table " + tab).Rows() defer rows.Close() if err == nil { @@ -70,7 +78,7 @@ func OnGetPackageInfo(orm *mysqldb.MySqlDB, tabls map[string]string) generate.Ge sct.SetCreatTableStr(CreateTable) } } - //----------end + // ----------end pkg.AddStruct(sct) } @@ -78,12 +86,12 @@ func OnGetPackageInfo(orm *mysqldb.MySqlDB, tabls map[string]string) generate.Ge return pkg } -//OnGetTableElement 获取表列及注释 -func OnGetTableElement(orm *mysqldb.MySqlDB, tab string) []generate.GenElement { - var el []generate.GenElement +// OnGetTableElement Get table columns and comments.获取表列及注释 +func OnGetTableElement(orm *mysqldb.MySqlDB, tab string) []genstruct.GenElement { + var el []genstruct.GenElement keyNums := make(map[string]int) - //获取keys + // get keys var Keys []struct { NonUnique int `gorm:"column:Non_unique"` KeyName string `gorm:"column:Key_name"` @@ -93,47 +101,40 @@ func OnGetTableElement(orm *mysqldb.MySqlDB, tab string) []generate.GenElement { for _, v := range Keys { keyNums[v.KeyName]++ } - //----------end + // ----------end - var list []struct { - Field string `gorm:"column:Field"` - Type string `gorm:"column:Type"` - Key string `gorm:"column:Key"` - Desc string `gorm:"column:Comment"` - Null string `gorm:"column:Null"` - } - - //获取表注释 + var list []GenColumns + // Get table annotations.获取表注释 orm.Raw("show FULL COLUMNS from " + tab).Find(&list) - //过滤 gorm.Model + // filter gorm.Model.过滤 gorm.Model if OnHaveModel(&list) { - var tmp generate.GenElement + var tmp genstruct.GenElement tmp.SetType("gorm.Model") el = append(el, tmp) } - //-----------------end + // -----------------end for _, v := range list { - var tmp generate.GenElement + var tmp genstruct.GenElement tmp.SetName(OnGetCamelName(v.Field)) tmp.SetNotes(v.Desc) tmp.SetType(OnGetTypeName(v.Type)) - if strings.EqualFold(v.Key, "PRI") { //设置主键 + if strings.EqualFold(v.Key, "PRI") { // Set primary key.设置主键 tmp.AddTag(_tagGorm, "primary_key") - } else if strings.EqualFold(v.Key, "UNI") { //unique + } else if strings.EqualFold(v.Key, "UNI") { // unique tmp.AddTag(_tagGorm, "unique") } else { - //index + // index for _, v1 := range Keys { if strings.EqualFold(v1.ColumnName, v.Field) { _val := "" - if v1.NonUnique == 1 { //index + if v1.NonUnique == 1 { // index _val += "index" } else { _val += "unique_index" } - if keyNums[v1.KeyName] > 1 { //复合索引? + if keyNums[v1.KeyName] > 1 { // Composite index.复合索引 _val += ":" + v1.KeyName } @@ -142,7 +143,7 @@ func OnGetTableElement(orm *mysqldb.MySqlDB, tab string) []generate.GenElement { } } - //simple output + // simple output if !config.GetSimple() { tmp.AddTag(_tagGorm, "column:"+v.Field) tmp.AddTag(_tagGorm, "type:"+v.Type) @@ -151,7 +152,7 @@ func OnGetTableElement(orm *mysqldb.MySqlDB, tab string) []generate.GenElement { } } - //json tag + // json tag if config.GetIsJSONTag() { if strings.EqualFold(v.Field, "id") { tmp.AddTag(_tagJSON, "-") @@ -159,28 +160,14 @@ func OnGetTableElement(orm *mysqldb.MySqlDB, tab string) []generate.GenElement { tmp.AddTag(_tagJSON, v.Field) } } - el = append(el, tmp) } - return el } -//OnHaveModel 过滤 gorm.Model -func OnHaveModel(list *[]struct { - Field string `gorm:"column:Field"` - Type string `gorm:"column:Type"` - Key string `gorm:"column:Key"` - Desc string `gorm:"column:Comment"` - Null string `gorm:"column:Null"` -}) bool { - var _temp []struct { - Field string `gorm:"column:Field"` - Type string `gorm:"column:Type"` - Key string `gorm:"column:Key"` - Desc string `gorm:"column:Comment"` - Null string `gorm:"column:Null"` - } +// OnHaveModel filter.过滤 gorm.Model +func OnHaveModel(list *[]GenColumns) bool { + var _temp []GenColumns num := 0 for _, v := range *list { @@ -202,37 +189,37 @@ func OnHaveModel(list *[]struct { return false } -//OnGetTypeName 类型获取过滤 +// OnGetTypeName Type acquisition filtering.类型获取过滤 func OnGetTypeName(name string) string { - //先精确匹配 - if v, ok := TypeDicMp[name]; ok { + // Precise matching first.先精确匹配 + if v, ok := cnf.TypeMysqlDicMp[name]; ok { return v } - //模糊正则匹配 - for k, v := range TypeMatchMp { + // Fuzzy Regular Matching.模糊正则匹配 + for k, v := range cnf.TypeMysqlMatchMp { if ok, _ := regexp.MatchString(k, name); ok { return v } } - panic(fmt.Sprintf("type (%v) not match in any way.", name)) + panic(fmt.Sprintf("type (%v) not match in any way.maybe need to add on ()", name)) } -//OnGetCamelName 大驼峰或者首字母大写 +// OnGetCamelName Big Hump or Capital Letter.大驼峰或者首字母大写 func OnGetCamelName(name string) string { - if config.GetSingularTable() { //如果全局禁用表名复数 + if config.GetSingularTable() { // If the table name plural is globally disabled.如果全局禁用表名复数 return TitleCase(name) } return mybigcamel.Marshal(name) } -//TitleCase 首字母大写 +// TitleCase title case.首字母大写 func TitleCase(name string) string { vv := []rune(name) if len(vv) > 0 { - if bool(vv[0] >= 'a' && vv[0] <= 'z') { //首字母大写 + if bool(vv[0] >= 'a' && vv[0] <= 'z') { // title case.首字母大写 vv[0] -= 32 } }