You cannot select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
go-zero/tools/goctl/model/sql/command/command.go

88 lines
2.0 KiB
Go

package command
import (
"io/ioutil"
"path/filepath"
"strings"
"github.com/urfave/cli"
"github.com/tal-tech/go-zero/core/collection"
"github.com/tal-tech/go-zero/core/logx"
"github.com/tal-tech/go-zero/core/stores/sqlx"
"github.com/tal-tech/go-zero/tools/goctl/model/sql/gen"
"github.com/tal-tech/go-zero/tools/goctl/model/sql/model"
"github.com/tal-tech/go-zero/tools/goctl/util/console"
)
const (
flagSrc = "src"
flagDir = "dir"
flagCache = "cache"
flagIdea = "idea"
flagUrl = "url"
flagTable = "table"
)
func MysqlDDL(ctx *cli.Context) error {
src := ctx.String(flagSrc)
dir := ctx.String(flagDir)
cache := ctx.Bool(flagCache)
idea := ctx.Bool(flagIdea)
log := console.NewConsole(idea)
fileSrc, err := filepath.Abs(src)
if err != nil {
return err
}
data, err := ioutil.ReadFile(fileSrc)
if err != nil {
return err
}
source := string(data)
generator := gen.NewDefaultGenerator(source, dir, gen.WithConsoleOption(log))
err = generator.Start(cache)
if err != nil {
log.Error("%v", err)
}
return nil
}
func MyDataSource(ctx *cli.Context) error {
url := strings.TrimSpace(ctx.String(flagUrl))
dir := strings.TrimSpace(ctx.String(flagDir))
cache := ctx.Bool(flagCache)
idea := ctx.Bool(flagIdea)
table := strings.TrimSpace(ctx.String(flagTable))
log := console.NewConsole(idea)
if len(url) == 0 {
log.Error("%v", "expected data source of mysql, but is empty")
return nil
}
if len(table) == 0 {
log.Error("%v", "expected table(s), but nothing found")
return nil
}
logx.Disable()
conn := sqlx.NewMysql(url)
m := model.NewDDLModel(conn)
tables := collection.NewSet()
for _, item := range strings.Split(table, ",") {
item = strings.TrimSpace(item)
if len(item) == 0 {
continue
}
tables.AddStr(item)
}
ddl, err := m.ShowDDL(tables.KeysStr()...)
if err != nil {
log.Error("%v", err)
return nil
}
generator := gen.NewDefaultGenerator(strings.Join(ddl, "\n"), dir, gen.WithConsoleOption(log))
err = generator.Start(cache)
if err != nil {
log.Error("%v", err)
}
return nil
}