Skip to content

Commit 6762871

Browse files
authored
fix(codegen/golang): fix sqlc.embed to work with pq.Array (#2544)
* fix(codegen/golang): fix sqlc.embed to work with pq.Array wrap close #2458 * test: add endtoend
1 parent 3c9ef73 commit 6762871

File tree

7 files changed

+21
-7
lines changed

7 files changed

+21
-7
lines changed

internal/codegen/golang/field.go

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -17,7 +17,7 @@ type Field struct {
1717
Comment string
1818
Column *plugin.Column
1919
// EmbedFields contains the embedded fields that require scanning.
20-
EmbedFields []string
20+
EmbedFields []Field
2121
}
2222

2323
func (gf Field) Tag() string {

internal/codegen/golang/imports.go

Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -334,6 +334,11 @@ func (i *importer) queryImports(filename string) fileImports {
334334
if strings.HasPrefix(f.Type, "[]") && f.Type != "[]byte" {
335335
return true
336336
}
337+
for _, embed := range f.EmbedFields {
338+
if strings.HasPrefix(embed.Type, "[]") && embed.Type != "[]byte" {
339+
return true
340+
}
341+
}
337342
}
338343
} else {
339344
if strings.HasPrefix(q.Ret.Type(), "[]") && q.Ret.Type() != "[]byte" {

internal/codegen/golang/query.go

Lines changed: 5 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -179,7 +179,11 @@ func (v QueryValue) Scan() string {
179179
// append any embedded fields
180180
if len(f.EmbedFields) > 0 {
181181
for _, embed := range f.EmbedFields {
182-
out = append(out, "&"+v.Name+"."+f.Name+"."+embed)
182+
if strings.HasPrefix(embed.Type, "[]") && embed.Type != "[]byte" && !v.SQLDriver.IsPGX() {
183+
out = append(out, "pq.Array(&"+v.Name+"."+f.Name+"."+embed.Name+")")
184+
} else {
185+
out = append(out, "&"+v.Name+"."+f.Name+"."+embed.Name)
186+
}
183187
}
184188
continue
185189
}

internal/codegen/golang/result.go

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -117,7 +117,7 @@ type goColumn struct {
117117
type goEmbed struct {
118118
modelType string
119119
modelName string
120-
fields []string
120+
fields []Field
121121
}
122122

123123
// look through all the structs and attempt to find a matching one to embed
@@ -138,9 +138,9 @@ func newGoEmbed(embed *plugin.Identifier, structs []Struct, defaultSchema string
138138
continue
139139
}
140140

141-
fields := make([]string, len(s.Fields))
141+
fields := make([]Field, len(s.Fields))
142142
for i, f := range s.Fields {
143-
fields[i] = f.Name
143+
fields[i] = f
144144
}
145145

146146
return &goEmbed{

internal/endtoend/testdata/sqlc_embed/postgresql/stdlib/go/models.go

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

internal/endtoend/testdata/sqlc_embed/postgresql/stdlib/go/query.sql.go

Lines changed: 4 additions & 1 deletion
Some generated files are not rendered by default. Learn more about customizing how changed files appear on GitHub.

internal/endtoend/testdata/sqlc_embed/postgresql/stdlib/query.sql

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -8,7 +8,8 @@ CREATE TABLE users (
88

99
CREATE TABLE posts (
1010
id integer NOT NULL PRIMARY KEY,
11-
user_id integer NOT NULL
11+
user_id integer NOT NULL,
12+
likes integer[] NOT NULL
1213
);
1314

1415
CREATE TABLE baz.users (

0 commit comments

Comments
 (0)