Skip to content

Commit 3820358

Browse files
authored
fix: Add import statements even if only pointer types exist (#2046)
1 parent 6273602 commit 3820358

File tree

12 files changed

+246
-11
lines changed

12 files changed

+246
-11
lines changed

internal/cmd/shim.go

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -86,7 +86,7 @@ func pluginGoCode(s config.SQLGo) *plugin.GoCode {
8686
EmitResultStructPointers: s.EmitResultStructPointers,
8787
EmitParamsStructPointers: s.EmitParamsStructPointers,
8888
EmitMethodsWithDbArgument: s.EmitMethodsWithDBArgument,
89-
EmitPointersForNullTypes: s.EmitPointersForNullTypes,
89+
EmitPointersForNullTypes: s.EmitPointersForNullTypes,
9090
EmitEnumValidMethod: s.EmitEnumValidMethod,
9191
EmitAllEnumValues: s.EmitAllEnumValues,
9292
JsonTagsCaseStyle: s.JSONTagsCaseStyle,

internal/codegen/golang/imports.go

Lines changed: 16 additions & 10 deletions
Original file line numberDiff line numberDiff line change
@@ -67,7 +67,7 @@ type importer struct {
6767
func (i *importer) usesType(typ string) bool {
6868
for _, strct := range i.Structs {
6969
for _, f := range strct.Fields {
70-
fType := strings.TrimPrefix(f.Type, "[]")
70+
fType := trimSliceAndPointerPrefix(f.Type)
7171
if strings.HasPrefix(fType, typ) {
7272
return true
7373
}
@@ -241,7 +241,7 @@ func (i *importer) interfaceImports() fileImports {
241241
}
242242
}
243243
if !q.Arg.isEmpty() {
244-
argType := strings.TrimPrefix(q.Arg.Type(), "[]")
244+
argType := trimSliceAndPointerPrefix(q.Arg.Type())
245245
if strings.HasPrefix(argType, name) {
246246
return true
247247
}
@@ -302,27 +302,27 @@ func (i *importer) queryImports(filename string) fileImports {
302302
if q.hasRetType() {
303303
if q.Ret.EmitStruct() {
304304
for _, f := range q.Ret.Struct.Fields {
305-
fType := strings.TrimPrefix(f.Type, "[]")
305+
fType := trimSliceAndPointerPrefix(f.Type)
306306
if strings.HasPrefix(fType, name) {
307307
return true
308308
}
309309
}
310310
}
311-
retType := strings.TrimPrefix(q.Ret.Type(), "[]")
311+
retType := trimSliceAndPointerPrefix(q.Ret.Type())
312312
if strings.HasPrefix(retType, name) {
313313
return true
314314
}
315315
}
316316
if !q.Arg.isEmpty() {
317317
if q.Arg.EmitStruct() {
318318
for _, f := range q.Arg.Struct.Fields {
319-
fType := strings.TrimPrefix(f.Type, "[]")
319+
fType := trimSliceAndPointerPrefix(f.Type)
320320
if strings.HasPrefix(fType, name) {
321321
return true
322322
}
323323
}
324324
}
325-
argType := strings.TrimPrefix(q.Arg.Type(), "[]")
325+
argType := trimSliceAndPointerPrefix(q.Arg.Type())
326326
if strings.HasPrefix(argType, name) {
327327
return true
328328
}
@@ -415,27 +415,27 @@ func (i *importer) batchImports() fileImports {
415415
if q.hasRetType() {
416416
if q.Ret.EmitStruct() {
417417
for _, f := range q.Ret.Struct.Fields {
418-
fType := strings.TrimPrefix(f.Type, "[]")
418+
fType := trimSliceAndPointerPrefix(f.Type)
419419
if strings.HasPrefix(fType, name) {
420420
return true
421421
}
422422
}
423423
}
424-
retType := strings.TrimPrefix(q.Ret.Type(), "[]")
424+
retType := trimSliceAndPointerPrefix(q.Ret.Type())
425425
if strings.HasPrefix(retType, name) {
426426
return true
427427
}
428428
}
429429
if !q.Arg.isEmpty() {
430430
if q.Arg.EmitStruct() {
431431
for _, f := range q.Arg.Struct.Fields {
432-
fType := strings.TrimPrefix(f.Type, "[]")
432+
fType := trimSliceAndPointerPrefix(f.Type)
433433
if strings.HasPrefix(fType, name) {
434434
return true
435435
}
436436
}
437437
}
438-
argType := strings.TrimPrefix(q.Arg.Type(), "[]")
438+
argType := trimSliceAndPointerPrefix(q.Arg.Type())
439439
if strings.HasPrefix(argType, name) {
440440
return true
441441
}
@@ -456,3 +456,9 @@ func (i *importer) batchImports() fileImports {
456456

457457
return sortedImports(std, pkg)
458458
}
459+
460+
func trimSliceAndPointerPrefix(v string) string {
461+
v = strings.TrimPrefix(v, "[]")
462+
v = strings.TrimPrefix(v, "*")
463+
return v
464+
}

internal/endtoend/testdata/pointer_type_import/postgresql/pgx/v4/go/db.go

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

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

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

internal/endtoend/testdata/pointer_type_import/postgresql/pgx/v4/go/query.sql.go

Lines changed: 48 additions & 0 deletions
Some generated files are not rendered by default. Learn more about customizing how changed files appear on GitHub.
Lines changed: 7 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,7 @@
1+
CREATE TABLE foo (bar date, baz uuid);
2+
3+
-- name: List :many
4+
SELECT * FROM foo;
5+
6+
-- name: Find :one
7+
SELECT bar FROM foo WHERE baz = $1;
Lines changed: 14 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,14 @@
1+
{
2+
"version": "1",
3+
"packages": [
4+
{
5+
"path": "go",
6+
"engine": "postgresql",
7+
"sql_package": "pgx/v4",
8+
"name": "datatype",
9+
"schema": "query.sql",
10+
"queries": "query.sql",
11+
"emit_pointers_for_null_types": true
12+
}
13+
]
14+
}

internal/endtoend/testdata/pointer_type_import/postgresql/pgx/v5/go/db.go

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

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

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

internal/endtoend/testdata/pointer_type_import/postgresql/pgx/v5/go/query.sql.go

Lines changed: 46 additions & 0 deletions
Some generated files are not rendered by default. Learn more about customizing how changed files appear on GitHub.
Lines changed: 7 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,7 @@
1+
CREATE TABLE foo (bar inet, baz cidr);
2+
3+
-- name: List :many
4+
SELECT * FROM foo;
5+
6+
-- name: Find :one
7+
SELECT bar FROM foo WHERE baz = $1;
Lines changed: 13 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,13 @@
1+
{
2+
"version": "1",
3+
"packages": [
4+
{
5+
"path": "go",
6+
"engine": "postgresql",
7+
"sql_package": "pgx/v5",
8+
"name": "datatype",
9+
"schema": "query.sql",
10+
"queries": "query.sql"
11+
}
12+
]
13+
}

0 commit comments

Comments
 (0)