Skip to content

Commit 391253a

Browse files
committed
feat(golang): support custom enum type slices for pgx/v4 & pgx/v5
1 parent ce45b98 commit 391253a

File tree

30 files changed

+503
-0
lines changed

30 files changed

+503
-0
lines changed

examples/batch/postgresql/models.go

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

go.mod

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -7,6 +7,7 @@ require (
77
github.com/bytecodealliance/wasmtime-go/v8 v8.0.0
88
github.com/cubicdaiya/gonp v1.0.4
99
github.com/davecgh/go-spew v1.1.1
10+
github.com/gertd/go-pluralize v0.2.1
1011
github.com/go-sql-driver/mysql v1.7.1
1112
github.com/google/cel-go v0.17.1
1213
github.com/google/go-cmp v0.5.9

go.sum

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -20,6 +20,8 @@ github.com/cznic/mathutil v0.0.0-20181122101859-297441e03548/go.mod h1:e6NPNENfs
2020
github.com/davecgh/go-spew v1.1.0/go.mod h1:J7Y8YcW2NihsgmVo/mv3lAwl/skON4iLHjSsI+c5H38=
2121
github.com/davecgh/go-spew v1.1.1 h1:vj9j/u1bqnvCEfJOwUhtlOARqs3+rkHYY13jYWTU97c=
2222
github.com/davecgh/go-spew v1.1.1/go.mod h1:J7Y8YcW2NihsgmVo/mv3lAwl/skON4iLHjSsI+c5H38=
23+
github.com/gertd/go-pluralize v0.2.1 h1:M3uASbVjMnTsPb0PNqg+E/24Vwigyo/tvyMTtAlLgiA=
24+
github.com/gertd/go-pluralize v0.2.1/go.mod h1:rbYaKDbsXxmRfr8uygAEKhOWsjyrrqrkHVpZvoOp8zk=
2325
github.com/go-kit/log v0.1.0/go.mod h1:zbhenjAZHb184qTLMA9ZjW7ThYL0H2mk7Q6pNt4vbaY=
2426
github.com/go-logfmt/logfmt v0.5.0/go.mod h1:wCYkCAKZfumFQihp8CzCvQ3paCTfi41vtzG1KdI/P7A=
2527
github.com/go-sql-driver/mysql v1.7.1 h1:lUIinVbN1DY0xBg0eMOzmmtGoHwWBbvnWubQUrtU8EI=

internal/codegen/golang/gen.go

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -10,6 +10,7 @@ import (
1010
"strings"
1111
"text/template"
1212

13+
"github.com/gertd/go-pluralize"
1314
"github.com/kyleconroy/sqlc/internal/codegen/sdk"
1415
"github.com/kyleconroy/sqlc/internal/metadata"
1516
"github.com/kyleconroy/sqlc/internal/plugin"
@@ -159,6 +160,8 @@ func generate(req *plugin.CodeGenRequest, enums []Enum, structs []Struct, querie
159160
"escape": sdk.EscapeBacktick,
160161
"imports": i.Imports,
161162
"hasPrefix": strings.HasPrefix,
163+
"toLower": strings.ToLower,
164+
"pluralize": pluralize.NewClient().Plural,
162165

163166
// These methods are Go specific, they do not belong in the codegen package
164167
// (as that is language independent)

internal/codegen/golang/templates/template.tmpl

Lines changed: 31 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -87,6 +87,31 @@ func (e *{{.Name}}) Scan(src interface{}) error {
8787
return nil
8888
}
8989

90+
{{if $.SQLDriver.IsPGX }}
91+
type {{ pluralize .Name }} []string
92+
93+
{{if (eq $.SQLDriver.Package "pgx/v4") }}
94+
func (e *{{ pluralize .Name }}) DecodeText(ci *pgtype.ConnInfo, src []byte) error {
95+
var dec pgtype.TextArray
96+
if err := dec.DecodeText(ci, src); err != nil {
97+
return err
98+
}
99+
for _, el := range dec.Elements {
100+
*e = append(*e, el.String)
101+
}
102+
return nil
103+
}
104+
105+
func (e {{ pluralize .Name }}) EncodeText(ci *pgtype.ConnInfo, buf []byte) ([]byte, error) {
106+
var enc pgtype.TextArray
107+
if err := enc.Set(e); err != nil {
108+
return nil, err
109+
}
110+
return enc.EncodeText(ci, buf)
111+
}
112+
{{end}}
113+
{{end}}
114+
90115
type Null{{.Name}} struct {
91116
{{.Name}} {{.Name}} {{if .NameTag}}{{$.Q}}{{.NameTag}}{{$.Q}}{{end}}
92117
Valid bool {{if .ValidTag}}{{$.Q}}{{.ValidTag}}{{$.Q}}{{end}} // Valid is true if {{.Name}} is not NULL
@@ -129,6 +154,12 @@ func All{{ .Name }}Values() []{{ .Name }} {
129154
{{ end }}
130155
{{end}}
131156

157+
{{if and (gt (len .Enums) 0) (eq $.SQLDriver.Package "pgx/v5") }}
158+
var EnumNames = []string{
159+
{{range .Enums}}{{toLower .Name | printf "%q"}},{{end}}
160+
}
161+
{{end}}
162+
132163
{{range .Structs}}
133164
{{if .Comment}}{{comment .Comment}}{{end}}
134165
type {{.Name}} struct { {{- range .Fields}}

internal/endtoend/testdata/comment_on/postgresql/pgx/v4/go/models.go

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

internal/endtoend/testdata/comment_on/postgresql/pgx/v5/go/models.go

Lines changed: 6 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_alter_type_add_value/postgresql/pgx/v4/go/models.go

Lines changed: 21 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_alter_type_add_value/postgresql/pgx/v5/go/models.go

Lines changed: 6 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_alter_type_rename/postgresql/pgx/v4/go/models.go

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

0 commit comments

Comments
 (0)