Skip to content

Commit 71d4273

Browse files
authored
Merge branch 'sqlc-dev:main' into engine-plugin
2 parents fda1895 + b84b1d6 commit 71d4273

32 files changed

Lines changed: 918 additions & 76 deletions

File tree

docs/requirements.txt

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -12,7 +12,7 @@ imagesize==2.0.0
1212
myst-parser==5.0.0
1313
packaging==26.2
1414
pyparsing==3.3.2
15-
pytz==2026.1.post1
15+
pytz==2026.2
1616
requests==2.33.1
1717
snowballstemmer==3.0.1
1818
sphinx-favicon==1.1.0

docs/tutorials/getting-started-sqlite.md

Lines changed: 9 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -159,23 +159,28 @@ func run() error {
159159
log.Println(authors)
160160
161161
// create an author
162-
insertedAuthor, err := queries.CreateAuthor(ctx, tutorial.CreateAuthorParams{
162+
result, err := queries.CreateAuthor(ctx, tutorial.CreateAuthorParams{
163163
Name: "Brian Kernighan",
164164
Bio: sql.NullString{String: "Co-author of The C Programming Language and The Go Programming Language", Valid: true},
165165
})
166166
if err != nil {
167167
return err
168168
}
169-
log.Println(insertedAuthor)
169+
170+
insertedAuthorID, err := result.LastInsertId()
171+
if err != nil {
172+
return err
173+
}
174+
log.Println(insertedAuthorID)
170175
171176
// get the author we just inserted
172-
fetchedAuthor, err := queries.GetAuthor(ctx, insertedAuthor.ID)
177+
fetchedAuthor, err := queries.GetAuthor(ctx, insertedAuthorID)
173178
if err != nil {
174179
return err
175180
}
176181
177182
// prints true
178-
log.Println(reflect.DeepEqual(insertedAuthor, fetchedAuthor))
183+
log.Println(reflect.DeepEqual(insertedAuthorID, fetchedAuthor.ID))
179184
return nil
180185
}
181186

go.mod

Lines changed: 6 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -9,7 +9,7 @@ require (
99
github.com/cubicdaiya/gonp v1.0.4
1010
github.com/davecgh/go-spew v1.1.1
1111
github.com/fatih/structtag v1.2.0
12-
github.com/go-sql-driver/mysql v1.9.3
12+
github.com/go-sql-driver/mysql v1.10.0
1313
github.com/google/cel-go v0.28.0
1414
github.com/google/go-cmp v0.7.0
1515
github.com/jackc/pgx/v5 v5.9.2
@@ -26,14 +26,14 @@ require (
2626
github.com/wasilibs/go-pgquery v0.0.0-20250409022910-10ac41983c07
2727
github.com/xeipuuv/gojsonschema v1.2.0
2828
golang.org/x/sync v0.20.0
29-
google.golang.org/grpc v1.80.0
29+
google.golang.org/grpc v1.81.0
3030
google.golang.org/protobuf v1.36.11
3131
gopkg.in/yaml.v3 v3.0.1
3232
)
3333

3434
require (
3535
cel.dev/expr v0.25.1 // indirect
36-
filippo.io/edwards25519 v1.1.1 // indirect
36+
filippo.io/edwards25519 v1.2.0 // indirect
3737
github.com/inconshreveable/mousetrap v1.1.0 // indirect
3838
github.com/jackc/pgpassfile v1.0.0 // indirect
3939
github.com/jackc/pgservicefile v0.0.0-20240606120523-5a60cdf6a761 // indirect
@@ -46,9 +46,9 @@ require (
4646
github.com/xeipuuv/gojsonpointer v0.0.0-20180127040702-4e3ac2762d5f // indirect
4747
github.com/xeipuuv/gojsonreference v0.0.0-20180127040603-bd5ef7bd5415 // indirect
4848
golang.org/x/exp v0.0.0-20250620022241-b7579e27df2b // indirect
49-
golang.org/x/net v0.49.0 // indirect
49+
golang.org/x/net v0.51.0 // indirect
5050
golang.org/x/sys v0.43.0 // indirect
5151
golang.org/x/text v0.36.0 // indirect
52-
google.golang.org/genproto/googleapis/api v0.0.0-20260120221211-b8f7ae30c516 // indirect
53-
google.golang.org/genproto/googleapis/rpc v0.0.0-20260120221211-b8f7ae30c516 // indirect
52+
google.golang.org/genproto/googleapis/api v0.0.0-20260226221140-a57be14db171 // indirect
53+
google.golang.org/genproto/googleapis/rpc v0.0.0-20260226221140-a57be14db171 // indirect
5454
)

go.sum

Lines changed: 22 additions & 22 deletions
Original file line numberDiff line numberDiff line change
@@ -1,7 +1,7 @@
11
cel.dev/expr v0.25.1 h1:1KrZg61W6TWSxuNZ37Xy49ps13NUovb66QLprthtwi4=
22
cel.dev/expr v0.25.1/go.mod h1:hrXvqGP6G6gyx8UAHSHJ5RGk//1Oj5nXQ2NI02Nrsg4=
3-
filippo.io/edwards25519 v1.1.1 h1:YpjwWWlNmGIDyXOn8zLzqiD+9TyIlPhGFG96P39uBpw=
4-
filippo.io/edwards25519 v1.1.1/go.mod h1:BxyFTGdWcka3PhytdK4V28tE5sGfRvvvRV7EaN4VDT4=
3+
filippo.io/edwards25519 v1.2.0 h1:crnVqOiS4jqYleHd9vaKZ+HKtHfllngJIiOpNpoJsjo=
4+
filippo.io/edwards25519 v1.2.0/go.mod h1:xzAOLCNug/yB62zG1bQ8uziwrIqIuxhctzJT18Q77mc=
55
github.com/antlr4-go/antlr/v4 v4.13.1 h1:SqQKkuVZ+zWkMMNkjy5FZe5mr5WURWnlpmOuzYWrPrQ=
66
github.com/antlr4-go/antlr/v4 v4.13.1/go.mod h1:GKmUxMtwp6ZgGwZSva4eWPC5mS6vUAmOABFgjdkM7Nw=
77
github.com/cespare/xxhash/v2 v2.3.0 h1:UL815xU9SqsFlibzuggzjXhog7bL6oX9BbNZnL2UFvs=
@@ -19,8 +19,8 @@ github.com/go-logr/logr v1.4.3 h1:CjnDlHq8ikf6E492q6eKboGOC0T8CDaOvkHCIg8idEI=
1919
github.com/go-logr/logr v1.4.3/go.mod h1:9T104GzyrTigFIr8wt5mBrctHMim0Nb2HLGrmQ40KvY=
2020
github.com/go-logr/stdr v1.2.2 h1:hSWxHoqTgW2S2qGc0LTAI563KZ5YKYRhT3MFKZMbjag=
2121
github.com/go-logr/stdr v1.2.2/go.mod h1:mMo/vtBO5dYbehREoey6XUKy/eSumjCCveDpRre4VKE=
22-
github.com/go-sql-driver/mysql v1.9.3 h1:U/N249h2WzJ3Ukj8SowVFjdtZKfu9vlLZxjPXV1aweo=
23-
github.com/go-sql-driver/mysql v1.9.3/go.mod h1:qn46aNg1333BRMNU69Lq93t8du/dwxI64Gl8i5p1WMU=
22+
github.com/go-sql-driver/mysql v1.10.0 h1:Q+1LV8DkHJvSYAdR83XzuhDaTykuDx0l6fkXxoWCWfw=
23+
github.com/go-sql-driver/mysql v1.10.0/go.mod h1:M+cqaI7+xxXGG9swrdeUIoPG3Y3KCkF0pZej+SK+nWk=
2424
github.com/golang/protobuf v1.5.4 h1:i7eJL8qZTpSEXOPTxNKhASYpMn+8e5Q6AdndVa1dWek=
2525
github.com/golang/protobuf v1.5.4/go.mod h1:lnTiLA8Wa4RWRcIUkrtSVa5nRhsEGBg48fD6rSs7xps=
2626
github.com/google/cel-go v0.28.0 h1:KjSWstCpz/MN5t4a8gnGJNIYUsJRpdi/r97xWDphIQc=
@@ -90,22 +90,22 @@ github.com/xeipuuv/gojsonschema v1.2.0 h1:LhYJRs+L4fBtjZUfuSZIKGeVu0QRy8e5Xi7D17
9090
github.com/xeipuuv/gojsonschema v1.2.0/go.mod h1:anYRn/JVcOK2ZgGU+IjEV4nwlhoK5sQluxsYJ78Id3Y=
9191
go.opentelemetry.io/auto/sdk v1.2.1 h1:jXsnJ4Lmnqd11kwkBV2LgLoFMZKizbCi5fNZ/ipaZ64=
9292
go.opentelemetry.io/auto/sdk v1.2.1/go.mod h1:KRTj+aOaElaLi+wW1kO/DZRXwkF4C5xPbEe3ZiIhN7Y=
93-
go.opentelemetry.io/otel v1.39.0 h1:8yPrr/S0ND9QEfTfdP9V+SiwT4E0G7Y5MO7p85nis48=
94-
go.opentelemetry.io/otel v1.39.0/go.mod h1:kLlFTywNWrFyEdH0oj2xK0bFYZtHRYUdv1NklR/tgc8=
95-
go.opentelemetry.io/otel/metric v1.39.0 h1:d1UzonvEZriVfpNKEVmHXbdf909uGTOQjA0HF0Ls5Q0=
96-
go.opentelemetry.io/otel/metric v1.39.0/go.mod h1:jrZSWL33sD7bBxg1xjrqyDjnuzTUB0x1nBERXd7Ftcs=
97-
go.opentelemetry.io/otel/sdk v1.39.0 h1:nMLYcjVsvdui1B/4FRkwjzoRVsMK8uL/cj0OyhKzt18=
98-
go.opentelemetry.io/otel/sdk v1.39.0/go.mod h1:vDojkC4/jsTJsE+kh+LXYQlbL8CgrEcwmt1ENZszdJE=
99-
go.opentelemetry.io/otel/sdk/metric v1.39.0 h1:cXMVVFVgsIf2YL6QkRF4Urbr/aMInf+2WKg+sEJTtB8=
100-
go.opentelemetry.io/otel/sdk/metric v1.39.0/go.mod h1:xq9HEVH7qeX69/JnwEfp6fVq5wosJsY1mt4lLfYdVew=
101-
go.opentelemetry.io/otel/trace v1.39.0 h1:2d2vfpEDmCJ5zVYz7ijaJdOF59xLomrvj7bjt6/qCJI=
102-
go.opentelemetry.io/otel/trace v1.39.0/go.mod h1:88w4/PnZSazkGzz/w84VHpQafiU4EtqqlVdxWy+rNOA=
93+
go.opentelemetry.io/otel v1.43.0 h1:mYIM03dnh5zfN7HautFE4ieIig9amkNANT+xcVxAj9I=
94+
go.opentelemetry.io/otel v1.43.0/go.mod h1:JuG+u74mvjvcm8vj8pI5XiHy1zDeoCS2LB1spIq7Ay0=
95+
go.opentelemetry.io/otel/metric v1.43.0 h1:d7638QeInOnuwOONPp4JAOGfbCEpYb+K6DVWvdxGzgM=
96+
go.opentelemetry.io/otel/metric v1.43.0/go.mod h1:RDnPtIxvqlgO8GRW18W6Z/4P462ldprJtfxHxyKd2PY=
97+
go.opentelemetry.io/otel/sdk v1.43.0 h1:pi5mE86i5rTeLXqoF/hhiBtUNcrAGHLKQdhg4h4V9Dg=
98+
go.opentelemetry.io/otel/sdk v1.43.0/go.mod h1:P+IkVU3iWukmiit/Yf9AWvpyRDlUeBaRg6Y+C58QHzg=
99+
go.opentelemetry.io/otel/sdk/metric v1.43.0 h1:S88dyqXjJkuBNLeMcVPRFXpRw2fuwdvfCGLEo89fDkw=
100+
go.opentelemetry.io/otel/sdk/metric v1.43.0/go.mod h1:C/RJtwSEJ5hzTiUz5pXF1kILHStzb9zFlIEe85bhj6A=
101+
go.opentelemetry.io/otel/trace v1.43.0 h1:BkNrHpup+4k4w+ZZ86CZoHHEkohws8AY+WTX09nk+3A=
102+
go.opentelemetry.io/otel/trace v1.43.0/go.mod h1:/QJhyVBUUswCphDVxq+8mld+AvhXZLhe+8WVFxiFff0=
103103
go.yaml.in/yaml/v3 v3.0.4 h1:tfq32ie2Jv2UxXFdLJdh3jXuOzWiL1fo0bu/FbuKpbc=
104104
go.yaml.in/yaml/v3 v3.0.4/go.mod h1:DhzuOOF2ATzADvBadXxruRBLzYTpT36CKvDb3+aBEFg=
105105
golang.org/x/exp v0.0.0-20250620022241-b7579e27df2b h1:M2rDM6z3Fhozi9O7NWsxAkg/yqS/lQJ6PmkyIV3YP+o=
106106
golang.org/x/exp v0.0.0-20250620022241-b7579e27df2b/go.mod h1:3//PLf8L/X+8b4vuAfHzxeRUl04Adcb341+IGKfnqS8=
107-
golang.org/x/net v0.49.0 h1:eeHFmOGUTtaaPSGNmjBKpbng9MulQsJURQUAfUwY++o=
108-
golang.org/x/net v0.49.0/go.mod h1:/ysNB2EvaqvesRkuLAyjI1ycPZlQHM3q01F02UY/MV8=
107+
golang.org/x/net v0.51.0 h1:94R/GTO7mt3/4wIKpcR5gkGmRLOuE/2hNGeWq/GBIFo=
108+
golang.org/x/net v0.51.0/go.mod h1:aamm+2QF5ogm02fjy5Bb7CQ0WMt1/WVM7FtyaTLlA9Y=
109109
golang.org/x/sync v0.20.0 h1:e0PTpb7pjO8GAtTs2dQ6jYa5BWYlMuX047Dco/pItO4=
110110
golang.org/x/sync v0.20.0/go.mod h1:9xrNwdLfx4jkKbNva9FpL6vEN7evnE43NNNJQ2LF3+0=
111111
golang.org/x/sys v0.43.0 h1:Rlag2XtaFTxp19wS8MXlJwTvoh8ArU6ezoyFsMyCTNI=
@@ -114,12 +114,12 @@ golang.org/x/text v0.36.0 h1:JfKh3XmcRPqZPKevfXVpI1wXPTqbkE5f7JA92a55Yxg=
114114
golang.org/x/text v0.36.0/go.mod h1:NIdBknypM8iqVmPiuco0Dh6P5Jcdk8lJL0CUebqK164=
115115
gonum.org/v1/gonum v0.17.0 h1:VbpOemQlsSMrYmn7T2OUvQ4dqxQXU+ouZFQsZOx50z4=
116116
gonum.org/v1/gonum v0.17.0/go.mod h1:El3tOrEuMpv2UdMrbNlKEh9vd86bmQ6vqIcDwxEOc1E=
117-
google.golang.org/genproto/googleapis/api v0.0.0-20260120221211-b8f7ae30c516 h1:vmC/ws+pLzWjj/gzApyoZuSVrDtF1aod4u/+bbj8hgM=
118-
google.golang.org/genproto/googleapis/api v0.0.0-20260120221211-b8f7ae30c516/go.mod h1:p3MLuOwURrGBRoEyFHBT3GjUwaCQVKeNqqWxlcISGdw=
119-
google.golang.org/genproto/googleapis/rpc v0.0.0-20260120221211-b8f7ae30c516 h1:sNrWoksmOyF5bvJUcnmbeAmQi8baNhqg5IWaI3llQqU=
120-
google.golang.org/genproto/googleapis/rpc v0.0.0-20260120221211-b8f7ae30c516/go.mod h1:j9x/tPzZkyxcgEFkiKEEGxfvyumM01BEtsW8xzOahRQ=
121-
google.golang.org/grpc v1.80.0 h1:Xr6m2WmWZLETvUNvIUmeD5OAagMw3FiKmMlTdViWsHM=
122-
google.golang.org/grpc v1.80.0/go.mod h1:ho/dLnxwi3EDJA4Zghp7k2Ec1+c2jqup0bFkw07bwF4=
117+
google.golang.org/genproto/googleapis/api v0.0.0-20260226221140-a57be14db171 h1:tu/dtnW1o3wfaxCOjSLn5IRX4YDcJrtlpzYkhHhGaC4=
118+
google.golang.org/genproto/googleapis/api v0.0.0-20260226221140-a57be14db171/go.mod h1:M5krXqk4GhBKvB596udGL3UyjL4I1+cTbK0orROM9ng=
119+
google.golang.org/genproto/googleapis/rpc v0.0.0-20260226221140-a57be14db171 h1:ggcbiqK8WWh6l1dnltU4BgWGIGo+EVYxCaAPih/zQXQ=
120+
google.golang.org/genproto/googleapis/rpc v0.0.0-20260226221140-a57be14db171/go.mod h1:4Hqkh8ycfw05ld/3BWL7rJOSfebL2Q+DVDeRgYgxUU8=
121+
google.golang.org/grpc v1.81.0 h1:W3G9N3KQf3BU+YuCtGKJk0CmxQNbAISICD/9AORxLIw=
122+
google.golang.org/grpc v1.81.0/go.mod h1:xGH9GfzOyMTGIOXBJmXt+BX/V0kcdQbdcuwQ/zNw42I=
123123
google.golang.org/protobuf v1.36.11 h1:fV6ZwhNocDyBLK0dj+fg8ektcVegBBuEolpbTQyBNVE=
124124
google.golang.org/protobuf v1.36.11/go.mod h1:HTf+CrKn2C3g5S8VImy6tdcUvCska2kB7j23XfzDpco=
125125
gopkg.in/check.v1 v0.0.0-20161208181325-20d25e280405/go.mod h1:Co6ibVJAznAaIkqp8huTwlJQCZ016jof/cbN4VW5Yz0=

internal/cmd/generate.go

Lines changed: 28 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -228,7 +228,35 @@ func (g *generator) ProcessResult(ctx context.Context, combo config.CombinedSett
228228
// out is specified by the user, not a plugin
229229
absout := filepath.Join(g.dir, out)
230230

231+
// When the Go codegen is configured to emit the models file into a
232+
// separate package directory, route that file to its own absolute path.
233+
// This is the only file allowed to live outside of `out`.
234+
var (
235+
modelsFileName string
236+
modelsAbsout string
237+
modelsAbsfile string
238+
)
239+
if sql.Gen.Go != nil && sql.Gen.Go.OutputModelsPath != "" && sql.Gen.Go.ModelsEmitEnabled() {
240+
modelsFileName = sql.Gen.Go.OutputModelsFileName
241+
if modelsFileName == "" {
242+
modelsFileName = "models.go"
243+
}
244+
modelsAbsout = filepath.Join(g.dir, sql.Gen.Go.OutputModelsPath)
245+
modelsAbsfile = filepath.Join(modelsAbsout, modelsFileName)
246+
}
247+
231248
for n, source := range files {
249+
if modelsFileName != "" && n == modelsFileName {
250+
// Models file routed to a separate package directory.
251+
if strings.Contains(modelsAbsfile, "..") {
252+
return fmt.Errorf("invalid file output path: %s", modelsAbsfile)
253+
}
254+
if !strings.HasPrefix(modelsAbsfile, modelsAbsout) {
255+
return fmt.Errorf("invalid file output path: %s", modelsAbsfile)
256+
}
257+
g.output[modelsAbsfile] = source
258+
continue
259+
}
232260
filename := filepath.Join(g.dir, out, n)
233261
// filepath.Join calls filepath.Clean which should remove all "..", but
234262
// double check to make sure

internal/codegen/golang/gen.go

Lines changed: 31 additions & 17 deletions
Original file line numberDiff line numberDiff line change
@@ -17,13 +17,14 @@ import (
1717
)
1818

1919
type tmplCtx struct {
20-
Q string
21-
Package string
22-
SQLDriver opts.SQLDriver
23-
Enums []Enum
24-
Structs []Struct
25-
GoQueries []Query
26-
SqlcVersion string
20+
Q string
21+
Package string
22+
ModelsPackage string
23+
SQLDriver opts.SQLDriver
24+
Enums []Enum
25+
Structs []Struct
26+
GoQueries []Query
27+
SqlcVersion string
2728

2829
// TODO: Race conditions
2930
SourceName string
@@ -120,13 +121,13 @@ func Generate(ctx context.Context, req *plugin.GenerateRequest) (*plugin.Generat
120121

121122
enums := buildEnums(req, options)
122123
structs := buildStructs(req, options)
123-
queries, err := buildQueries(req, options, structs)
124+
queries, err := buildQueries(req, options, enums, structs)
124125
if err != nil {
125126
return nil, err
126127
}
127128

128129
if options.OmitUnusedStructs {
129-
enums, structs = filterUnusedStructs(enums, structs, queries)
130+
enums, structs = filterUnusedStructs(enums, structs, queries, options.ModelsTypeQualifier())
130131
}
131132

132133
if err := validate(options, enums, structs, queries); err != nil {
@@ -186,6 +187,7 @@ func generate(req *plugin.GenerateRequest, options *opts.Options, enums []Enum,
186187
SQLDriver: parseDriver(options.SqlPackage),
187188
Q: "`",
188189
Package: options.Package,
190+
ModelsPackage: options.ModelsPackage(),
189191
Enums: enums,
190192
Structs: structs,
191193
SqlcVersion: req.SqlcVersion,
@@ -292,8 +294,10 @@ func generate(req *plugin.GenerateRequest, options *opts.Options, enums []Enum,
292294
if err := execute(dbFileName, "dbFile"); err != nil {
293295
return nil, err
294296
}
295-
if err := execute(modelsFileName, "modelsFile"); err != nil {
296-
return nil, err
297+
if options.ModelsEmitEnabled() {
298+
if err := execute(modelsFileName, "modelsFile"); err != nil {
299+
return nil, err
300+
}
297301
}
298302
if options.EmitInterface {
299303
if err := execute(querierFileName, "interfaceFile"); err != nil {
@@ -367,25 +371,35 @@ func checkNoTimesForMySQLCopyFrom(queries []Query) error {
367371
return nil
368372
}
369373

370-
func filterUnusedStructs(enums []Enum, structs []Struct, queries []Query) ([]Enum, []Struct) {
374+
func filterUnusedStructs(enums []Enum, structs []Struct, queries []Query, qualifier string) ([]Enum, []Struct) {
371375
keepTypes := make(map[string]struct{})
372376

377+
keep := func(t string) {
378+
keepTypes[t] = struct{}{}
379+
// Also store the bare type name so that lookups against
380+
// bare struct/enum names match even when types have been
381+
// qualified with the models package prefix (e.g. "model.User").
382+
if bare := stripQualifier(t, qualifier); bare != t {
383+
keepTypes[bare] = struct{}{}
384+
}
385+
}
386+
373387
for _, query := range queries {
374388
if !query.Arg.isEmpty() {
375-
keepTypes[query.Arg.Type()] = struct{}{}
389+
keep(query.Arg.Type())
376390
if query.Arg.IsStruct() {
377391
for _, field := range query.Arg.Struct.Fields {
378-
keepTypes[field.Type] = struct{}{}
392+
keep(field.Type)
379393
}
380394
}
381395
}
382396
if query.hasRetType() {
383-
keepTypes[query.Ret.Type()] = struct{}{}
397+
keep(query.Ret.Type())
384398
if query.Ret.IsStruct() {
385399
for _, field := range query.Ret.Struct.Fields {
386-
keepTypes[strings.TrimPrefix(field.Type, "[]")] = struct{}{}
400+
keep(strings.TrimPrefix(field.Type, "[]"))
387401
for _, embedField := range field.EmbedFields {
388-
keepTypes[embedField.Type] = struct{}{}
402+
keep(embedField.Type)
389403
}
390404
}
391405
}

internal/codegen/golang/imports.go

Lines changed: 11 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -243,6 +243,17 @@ func buildImports(options *opts.Options, queries []Query, uses func(string) bool
243243
}
244244
}
245245

246+
// Models package import. When models live in a separate Go package and
247+
// any type in this file references a qualified model type, import the
248+
// models package under a fixed `models` alias so query files always
249+
// reference types as `models.User` regardless of how the actual
250+
// package is named.
251+
if options.ModelsAreExternal() {
252+
if uses(options.ModelsTypeQualifier()) {
253+
pkg[ImportSpec{Path: options.OutputModelsImport, ID: opts.ModelsImportAlias}] = struct{}{}
254+
}
255+
}
256+
246257
return std, pkg
247258
}
248259

0 commit comments

Comments
 (0)