diff --git a/internal/dinosql/gen.go b/internal/dinosql/gen.go index d1c72cf4c2..7179294742 100644 --- a/internal/dinosql/gen.go +++ b/internal/dinosql/gen.go @@ -7,6 +7,7 @@ import ( "go/format" "log" "path/filepath" + "regexp" "sort" "strings" "text/template" @@ -17,6 +18,8 @@ import ( "github.com/jinzhu/inflection" ) +var identPattern = regexp.MustCompile("[^a-zA-Z0-9]+") + type GoConstant struct { Name string Type string @@ -404,7 +407,11 @@ func (r Result) Enums() []GoEnum { } for _, v := range enum.Vals { name := "" - for _, part := range strings.Split(strings.Replace(v, "-", "_", -1), "_") { + id := strings.Replace(v, "-", "_", -1) + id = strings.Replace(id, ":", "_", -1) + id = strings.Replace(id, "/", "_", -1) + id = identPattern.ReplaceAllString(id, "") + for _, part := range strings.Split(id, "_") { name += strings.Title(part) } e.Constants = append(e.Constants, GoConstant{ diff --git a/internal/dinosql/testdata/ondeck/models.go b/internal/dinosql/testdata/ondeck/models.go index 29e778c926..1d5d0aa5f4 100644 --- a/internal/dinosql/testdata/ondeck/models.go +++ b/internal/dinosql/testdata/ondeck/models.go @@ -11,8 +11,8 @@ import ( type Status string const ( - StatusOpen Status = "open" - StatusClosed Status = "closed" + StatusOpen Status = "op!en" + StatusClosed Status = "clo@sed" ) func (e *Status) Scan(src interface{}) error { diff --git a/internal/dinosql/testdata/ondeck/prepared/models.go b/internal/dinosql/testdata/ondeck/prepared/models.go index 8c4e664b64..b35e0628ec 100644 --- a/internal/dinosql/testdata/ondeck/prepared/models.go +++ b/internal/dinosql/testdata/ondeck/prepared/models.go @@ -11,8 +11,8 @@ import ( type Status string const ( - StatusOpen Status = "open" - StatusClosed Status = "closed" + StatusOpen Status = "op!en" + StatusClosed Status = "clo@sed" ) func (e *Status) Scan(src interface{}) error { diff --git a/internal/dinosql/testdata/ondeck/schema/0002_venue.sql b/internal/dinosql/testdata/ondeck/schema/0002_venue.sql index 6e680c18ab..940de7a5a8 100644 --- a/internal/dinosql/testdata/ondeck/schema/0002_venue.sql +++ b/internal/dinosql/testdata/ondeck/schema/0002_venue.sql @@ -1,4 +1,4 @@ -CREATE TYPE status AS ENUM ('open', 'closed'); +CREATE TYPE status AS ENUM ('op!en', 'clo@sed'); COMMENT ON TYPE status IS 'Venues can be either open or closed'; CREATE TABLE venues (