Browse Source

template add generate TableName() func (#13)

template add table_name option: true or false

template add generate TableName() func

Co-authored-by: Jerry <85411418@qq.com>
Reviewed-on: https://gitea.com/xorm/reverse/pulls/13
main
Jerry 5 years ago
parent
commit
c2a874ad2b
  1. 4
      README.md
  2. 4
      cmd/reverse.go
  3. 16
      cmd/reverse_test.go
  4. 2
      example/custom.yml
  5. 1
      example/goxorm.yml
  6. 1
      example/template/goxorm.tmpl
  7. 20
      example/template/goxorm_table.tmpl
  8. 18
      language/golang.go
  9. 10
      language/language.go

4
README.md

@ -70,6 +70,10 @@ targets:
{{range .ColumnsSeq}}{{$col := $table.GetColumn .}} {{ColumnMapper $col.Name}} {{Type $col}} `{{Tag $table $col}}` {{range .ColumnsSeq}}{{$col := $table.GetColumn .}} {{ColumnMapper $col.Name}} {{Type $col}} `{{Tag $table $col}}`
{{end}} {{end}}
} }
func (m *{{TableMapper .Name}}) TableName() string {
return "{{$table.Name}}"
}
{{end}} {{end}}
template_path: ./template/goxorm.tmpl # template path for code file, it has higher perior than template field on language template_path: ./template/goxorm.tmpl # template path for code file, it has higher perior than template field on language
output_dir: ./models # code output directory output_dir: ./models # code output directory

4
cmd/reverse.go

@ -67,6 +67,7 @@ type ReverseTarget struct {
OutputDir string `yaml:"output_dir"` OutputDir string `yaml:"output_dir"`
TablePrefix string `yaml:"table_prefix"` TablePrefix string `yaml:"table_prefix"`
Language string `yaml:"language"` Language string `yaml:"language"`
TableName bool `yaml:"table_name"`
Funcs map[string]string `yaml:"funcs"` Funcs map[string]string `yaml:"funcs"`
Formatter string `yaml:"formatter"` Formatter string `yaml:"formatter"`
@ -178,7 +179,7 @@ func runReverse(source *ReverseSource, target *ReverseTarget) error {
tables = filterTables(tables, target) tables = filterTables(tables, target)
// load configuration from language // load configuration from language
lang := language.GetLanguage(target.Language)
lang := language.GetLanguage(target.Language, target.TableName)
funcs := newFuncs() funcs := newFuncs()
formatter := formatters[target.Formatter] formatter := formatters[target.Formatter]
importter := importters[target.Importter] importter := importters[target.Importter]
@ -196,6 +197,7 @@ func runReverse(source *ReverseSource, target *ReverseTarget) error {
if lang != nil { if lang != nil {
if bs == nil { if bs == nil {
bs = []byte(lang.Template) bs = []byte(lang.Template)
} }
for k, v := range lang.Funcs { for k, v := range lang.Funcs {

16
cmd/reverse_test.go

@ -17,16 +17,26 @@ import (
"xorm.io/xorm" "xorm.io/xorm"
) )
var result = fmt.Sprintf(`package models
var (
result = fmt.Sprintf(`package models
type A struct { type A struct {
Id int %sxorm:"integer"%s
Id int %sxorm:"'Id' integer"%s
}
func (m *A) TableName() string {
return "a"
} }
type B struct { type B struct {
Id int %sxorm:"INTEGER"%s
Id int %sxorm:"'Id' INTEGER"%s
}
func (m *B) TableName() string {
return "b"
} }
`, "`", "`", "`", "`") `, "`", "`", "`", "`")
)
func TestReverse(t *testing.T) { func TestReverse(t *testing.T) {
err := reverse("../example/goxorm.yml") err := reverse("../example/goxorm.yml")

2
example/custom.yml

@ -5,6 +5,7 @@ source:
conn_str: ../testdata/test.db conn_str: ../testdata/test.db
targets: targets:
- type: codes - type: codes
language: golang
include_tables: include_tables:
- a - a
- b - b
@ -14,6 +15,7 @@ targets:
column_mapper: snake column_mapper: snake
table_prefix: "" table_prefix: ""
multiple_files: true multiple_files: true
table_name: true
template: | template: |
package models package models

1
example/goxorm.yml

@ -11,4 +11,5 @@ targets:
exclude_tables: exclude_tables:
- c - c
language: golang language: golang
table_name: true
output_dir: ../models output_dir: ../models

1
example/template/goxorm.tmpl

@ -13,4 +13,5 @@ type {{TableMapper .Name}} struct {
{{range .ColumnsSeq}}{{$col := $table.GetColumn .}} {{ColumnMapper $col.Name}} {{Type $col}} `{{Tag $table $col}}` {{range .ColumnsSeq}}{{$col := $table.GetColumn .}} {{ColumnMapper $col.Name}} {{Type $col}} `{{Tag $table $col}}`
{{end}} {{end}}
} }
{{end}} {{end}}

20
example/template/goxorm_table.tmpl

@ -0,0 +1,20 @@
package models
{{$ilen := len .Imports}}
{{if gt $ilen 0}}
import (
{{range .Imports}}"{{.}}"{{end}}
)
{{end}}
{{range .Tables}}
type {{TableMapper .Name}} struct {
{{$table := .}}
{{range .ColumnsSeq}}{{$col := $table.GetColumn .}} {{ColumnMapper $col.Name}} {{Type $col}} `{{Tag $table $col}}`
{{end}}
}
func (m *{{TableMapper .Name}}) TableName() string {
return "{{$table.Name}}"
}
{{end}}

18
language/golang.go

@ -50,6 +50,23 @@ type {{TableMapper .Name}} struct {
{{end}} {{end}}
} }
{{end}} {{end}}
`, "`", "`")
defaultGolangTemplateTable = fmt.Sprintf(`package models
{{$ilen := len .Imports}}{{if gt $ilen 0}}import (
{{range .Imports}}"{{.}}"{{end}}
){{end}}
{{range .Tables}}
type {{TableMapper .Name}} struct {
{{$table := .}}{{range .ColumnsSeq}}{{$col := $table.GetColumn .}} {{ColumnMapper $col.Name}} {{Type $col}} %s{{Tag $table $col}}%s
{{end}}
}
func (m *{{TableMapper .Name}}) TableName() string {
return "{{$table.Name}}"
}
{{end}}
`, "`", "`") `, "`", "`")
) )
@ -127,6 +144,7 @@ func tag(table *schemas.Table, col *schemas.Column) template.HTML {
isIdPk := isNameId && typestring(col) == "int64" isIdPk := isNameId && typestring(col) == "int64"
var res []string var res []string
res = append(res, "'"+col.FieldName+"'")
if !col.Nullable { if !col.Nullable {
if !isIdPk { if !isIdPk {
res = append(res, "not null") res = append(res, "not null")

10
language/language.go

@ -31,6 +31,12 @@ func RegisterLanguage(l *Language) {
} }
// GetLanguage returns a language if exists // GetLanguage returns a language if exists
func GetLanguage(name string) *Language {
return languages[name]
func GetLanguage(name string, tableName bool) *Language {
language := languages[name]
if tableName {
language = languages[name]
language.Template = defaultGolangTemplateTable
return language
}
return language
} }
Loading…
Cancel
Save