[bug] Fix crash on generating enum sql builder files when enum contains numeric values.
This commit is contained in:
parent
f154701e60
commit
63c1fd6430
5 changed files with 42 additions and 5 deletions
|
|
@ -74,6 +74,7 @@ func GenerateTemplate(templateText string, templateData interface{}, dialect jet
|
|||
|
||||
t, err := template.New("sqlBuilderTableTemplate").Funcs(template.FuncMap{
|
||||
"ToGoIdentifier": utils.ToGoIdentifier,
|
||||
"ToGoEnumValueIdentifier": utils.ToGoEnumValueIdentifier,
|
||||
"now": func() string {
|
||||
return time.Now().Format(time.RFC850)
|
||||
},
|
||||
|
|
|
|||
|
|
@ -94,11 +94,11 @@ import "github.com/go-jet/jet/{{dialect.PackageName}}"
|
|||
|
||||
var {{ToGoIdentifier $.Name}} = &struct {
|
||||
{{- range $index, $element := .Values}}
|
||||
{{ToGoIdentifier $element}} {{dialect.PackageName}}.StringExpression
|
||||
{{ToGoEnumValueIdentifier $.Name $element}} {{dialect.PackageName}}.StringExpression
|
||||
{{- end}}
|
||||
} {
|
||||
{{- range $index, $element := .Values}}
|
||||
{{ToGoIdentifier $element}}: {{dialect.PackageName}}.NewEnumValue("{{$element}}"),
|
||||
{{ToGoEnumValueIdentifier $.Name $element}}: {{dialect.PackageName}}.NewEnumValue("{{$element}}"),
|
||||
{{- end}}
|
||||
}
|
||||
`
|
||||
|
|
|
|||
|
|
@ -10,6 +10,7 @@ import (
|
|||
"reflect"
|
||||
"strings"
|
||||
"time"
|
||||
"unicode"
|
||||
)
|
||||
|
||||
// ToGoIdentifier converts database to Go identifier.
|
||||
|
|
@ -17,6 +18,15 @@ func ToGoIdentifier(databaseIdentifier string) string {
|
|||
return snaker.SnakeToCamel(replaceInvalidChars(databaseIdentifier))
|
||||
}
|
||||
|
||||
func ToGoEnumValueIdentifier(enumName, enumValue string) string {
|
||||
enumValueIdentifier := ToGoIdentifier(enumValue)
|
||||
if !unicode.IsLetter([]rune(enumValueIdentifier)[0]) {
|
||||
return ToGoIdentifier(enumName) + enumValueIdentifier
|
||||
}
|
||||
|
||||
return enumValueIdentifier
|
||||
}
|
||||
|
||||
// ToGoFileName converts database identifier to Go file name.
|
||||
func ToGoFileName(databaseIdentifier string) string {
|
||||
return strings.ToLower(replaceInvalidChars(databaseIdentifier))
|
||||
|
|
|
|||
|
|
@ -25,6 +25,11 @@ func TestToGoIdentifier(t *testing.T) {
|
|||
assert.Equal(t, ToGoIdentifier("My-Table"), "MyTable")
|
||||
}
|
||||
|
||||
func TestToGoEnumValueIdentifier(t *testing.T) {
|
||||
assert.Equal(t, ToGoEnumValueIdentifier("enum_name", "enum_value"), "EnumValue")
|
||||
assert.Equal(t, ToGoEnumValueIdentifier("NumEnum", "100"), "NumEnum100")
|
||||
}
|
||||
|
||||
func TestErrorCatchErr(t *testing.T) {
|
||||
var err error
|
||||
|
||||
|
|
|
|||
|
|
@ -283,14 +283,15 @@ func TestGeneratedAllTypesSQLBuilderFiles(t *testing.T) {
|
|||
enumFiles, err := ioutil.ReadDir(enumDir)
|
||||
assert.NoError(t, err)
|
||||
|
||||
testutils.AssertFileNamesEqual(t, enumFiles, "mood.go")
|
||||
testutils.AssertFileNamesEqual(t, enumFiles, "mood.go", "level.go")
|
||||
testutils.AssertFileContent(t, enumDir+"mood.go", "\npackage enum", moodEnumContent)
|
||||
testutils.AssertFileContent(t, enumDir+"level.go", "\npackage enum", levelEnumContent)
|
||||
|
||||
modelFiles, err := ioutil.ReadDir(modelDir)
|
||||
assert.NoError(t, err)
|
||||
|
||||
testutils.AssertFileNamesEqual(t, modelFiles, "all_types.go", "all_types_view.go", "employee.go", "link.go",
|
||||
"mood.go", "person.go", "person_phone.go", "weird_names_table.go")
|
||||
"mood.go", "person.go", "person_phone.go", "weird_names_table.go", "level.go")
|
||||
|
||||
testutils.AssertFileContent(t, modelDir+"all_types.go", "\npackage model", allTypesModelContent)
|
||||
|
||||
|
|
@ -319,6 +320,26 @@ var Mood = &struct {
|
|||
}
|
||||
`
|
||||
|
||||
var levelEnumContent = `
|
||||
package enum
|
||||
|
||||
import "github.com/go-jet/jet/postgres"
|
||||
|
||||
var Level = &struct {
|
||||
Level1 postgres.StringExpression
|
||||
Level2 postgres.StringExpression
|
||||
Level3 postgres.StringExpression
|
||||
Level4 postgres.StringExpression
|
||||
Level5 postgres.StringExpression
|
||||
}{
|
||||
Level1: postgres.NewEnumValue("1"),
|
||||
Level2: postgres.NewEnumValue("2"),
|
||||
Level3: postgres.NewEnumValue("3"),
|
||||
Level4: postgres.NewEnumValue("4"),
|
||||
Level5: postgres.NewEnumValue("5"),
|
||||
}
|
||||
`
|
||||
|
||||
var allTypesModelContent = `
|
||||
package model
|
||||
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue