Skip to content

Commit e55bd5d

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 dc311e7 commit e55bd5d

File tree

62 files changed

+460
-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.

62 files changed

+460
-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
@@ -263,6 +263,16 @@ func (i *importer) interfaceImports() fileImports {
263263

264264
std["context"] = struct{}{}
265265

266+
sqlpkg := parseDriver(i.Options.SqlPackage)
267+
switch sqlpkg {
268+
case SQLDriverPGXV4:
269+
pkg[ImportSpec{Path: "github.com/jackc/pgx/v4"}] = struct{}{}
270+
case SQLDriverPGXV5:
271+
pkg[ImportSpec{Path: "github.com/jackc/pgx/v5"}] = struct{}{}
272+
default:
273+
std["database/sql"] = struct{}{}
274+
}
275+
266276
return sortedImports(std, pkg)
267277
}
268278

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/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.

internal/endtoend/testdata/output_file_names/pgx/v5/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.

internal/endtoend/testdata/output_file_names/stdlib/go/querier_gen.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.

0 commit comments

Comments
 (0)