Skip to content

Commit edb6745

Browse files
committed
feat: add "use_interface_return_types" option
Add an option to direct sqlc generation to use the querier interface for the return type of the WithTx method on the Queries struct. Include WithTx in the Querier interface (when "emit_methods_with_db_argument" is false)
1 parent 46a31e6 commit edb6745

File tree

64 files changed

+466
-0
lines changed

Some content is hidden

Large Commits have some content hidden by default. Use the searchbox below for content that may be hidden.

64 files changed

+466
-0
lines changed

docs/reference/config.md

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -141,6 +141,8 @@ The `gen` mapping supports the following keys:
141141
- If true, include support for prepared queries. Defaults to `false`.
142142
- `emit_interface`:
143143
- If true, output a `Querier` interface in the generated package. Defaults to `false`.
144+
- `use_interface_return_types`:
145+
- If true, output will use the `Querier` interface as the return type the methods in the generated package. Defaults to `false`.
144146
- `emit_exact_table_names`:
145147
- If true, struct names will mirror table names. Otherwise, sqlc attempts to singularize plural table names. Defaults to `false`.
146148
- `emit_empty_slices`:

examples/batch/postgresql/querier.go

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

examples/ondeck/mysql/querier.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.

examples/ondeck/postgresql/querier.go

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

