Skip to content

Commit 6c40609

Browse files
committed
Generate Null Enum type
- We need to import driver to comply with the Valuer interface. - The Scan method uses the Scan from the Non Null Enum type
1 parent 52b6bb4 commit 6c40609

File tree

2 files changed

+25
-0
lines changed

2 files changed

+25
-0
lines changed

internal/codegen/golang/imports.go

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -264,6 +264,7 @@ func (i *importer) modelImports() fileImports {
264264

265265
if len(i.Enums) > 0 {
266266
std["fmt"] = struct{}{}
267+
std["database/sql/driver"] = struct{}{}
267268
}
268269

269270
return sortedImports(std, pkg)

internal/codegen/golang/templates/template.tmpl

Lines changed: 24 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -86,6 +86,30 @@ func (e *{{.Name}}) Scan(src interface{}) error {
8686
}
8787
return nil
8888
}
89+
90+
type Null{{.Name}} struct {
91+
{{.Name}} {{.Name}}
92+
Valid bool // Valid is true if String is not NULL
93+
}
94+
95+
// Scan implements the Scanner interface.
96+
func (ns *Null{{.Name}}) Scan(value interface{}) error {
97+
if value == nil {
98+
ns.{{.Name}}, ns.Valid = "", false
99+
return nil
100+
}
101+
ns.Valid = true
102+
return ns.{{.Name}}.Scan(value)
103+
}
104+
105+
// Value implements the driver Valuer interface.
106+
func (ns Null{{.Name}}) Value() (driver.Value, error) {
107+
if !ns.Valid {
108+
return nil, nil
109+
}
110+
return ns.{{.Name}}, nil
111+
}
112+
89113
{{end}}
90114

91115
{{range .Structs}}

0 commit comments

Comments
 (0)