Skip to content

Commit d8f1f73

Browse files
authored
fix: pointers overrides skip imports in generated query files (#2240)
1 parent 78486df commit d8f1f73

File tree

9 files changed

+114
-26
lines changed

9 files changed

+114
-26
lines changed

internal/codegen/golang/imports.go

Lines changed: 17 additions & 22 deletions
Original file line numberDiff line numberDiff line change
@@ -67,9 +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 := trimSliceAndPointerPrefix(f.Type)
71-
tType := trimSliceAndPointerPrefix(typ)
72-
if strings.HasPrefix(fType, tType) {
70+
if hasPrefixIgnoringSliceAndPointerPrefix(f.Type, typ) {
7371
return true
7472
}
7573
}
@@ -240,13 +238,12 @@ func (i *importer) interfaceImports() fileImports {
240238
if usesBatch([]Query{q}) {
241239
continue
242240
}
243-
if strings.HasPrefix(q.Ret.Type(), name) {
241+
if hasPrefixIgnoringSliceAndPointerPrefix(q.Ret.Type(), name) {
244242
return true
245243
}
246244
}
247245
if !q.Arg.isEmpty() {
248-
argType := trimSliceAndPointerPrefix(q.Arg.Type())
249-
if strings.HasPrefix(argType, name) {
246+
if hasPrefixIgnoringSliceAndPointerPrefix(q.Arg.Type(), name) {
250247
return true
251248
}
252249
}
@@ -306,28 +303,24 @@ func (i *importer) queryImports(filename string) fileImports {
306303
if q.hasRetType() {
307304
if q.Ret.EmitStruct() {
308305
for _, f := range q.Ret.Struct.Fields {
309-
fType := trimSliceAndPointerPrefix(f.Type)
310-
if strings.HasPrefix(fType, name) {
306+
if hasPrefixIgnoringSliceAndPointerPrefix(f.Type, name) {
311307
return true
312308
}
313309
}
314310
}
315-
retType := trimSliceAndPointerPrefix(q.Ret.Type())
316-
if strings.HasPrefix(retType, name) {
311+
if hasPrefixIgnoringSliceAndPointerPrefix(q.Ret.Type(), name) {
317312
return true
318313
}
319314
}
320315
if !q.Arg.isEmpty() {
321316
if q.Arg.EmitStruct() {
322317
for _, f := range q.Arg.Struct.Fields {
323-
fType := trimSliceAndPointerPrefix(f.Type)
324-
if strings.HasPrefix(fType, name) {
318+
if hasPrefixIgnoringSliceAndPointerPrefix(f.Type, name) {
325319
return true
326320
}
327321
}
328322
}
329-
argType := trimSliceAndPointerPrefix(q.Arg.Type())
330-
if strings.HasPrefix(argType, name) {
323+
if hasPrefixIgnoringSliceAndPointerPrefix(q.Arg.Type(), name) {
331324
return true
332325
}
333326
}
@@ -431,28 +424,24 @@ func (i *importer) batchImports() fileImports {
431424
if q.hasRetType() {
432425
if q.Ret.EmitStruct() {
433426
for _, f := range q.Ret.Struct.Fields {
434-
fType := trimSliceAndPointerPrefix(f.Type)
435-
if strings.HasPrefix(fType, name) {
427+
if hasPrefixIgnoringSliceAndPointerPrefix(f.Type, name) {
436428
return true
437429
}
438430
}
439431
}
440-
retType := trimSliceAndPointerPrefix(q.Ret.Type())
441-
if strings.HasPrefix(retType, name) {
432+
if hasPrefixIgnoringSliceAndPointerPrefix(q.Ret.Type(), name) {
442433
return true
443434
}
444435
}
445436
if !q.Arg.isEmpty() {
446437
if q.Arg.EmitStruct() {
447438
for _, f := range q.Arg.Struct.Fields {
448-
fType := trimSliceAndPointerPrefix(f.Type)
449-
if strings.HasPrefix(fType, name) {
439+
if hasPrefixIgnoringSliceAndPointerPrefix(f.Type, name) {
450440
return true
451441
}
452442
}
453443
}
454-
argType := trimSliceAndPointerPrefix(q.Arg.Type())
455-
if strings.HasPrefix(argType, name) {
444+
if hasPrefixIgnoringSliceAndPointerPrefix(q.Arg.Type(), name) {
456445
return true
457446
}
458447
}
@@ -479,6 +468,12 @@ func trimSliceAndPointerPrefix(v string) string {
479468
return v
480469
}
481470

471+
func hasPrefixIgnoringSliceAndPointerPrefix(s, prefix string) bool {
472+
trimmedS := trimSliceAndPointerPrefix(s)
473+
trimmedPrefix := trimSliceAndPointerPrefix(prefix)
474+
return strings.HasPrefix(trimmedS, trimmedPrefix)
475+
}
476+
482477
func replaceConflictedArg(imports [][]ImportSpec, queries []Query) []Query {
483478
m := make(map[string]struct{})
484479
for _, is := range imports {

internal/endtoend/testdata/overrides_pointers/mysql/go/query.sql.go

Lines changed: 26 additions & 0 deletions
Some generated files are not rendered by default. Learn more about customizing how changed files appear on GitHub.
Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1 +1,2 @@
1-
SELECT 1;
1+
-- name: test :exec
2+
SELECT * FROM foo WHERE other = ? and retyped = ?;

internal/endtoend/testdata/overrides_pointers/postgresql/pgx/v4/go/query.sql.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.
Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1 +1,2 @@
1-
SELECT 1;
1+
-- name: test :exec
2+
UPDATE foo SET langs = $1;

internal/endtoend/testdata/overrides_pointers/postgresql/pgx/v5/go/query.sql.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.
Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1 +1,2 @@
1-
SELECT 1;
1+
-- name: test :exec
2+
UPDATE foo SET langs = $1;

internal/endtoend/testdata/overrides_pointers/postgresql/stdlib/go/query.sql.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.
Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1 +1,2 @@
1-
SELECT 1;
1+
-- name: test :exec
2+
UPDATE foo SET langs = $1;

0 commit comments

Comments
 (0)