examples/ondeck/sqlite/querier.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/codegen/golang/gen.go

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -39,6 +39,7 @@ type tmplCtx struct {
3939
EmitAllEnumValues bool
4040
UsesCopyFrom bool
4141
UsesBatch bool
42+
UseInterfaceReturnTypes bool
4243
OmitSqlcVersion bool
4344
BuildTags string
4445
}
@@ -169,6 +170,7 @@ func generate(req *plugin.GenerateRequest, options *opts.Options, enums []Enum,
169170

170171
tctx := tmplCtx{
171172
EmitInterface: options.EmitInterface,
173+
UseInterfaceReturnTypes: options.UseInterfaceReturnTypes,
172174
EmitJSONTags: options.EmitJsonTags,
173175
JsonTagsIDUppercase: options.JsonTagsIdUppercase,
174176
EmitDBTags: options.EmitDbTags,

internal/codegen/golang/imports.go

Lines changed: 10 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -268,6 +268,16 @@ func (i *importer) interfaceImports() fileImports {
268268

269269
std["context"] = struct{}{}
270270

271+
sqlpkg := parseDriver(i.Options.SqlPackage)
272+
switch sqlpkg {
273+
case SQLDriverPGXV4:
274+
pkg[ImportSpec{Path: "github.com/jackc/pgx/v4"}] = struct{}{}
275+
case SQLDriverPGXV5:
276+
pkg[ImportSpec{Path: "github.com/jackc/pgx/v5"}] = struct{}{}
277+
default:
278+
std["database/sql"] = struct{}{}
279+
}
280+
271281
return sortedImports(std, pkg)
272282
}
273283

internal/codegen/golang/opts/options.go

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -11,6 +11,7 @@ import (
1111

1212
type Options struct {
1313
EmitInterface bool `json:"emit_interface" yaml:"emit_interface"`
14+
UseInterfaceReturnTypes bool `json:"use_interface_return_types" yaml:"use_interface_return_types"`
1415
EmitJsonTags bool `json:"emit_json_tags" yaml:"emit_json_tags"`
1516
JsonTagsIdUppercase bool `json:"json_tags_id_uppercase" yaml:"json_tags_id_uppercase"`
1617
EmitDbTags bool `json:"emit_db_tags" yaml:"emit_db_tags"`

internal/codegen/golang/templates/pgx/dbCode.tmpl

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -28,7 +28,11 @@ type Queries struct {
2828
}
2929

3030
{{if not .EmitMethodsWithDBArgument}}
31+
{{- if and .EmitInterface .UseInterfaceReturnTypes}}
32+
func (q *Queries) WithTx(tx pgx.Tx) Querier {
33+
{{- else -}}
3134
func (q *Queries) WithTx(tx pgx.Tx) *Queries {
35+
{{- end}}
3236
return &Queries{
3337
db: tx,
3438
}

internal/codegen/golang/templates/pgx/interfaceCode.tmpl

Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,10 @@
11
{{define "interfaceCodePgx"}}
22
type Querier interface {
3+
{{- if .UseInterfaceReturnTypes}}
4+
WithTx(tx pgx.Tx) Querier
5+
{{- else -}}
6+
WithTx(tx pgx.Tx) *Queries
7+
{{- end}}
38
{{- $dbtxParam := .EmitMethodsWithDBArgument -}}
49
{{- range .GoQueries}}
510
{{- if and (eq .Cmd ":one") ($dbtxParam) }}

internal/codegen/golang/templates/stdlib/dbCode.tmpl

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -90,7 +90,11 @@ type Queries struct {
9090
}
9191

9292
{{if not .EmitMethodsWithDBArgument}}
93+
{{- if and .EmitInterface .UseInterfaceReturnTypes}}
94+
func (q *Queries) WithTx(tx *sql.Tx) Querier {
95+
{{- else -}}
9396
func (q *Queries) WithTx(tx *sql.Tx) *Queries {
97+
{{- end}}
9498
return &Queries{
9599
db: tx,
96100
{{- if .EmitPreparedQueries}}

internal/codegen/golang/templates/stdlib/interfaceCode.tmpl

Lines changed: 7 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,12 @@
11
{{define "interfaceCodeStd"}}
22
type Querier interface {
3+
{{if not .EmitMethodsWithDBArgument}}
4+
{{- if .UseInterfaceReturnTypes}}
5+
WithTx(tx *sql.Tx) Querier
6+
{{- else -}}
7+
WithTx(tx *sql.Tx) *Queries
8+
{{- end}}
9+
{{- end}}
310
{{- $dbtxParam := .EmitMethodsWithDBArgument -}}
411
{{- range .GoQueries}}
512
{{- if and (eq .Cmd ":one") ($dbtxParam) }}

internal/config/v_one.go

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -28,6 +28,7 @@ type v1PackageSettings struct {
2828
Schema Paths `json:"schema" yaml:"schema"`
2929
Queries Paths `json:"queries" yaml:"queries"`
3030
EmitInterface bool `json:"emit_interface" yaml:"emit_interface"`
31+
UseInterfaceReturnTypes bool `json:"use_interface_return_types" yaml:"use_interface_return_types"`
3132
EmitJSONTags bool `json:"emit_json_tags" yaml:"emit_json_tags"`
3233
JsonTagsIDUppercase bool `json:"json_tags_id_uppercase" yaml:"json_tags_id_uppercase"`
3334
EmitDBTags bool `json:"emit_db_tags" yaml:"emit_db_tags"`
@@ -138,6 +139,7 @@ func (c *V1GenerateSettings) Translate() Config {
138139
Gen: SQLGen{
139140
Go: &golang.Options{
140141
EmitInterface: pkg.EmitInterface,
142+
UseInterfaceReturnTypes: pkg.UseInterfaceReturnTypes,
141143
EmitJsonTags: pkg.EmitJSONTags,
142144
JsonTagsIdUppercase: pkg.JsonTagsIDUppercase,
143145
EmitDbTags: pkg.EmitDBTags,

internal/config/v_one.json

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -92,6 +92,9 @@
9292
"emit_interface": {
9393
"type": "boolean"
9494
},
95+
"use_interface_return_types": {
96+
"type": "boolean"
97+
},
9598
"emit_json_tags": {
9699
"type": "boolean"
97100
},

internal/config/v_two.json

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -101,6 +101,9 @@
101101
"emit_interface": {
102102
"type": "boolean"
103103
},
104+
"use_interface_return_types": {
105+
"type": "boolean"
106+
},
104107
"emit_json_tags": {
105108
"type": "boolean"
106109
},

internal/endtoend/testdata/build_tags/postgresql/stdlib/go/querier.go

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

internal/endtoend/testdata/copyfrom/postgresql/pgx/v4/go/querier.go

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

internal/endtoend/testdata/copyfrom/postgresql/pgx/v5/go/querier.go

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

internal/endtoend/testdata/copyfrom_singlecolumn/postgresql/pgx/v4/go/querier.go

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

internal/endtoend/testdata/copyfrom_singlecolumn/postgresql/pgx/v5/go/querier.go

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

internal/endtoend/testdata/emit_result_and_params_struct_pointers/mysql/go/querier.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/enum_ordering/postgresql/stdlib/go/querier.go

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

internal/endtoend/testdata/exec_imports/pgx/v4/go/querier.go

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

internal/endtoend/testdata/exec_imports/pgx/v5/go/querier.go

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

internal/endtoend/testdata/exec_imports/stdlib/go/querier.go

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

internal/endtoend/testdata/exec_lastid/go_postgresql_stdlib/go/querier.go

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

internal/endtoend/testdata/exec_result/go_postgresql_pgx/v4/go/querier.go

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

internal/endtoend/testdata/exec_result/go_postgresql_pgx/v5/go/querier.go

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

internal/endtoend/testdata/exec_result/go_postgresql_stdlib/go/querier.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/exec_rows/go_postgresql_pgx/v4/go/querier.go

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

internal/endtoend/testdata/exec_rows/go_postgresql_pgx/v5/go/querier.go

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

internal/endtoend/testdata/exec_rows/go_postgresql_stdlib/go/querier.go

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

internal/endtoend/testdata/output_file_names/pgx/v4/go/querier_gen.go

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

0 commit comments

Comments
 (0)