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
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() |
|
|
|
}
|
|
|