From 3ebe49225694bf9a47d2ea04399ff5e210075761 Mon Sep 17 00:00:00 2001 From: Kyle Conroy Date: Tue, 17 Dec 2019 15:59:38 -0800 Subject: [PATCH 1/2] internal/dinosql: Filter out invalid characters Ensure that enum identifiers are valid --- internal/dinosql/gen.go | 9 ++++++++- internal/dinosql/testdata/ondeck/schema/0002_venue.sql | 2 +- 2 files changed, 9 insertions(+), 2 deletions(-) diff --git a/internal/dinosql/gen.go b/internal/dinosql/gen.go index d1c72cf4c2..8d602ad9dc 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), "_") { + v = strings.Replace(v, "-", "_", -1) + v = strings.Replace(v, ":", "_", -1) + v = strings.Replace(v, "/", "_", -1) + v = identPattern.ReplaceAllString(v, "") + for _, part := range strings.Split(v, "_") { name += strings.Title(part) } e.Constants = append(e.Constants, GoConstant{ 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 ( From 6e6fb2888464800949e32f47b3f83719aeaf1bd9 Mon Sep 17 00:00:00 2001 From: Kyle Conroy Date: Tue, 17 Dec 2019 16:05:44 -0800 Subject: [PATCH 2/2] Ignore certain values when pick names --- internal/dinosql/gen.go | 10 +++++----- internal/dinosql/testdata/ondeck/models.go | 4 ++-- internal/dinosql/testdata/ondeck/prepared/models.go | 4 ++-- 3 files changed, 9 insertions(+), 9 deletions(-) diff --git a/internal/dinosql/gen.go b/internal/dinosql/gen.go index 8d602ad9dc..7179294742 100644 --- a/internal/dinosql/gen.go +++ b/internal/dinosql/gen.go @@ -407,11 +407,11 @@ func (r Result) Enums() []GoEnum { } for _, v := range enum.Vals { name := "" - v = strings.Replace(v, "-", "_", -1) - v = strings.Replace(v, ":", "_", -1) - v = strings.Replace(v, "/", "_", -1) - v = identPattern.ReplaceAllString(v, "") - for _, part := range strings.Split(v, "_") { + 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 {