Skip to content

Commit eec0fe1

Browse files
authored
codegen: Generate valid enum names for symbols (#972)
1 parent 0d6d915 commit eec0fe1

File tree

6 files changed

+90
-9
lines changed

6 files changed

+90
-9
lines changed

internal/codegen/golang/result.go

Lines changed: 8 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -34,12 +34,18 @@ func buildEnums(r *compiler.Result, settings config.CombinedSettings) []Enum {
3434
Name: StructName(enumName, settings),
3535
Comment: enum.Comment,
3636
}
37-
for _, v := range enum.Vals {
37+
seen := make(map[string]struct{}, len(enum.Vals))
38+
for i, v := range enum.Vals {
39+
value := EnumReplace(v)
40+
if _, found := seen[value]; found || value == "" {
41+
value = fmt.Sprintf("value_%d", i)
42+
}
3843
e.Constants = append(e.Constants, Constant{
39-
Name: StructName(enumName+"_"+EnumReplace(v), settings),
44+
Name: StructName(enumName+"_"+value, settings),
4045
Value: v,
4146
Type: e.Name,
4247
})
48+
seen[value] = struct{}{}
4349
}
4450
enums = append(enums, e)
4551
}

internal/endtoend/testdata/ddl_create_enum/mysql/go/models.go

Lines changed: 30 additions & 0 deletions
Some generated files are not rendered by default. Learn more about customizing how changed files appear on GitHub.

internal/endtoend/testdata/ddl_create_enum/mysql/go/query.sql.go

Lines changed: 6 additions & 6 deletions
Some generated files are not rendered by default. Learn more about customizing how changed files appear on GitHub.
Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,3 +1,4 @@
11
CREATE TABLE foo (
2-
foobar ENUM ('foo-a', 'foo_b', 'foo:c', 'foo/d', 'foo@e', 'foo+f', 'foo!g') NOT NULL
2+
foobar ENUM ('foo-a', 'foo_b', 'foo:c', 'foo/d', 'foo@e', 'foo+f', 'foo!g') NOT NULL,
3+
digit ENUM ('0', '1', '2', '3', '4', '5', '6', '7', '8', '9', '#', '*') NOT NULL
34
);

internal/endtoend/testdata/ddl_create_enum/postgresql/go/models.go

Lines changed: 29 additions & 0 deletions
Some generated files are not rendered by default. Learn more about customizing how changed files appear on GitHub.

internal/endtoend/testdata/ddl_create_enum/postgresql/schema.sql

Lines changed: 15 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -10,4 +10,19 @@ CREATE TYPE foobar AS ENUM (
1010
'foo!g'
1111
);
1212

13+
CREATE TYPE "digit" AS ENUM (
14+
'0',
15+
'1',
16+
'2',
17+
'3',
18+
'4',
19+
'5',
20+
'6',
21+
'7',
22+
'8',
23+
'9',
24+
'#',
25+
'*'
26+
);
27+
1328
CREATE TABLE foo (val foobar NOT NULL);

0 commit comments

Comments
 (0)