1 Star 0 Fork 0

go10/go

加入 Gitee
与超过 1400万 开发者一起发现、参与优秀开源项目,私有仓库也完全免费 :)
免费加入
文件
克隆/下载
schema.go 1.43 KB
一键复制 编辑 原始数据 按行查看 历史
proce 提交于 2022-03-20 18:50 +08:00 . save
package pg
import (
"fmt"
"log"
"strings"
)
type Table struct {
Name string
Desc string
Struct interface{}
Constraints []string
Options []string
ExtraSqls []string
}
// Sql add create table sql
// Using Name as table name, Desc as table description, Struct struct as table columns and comments.
func (t Table) Sql() string {
t.Name = strings.TrimSpace(t.Name)
if t.Name == "" {
log.Panic("table name required")
}
t.Desc = strings.TrimSpace(t.Desc)
if t.Desc == "" {
log.Panic("table desc required")
}
if t.Struct == nil {
log.Panic("table struct required")
}
columns := columnsFromStruct(t.Struct)
columns = append(columns, t.Constraints...)
for i := range columns {
columns[i] = ` ` + strings.TrimRight(strings.TrimSpace(columns[i]), `,`)
}
columnsStr := strings.Join(columns, ",\n")
for i := range t.Options {
t.Options[i] = "\n" + strings.TrimSpace(t.Options[i])
}
optionsSql := strings.Join(t.Options, "")
for i := range t.ExtraSqls {
t.ExtraSqls[i] = ensureTail(strings.TrimSpace(t.ExtraSqls[i]), ';') + "\n"
}
extSqlsStr := strings.Join(t.ExtraSqls, "")
sql := fmt.Sprintf(`CREATE TABLE IF NOT EXISTS %s (
%s
)%s;
%sCOMMENT ON TABLE %s is %s;
%s`, t.Name, columnsStr, optionsSql, extSqlsStr, t.Name, Q(t.Desc), ColumnsComments(t.Name, t.Struct))
return sql
}
func ensureTail(str string, tail byte) string {
if str[len(str)-1] == tail {
return str
}
return str + string(tail)
}
Loading...
马建仓 AI 助手
尝试更多
代码解读
代码找茬
代码优化
Go
1
https://gitee.com/go10/go.git
git@gitee.com:go10/go.git
go10
go
go
d31700df43a9

搜索帮助