You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
 
 

70 lines
1.7 KiB

package main
import (
_ "embed"
"flag"
"fmt"
"git.diulo.com/mogfee/kit/mysql/ddl"
"git.diulo.com/mogfee/kit/stringx"
"html/template"
"os"
"os/exec"
"strings"
)
//go:embed template.tpl
var modelTemplate string
func main() {
sqlFile := flag.String("f", "", "数据库创建mysqldump文件")
savePath := flag.String("s", "./model/", "数据库存储路径")
flag.Parse()
fmt.Println("sqlfile:", *sqlFile)
fmt.Println("savePath:", *savePath)
if *sqlFile == "" {
return
}
os.MkdirAll(*savePath, os.ModePerm)
err := ddl.Parser(*sqlFile, func(table *ddl.Table) error {
table.Imports = append(table.Imports, "gorm.io/gorm")
table.Imports = append(table.Imports, "context")
//table.Imports = append(table.Imports, "git.diulo.com/mogfee/kit/errors")
saveFileName := fmt.Sprintf("%s/%s_gen.go", strings.TrimRight(*savePath, "/"), table.Name)
tmp, err := template.New("").Funcs(map[string]any{
"UpperType": func(str string) string {
return stringx.Ucfirst(ddl.GoName(str))
},
"LowerType": func(str string) string {
if str == "type" {
str = "vtype"
}
return stringx.Lcfirst(ddl.GoName(str))
},
"UpdateColumn": func(columns []*ddl.TableColumn) string {
arr := []string{}
for _, v := range columns {
arr = append(arr, fmt.Sprintf("%s=?", v.Name))
}
return strings.Join(arr, " and ")
},
}).Parse(modelTemplate)
if err != nil {
return err
}
//ddl.PrintJson(table)
//table.Primary.GoType
//fmt.Println(table.Primary)
f, err := os.Create(saveFileName)
if err != nil {
return err
}
defer f.Close()
return tmp.Execute(f, table)
})
if err != nil {
panic(err)
}
exec.Command("gofmt", "-l", "-w", *savePath+"/..").Run()
}