Skip to content

Commit 71d9c4b

Browse files
authored
codegen/golang: Add pgx support for range types (#1146)
* codegen/golang: Add pgx support for range types Support all six built-in range types: * int4range — Range of integer * int8range — Range of bigint * numrange — Range of numeric * tsrange — Range of timestamp without time zone * tstzrange — Range of timestamp with time zone * daterange — Range of date * Checkout for imports
1 parent 2143e46 commit 71d9c4b

File tree

6 files changed

+122
-6
lines changed

6 files changed

+122
-6
lines changed

internal/codegen/golang/imports.go

Lines changed: 12 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -133,12 +133,18 @@ var stdlibTypes = map[string]string{
133133
}
134134

135135
var pgtypeTypes = map[string]struct{}{
136-
"pgtype.CIDR": {},
137-
"pgtype.Inet": {},
138-
"pgtype.JSON": {},
139-
"pgtype.JSONB": {},
140-
"pgtype.Macaddr": {},
141-
"pgtype.Numeric": {},
136+
"pgtype.CIDR": {},
137+
"pgtype.Daterange": {},
138+
"pgtype.Inet": {},
139+
"pgtype.Int4range": {},
140+
"pgtype.Int8range": {},
141+
"pgtype.JSON": {},
142+
"pgtype.JSONB": {},
143+
"pgtype.Macaddr": {},
144+
"pgtype.Numeric": {},
145+
"pgtype.Numrange": {},
146+
"pgtype.Tsrange": {},
147+
"pgtype.Tstzrange": {},
142148
}
143149

144150
var pqtypeTypes = map[string]struct{}{

internal/codegen/golang/postgresql_type.go

Lines changed: 36 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -184,6 +184,42 @@ func postgresType(r *compiler.Result, col *compiler.Column, settings config.Comb
184184
}
185185
return "sql.NullInt64"
186186

187+
case "daterange":
188+
if driver == SQLDriverPGXV4 {
189+
return "pgtype.Daterange"
190+
}
191+
return "interface{}"
192+
193+
case "tsrange":
194+
if driver == SQLDriverPGXV4 {
195+
return "pgtype.Tsrange"
196+
}
197+
return "interface{}"
198+
199+
case "tstzrange":
200+
if driver == SQLDriverPGXV4 {
201+
return "pgtype.Tstzrange"
202+
}
203+
return "interface{}"
204+
205+
case "numrange":
206+
if driver == SQLDriverPGXV4 {
207+
return "pgtype.Numrange"
208+
}
209+
return "interface{}"
210+
211+
case "int4range":
212+
if driver == SQLDriverPGXV4 {
213+
return "pgtype.Int4range"
214+
}
215+
return "interface{}"
216+
217+
case "int8range":
218+
if driver == SQLDriverPGXV4 {
219+
return "pgtype.Int8range"
220+
}
221+
return "interface{}"
222+
187223
case "void":
188224
// A void value can only be scanned into an empty interface.
189225
return "interface{}"

internal/endtoend/testdata/datatype/pgx/go/models.go

Lines changed: 18 additions & 0 deletions
Some generated files are not rendered by default. Learn more about customizing how changed files appear on GitHub.
Lines changed: 19 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,19 @@
1+
-- Range Types
2+
-- https://www.postgresql.org/docs/current/rangetypes.html
3+
CREATE TABLE dt_range (
4+
a int4range,
5+
b int8range,
6+
c numrange,
7+
d tsrange,
8+
e tstzrange,
9+
f daterange
10+
);
11+
12+
CREATE TABLE dt_range_not_null (
13+
a int4range NOT NULL,
14+
b int8range NOT NULL,
15+
c numrange NOT NULL,
16+
d tsrange NOT NULL,
17+
e tstzrange NOT NULL,
18+
f daterange NOT NULL
19+
);

internal/endtoend/testdata/datatype/stdlib/go/models.go

Lines changed: 18 additions & 0 deletions
Some generated files are not rendered by default. Learn more about customizing how changed files appear on GitHub.
Lines changed: 19 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,19 @@
1+
-- Range Types
2+
-- https://www.postgresql.org/docs/current/rangetypes.html
3+
CREATE TABLE dt_range (
4+
a int4range,
5+
b int8range,
6+
c numrange,
7+
d tsrange,
8+
e tstzrange,
9+
f daterange
10+
);
11+
12+
CREATE TABLE dt_range_not_null (
13+
a int4range NOT NULL,
14+
b int8range NOT NULL,
15+
c numrange NOT NULL,
16+
d tsrange NOT NULL,
17+
e tstzrange NOT NULL,
18+
f daterange NOT NULL
19+
);

0 commit comments

Comments
 (0)