Skip to content

Commit

Permalink
codegen: Generate valid enum names for symbols (#972)
Browse files Browse the repository at this point in the history
  • Loading branch information
kyleconroy committed Apr 7, 2021
1 parent 0d6d915 commit eec0fe1
Show file tree
Hide file tree
Showing 6 changed files with 90 additions and 9 deletions.
10 changes: 8 additions & 2 deletions internal/codegen/golang/result.go
Original file line number Diff line number Diff line change
Expand Up @@ -34,12 +34,18 @@ func buildEnums(r *compiler.Result, settings config.CombinedSettings) []Enum {
Name: StructName(enumName, settings),
Comment: enum.Comment,
}
for _, v := range enum.Vals {
seen := make(map[string]struct{}, len(enum.Vals))
for i, v := range enum.Vals {
value := EnumReplace(v)
if _, found := seen[value]; found || value == "" {
value = fmt.Sprintf("value_%d", i)
}
e.Constants = append(e.Constants, Constant{
Name: StructName(enumName+"_"+EnumReplace(v), settings),
Name: StructName(enumName+"_"+value, settings),
Value: v,
Type: e.Name,
})
seen[value] = struct{}{}
}
enums = append(enums, e)
}
Expand Down
30 changes: 30 additions & 0 deletions internal/endtoend/testdata/ddl_create_enum/mysql/go/models.go

Some generated files are not rendered by default. Learn more about how customized files appear on GitHub.

12 changes: 6 additions & 6 deletions internal/endtoend/testdata/ddl_create_enum/mysql/go/query.sql.go

Some generated files are not rendered by default. Learn more about how customized files appear on GitHub.

3 changes: 2 additions & 1 deletion internal/endtoend/testdata/ddl_create_enum/mysql/schema.sql
Original file line number Diff line number Diff line change
@@ -1,3 +1,4 @@
CREATE TABLE foo (
foobar ENUM ('foo-a', 'foo_b', 'foo:c', 'foo/d', 'foo@e', 'foo+f', 'foo!g') NOT NULL
foobar ENUM ('foo-a', 'foo_b', 'foo:c', 'foo/d', 'foo@e', 'foo+f', 'foo!g') NOT NULL,
digit ENUM ('0', '1', '2', '3', '4', '5', '6', '7', '8', '9', '#', '*') NOT NULL
);
29 changes: 29 additions & 0 deletions internal/endtoend/testdata/ddl_create_enum/postgresql/go/models.go

Some generated files are not rendered by default. Learn more about how customized files appear on GitHub.

15 changes: 15 additions & 0 deletions internal/endtoend/testdata/ddl_create_enum/postgresql/schema.sql
Original file line number Diff line number Diff line change
Expand Up @@ -10,4 +10,19 @@ CREATE TYPE foobar AS ENUM (
'foo!g'
);

CREATE TYPE "digit" AS ENUM (
'0',
'1',
'2',
'3',
'4',
'5',
'6',
'7',
'8',
'9',
'#',
'*'
);

CREATE TABLE foo (val foobar NOT NULL);

0 comments on commit eec0fe1

Please sign in to comment.