1 Star 0 Fork 0

zhaobu / gen

加入 Gitee
与超过 1200万 开发者一起发现、参与优秀开源项目,私有仓库也完全免费 :)
免费加入
克隆/下载
main.go 4.22 KB
一键复制 编辑 原始数据 按行查看 历史
lwcywin10 提交于 2020-06-15 11:45 . 1:修改go mod 路径
package main
import (
"database/sql"
"fmt"
"strings"
"github.com/droundy/goopt"
"github.com/gobuffalo/packr/v2"
"github.com/jimsmart/schema"
_ "github.com/denisenkom/go-mssqldb"
_ "github.com/jinzhu/gorm/dialects/mysql"
_ "github.com/lib/pq"
_ "github.com/mattn/go-sqlite3"
"gitee.com/zhaobu/gen/dbmeta"
)
var (
sqlType = goopt.String([]string{"--sqltype"}, "mysql", "sql database type such as [ mysql, mssql, postgres, sqlite, etc. ]")
sqlConnStr = goopt.String([]string{"-c", "--connstr"}, "nil", "database connection string")
sqlDatabase = goopt.String([]string{"-d", "--database"}, "nil", "Database to for connection")
sqlTable = goopt.String([]string{"-t", "--table"}, "", "Table to build struct from")
baseTemplates *packr.Box
)
func init() {
// Setup goopts
goopt.Description = func() string {
return "ORM and RESTful meta data viewer for SQl databases"
}
goopt.Version = "v0.9.11 (06/13/2020)"
goopt.Summary = `dbmeta [-v] --sqltype=mysql --connstr "user:password@/dbname" --database <databaseName>
sqltype - sql database type such as [ mysql, mssql, postgres, sqlite, etc. ]
`
//Parse options
goopt.Parse(nil)
}
func main() {
baseTemplates = packr.New("gen", "./template")
var err error
var content []byte
content, err = baseTemplates.Find("mapping.json")
if err != nil {
fmt.Printf("Error getting default map[mapping file error: %v\n", err)
return
}
err = dbmeta.ProcessMappings("internal", content, false)
if err != nil {
fmt.Printf("Error processing default mapping file error: %v\n", err)
return
}
// Username is required
if sqlConnStr == nil || *sqlConnStr == "" || *sqlConnStr == "nil" {
fmt.Printf("sql connection string is required! Add it with --connstr=s\n\n")
fmt.Println(goopt.Usage())
return
}
if sqlDatabase == nil || *sqlDatabase == "" || *sqlDatabase == "nil" {
fmt.Printf("Database can not be null\n\n")
fmt.Println(goopt.Usage())
return
}
var db *sql.DB
db, err = sql.Open(*sqlType, *sqlConnStr)
if err != nil {
fmt.Printf("Error in open database: %v\n\n", err.Error())
return
}
defer func() { _ = db.Close() }()
err = db.Ping()
if err != nil {
fmt.Printf("Error connecting to database: %v\n\n", err.Error())
return
}
var dbTables []string
// parse or read tables
if *sqlTable != "" && *sqlTable != "all" {
dbTables = strings.Split(*sqlTable, ",")
fmt.Printf("showing meta for table(s): %s\n", *sqlTable)
} else {
fmt.Printf("showing meta for all tables\n")
dbTables, err = schema.TableNames(db)
if err != nil {
fmt.Printf("Error in fetching tables information from %s information schema from %s\n", *sqlType, *sqlConnStr)
return
}
}
for _, tableName := range dbTables {
fmt.Printf("---------------------------\n")
if strings.HasPrefix(tableName, "[") && strings.HasSuffix(tableName, "]") {
tableName = tableName[1 : len(tableName)-1]
}
fmt.Printf("[%s]\n", tableName)
tableInfo, err := dbmeta.LoadMeta(*sqlType, db, *sqlDatabase, tableName)
if err != nil {
fmt.Printf("Error getting table info for %s error: %v\n\n\n\n", tableName, err)
continue
}
fmt.Printf("\n\nDDL\n%s\n\n\n", tableInfo.DDL())
for _, col := range tableInfo.Columns() {
fmt.Printf("%s\n", col.String())
colMapping, err := dbmeta.SQLTypeToMapping(strings.ToLower(col.DatabaseTypeName()))
if err != nil { // unknown type
fmt.Printf("unable to find mapping for db type: %s\n", col.DatabaseTypeName())
continue
}
fmt.Printf(" %s\n", colMapping.String())
}
primaryCnt := dbmeta.PrimaryKeyCount(tableInfo)
fmt.Printf("primaryCnt: %d\n", primaryCnt)
fmt.Printf("\n\n")
delSql, err := dbmeta.GenerateDeleteSql(tableInfo)
if err == nil {
fmt.Printf("delSql: %s\n", delSql)
}
updateSql, err := dbmeta.GenerateUpdateSql(tableInfo)
if err == nil {
fmt.Printf("updateSql: %s\n", updateSql)
}
insertSql, err := dbmeta.GenerateInsertSql(tableInfo)
if err == nil {
fmt.Printf("insertSql: %s\n", insertSql)
}
selectOneSql, err := dbmeta.GenerateSelectOneSql(tableInfo)
if err == nil {
fmt.Printf("selectOneSql: %s\n", selectOneSql)
}
selectMultiSql, err := dbmeta.GenerateSelectMultiSql(tableInfo)
if err == nil {
fmt.Printf("selectMultiSql: %s\n", selectMultiSql)
}
}
}
Go
1
https://gitee.com/zhaobu/gen.git
git@gitee.com:zhaobu/gen.git
zhaobu
gen
gen
06d4ffe87f16

搜索帮助