Skip to content

Commit ca0f3de

Browse files
authored
codgen/golang: Use p[gq]type for network address types (#1142)
* codgen/golang: pgtype for network address types * codgen/golang: Use pqtype for lib/pq
1 parent 060884d commit ca0f3de

File tree

33 files changed

+322
-272
lines changed

33 files changed

+322
-272
lines changed

internal/codegen/golang/driver.go

Lines changed: 18 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,18 @@
1+
package golang
2+
3+
import "github.com/kyleconroy/sqlc/internal/config"
4+
5+
type SQLDriver int
6+
7+
const (
8+
SQLDriverPGXV4 SQLDriver = iota
9+
SQLDriverLibPQ
10+
)
11+
12+
func parseDriver(settings config.CombinedSettings) SQLDriver {
13+
if settings.Go.SQLPackage == "pgx/v4" {
14+
return SQLDriverPGXV4
15+
} else {
16+
return SQLDriverLibPQ
17+
}
18+
}

internal/codegen/golang/imports.go

Lines changed: 24 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -132,6 +132,18 @@ var stdlibTypes = map[string]string{
132132
"net.HardwareAddr": "net",
133133
}
134134

135+
var pgtypeTypes = map[string]struct{}{
136+
"pgtype.CIDR": {},
137+
"pgtype.Inet": {},
138+
"pgtype.Macaddr": {},
139+
}
140+
141+
var pqtypeTypes = map[string]struct{}{
142+
"pqtype.CIDR": {},
143+
"pqtype.Inet": {},
144+
"pqtype.Macaddr": {},
145+
}
146+
135147
func buildImports(settings config.CombinedSettings, queries []Query, uses func(string) bool) (map[string]struct{}, map[ImportSpec]struct{}) {
136148
pkg := make(map[ImportSpec]struct{})
137149
std := make(map[string]struct{})
@@ -158,6 +170,18 @@ func buildImports(settings config.CombinedSettings, queries []Query, uses func(s
158170
}
159171
}
160172

173+
for typeName, _ := range pgtypeTypes {
174+
if uses(typeName) {
175+
pkg[ImportSpec{Path: "github.com/jackc/pgtype"}] = struct{}{}
176+
}
177+
}
178+
179+
for typeName, _ := range pqtypeTypes {
180+
if uses(typeName) {
181+
pkg[ImportSpec{Path: "github.com/tabbed/pqtype"}] = struct{}{}
182+
}
183+
}
184+
161185
overrideTypes := map[string]string{}
162186
for _, o := range settings.Overrides {
163187
if o.GoBasicType || o.GoTypeName == "" {

internal/codegen/golang/postgresql_type.go

Lines changed: 28 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -12,6 +12,7 @@ import (
1212
func postgresType(r *compiler.Result, col *compiler.Column, settings config.CombinedSettings) string {
1313
columnType := col.DataType
1414
notNull := col.NotNull || col.IsArray
15+
driver := parseDriver(settings)
1516

1617
switch columnType {
1718
case "serial", "serial4", "pg_catalog.serial4":
@@ -108,11 +109,35 @@ func postgresType(r *compiler.Result, col *compiler.Column, settings config.Comb
108109
}
109110
return "uuid.NullUUID"
110111

111-
case "inet", "cidr":
112-
return "net.IP"
112+
case "inet":
113+
switch driver {
114+
case SQLDriverPGXV4:
115+
return "pgtype.Inet"
116+
case SQLDriverLibPQ:
117+
return "pqtype.Inet"
118+
default:
119+
return "interface{}"
120+
}
121+
122+
case "cidr":
123+
switch driver {
124+
case SQLDriverPGXV4:
125+
return "pgtype.CIDR"
126+
case SQLDriverLibPQ:
127+
return "pqtype.CIDR"
128+
default:
129+
return "interface{}"
130+
}
113131

114132
case "macaddr", "macaddr8":
115-
return "net.HardwareAddr"
133+
switch driver {
134+
case SQLDriverPGXV4:
135+
return "pgtype.Macaddr"
136+
case SQLDriverLibPQ:
137+
return "pqtype.Macaddr"
138+
default:
139+
return "interface{}"
140+
}
116141

117142
case "ltree", "lquery", "ltxtquery":
118143
// This module implements a data type ltree for representing labels

internal/endtoend/testdata/func_return/posgresql/pgx/go/query.sql.go renamed to internal/endtoend/testdata/func_return/postgresql/pgx/go/query.sql.go

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

0 commit comments

Comments
 (0)