diff --git a/docs/reference/config.md b/docs/reference/config.md index 85e68cf05b..8a50414efb 100644 --- a/docs/reference/config.md +++ b/docs/reference/config.md @@ -141,6 +141,8 @@ The `gen` mapping supports the following keys: - If true, include support for prepared queries. Defaults to `false`. - `emit_interface`: - If true, output a `Querier` interface in the generated package. Defaults to `false`. +- `use_interface_return_types`: + - If true, output will use the `Querier` interface as the return type the methods in the generated package. Defaults to `false`. - `emit_exact_table_names`: - If true, struct names will mirror table names. Otherwise, sqlc attempts to singularize plural table names. Defaults to `false`. - `emit_empty_slices`: diff --git a/examples/batch/postgresql/querier.go b/examples/batch/postgresql/querier.go index ea7fd30bb0..143511f85c 100644 --- a/examples/batch/postgresql/querier.go +++ b/examples/batch/postgresql/querier.go @@ -7,10 +7,12 @@ package batch import ( "context" + "github.com/jackc/pgx/v5" "github.com/jackc/pgx/v5/pgconn" ) type Querier interface { + WithTx(tx pgx.Tx) *Queries BooksByYear(ctx context.Context, year []int32) *BooksByYearBatchResults CreateAuthor(ctx context.Context, name string) (Author, error) CreateBook(ctx context.Context, arg []CreateBookParams) *CreateBookBatchResults diff --git a/examples/ondeck/mysql/querier.go b/examples/ondeck/mysql/querier.go index 89b988c14e..2335c5cc85 100644 --- a/examples/ondeck/mysql/querier.go +++ b/examples/ondeck/mysql/querier.go @@ -10,6 +10,7 @@ import ( ) type Querier interface { + WithTx(tx *sql.Tx) *Queries CreateCity(ctx context.Context, arg CreateCityParams) error CreateVenue(ctx context.Context, arg CreateVenueParams) (sql.Result, error) DeleteVenue(ctx context.Context, arg DeleteVenueParams) error diff --git a/examples/ondeck/postgresql/querier.go b/examples/ondeck/postgresql/querier.go index e55682355f..1242909b35 100644 --- a/examples/ondeck/postgresql/querier.go +++ b/examples/ondeck/postgresql/querier.go @@ -6,9 +6,11 @@ package ondeck import ( "context" + "database/sql" ) type Querier interface { + WithTx(tx *sql.Tx) *Queries // Create a new city. The slug must be unique. // This is the second line of the comment // This is the third line diff --git a/examples/ondeck/sqlite/querier.go b/examples/ondeck/sqlite/querier.go index 89b988c14e..2335c5cc85 100644 --- a/examples/ondeck/sqlite/querier.go +++ b/examples/ondeck/sqlite/querier.go @@ -10,6 +10,7 @@ import ( ) type Querier interface { + WithTx(tx *sql.Tx) *Queries CreateCity(ctx context.Context, arg CreateCityParams) error CreateVenue(ctx context.Context, arg CreateVenueParams) (sql.Result, error) DeleteVenue(ctx context.Context, arg DeleteVenueParams) error diff --git a/internal/codegen/golang/gen.go b/internal/codegen/golang/gen.go index cbb86857b1..0745e746aa 100644 --- a/internal/codegen/golang/gen.go +++ b/internal/codegen/golang/gen.go @@ -39,6 +39,7 @@ type tmplCtx struct { EmitAllEnumValues bool UsesCopyFrom bool UsesBatch bool + UseInterfaceReturnTypes bool OmitSqlcVersion bool BuildTags string } @@ -169,6 +170,7 @@ func generate(req *plugin.GenerateRequest, options *opts.Options, enums []Enum, tctx := tmplCtx{ EmitInterface: options.EmitInterface, + UseInterfaceReturnTypes: options.UseInterfaceReturnTypes, EmitJSONTags: options.EmitJsonTags, JsonTagsIDUppercase: options.JsonTagsIdUppercase, EmitDBTags: options.EmitDbTags, diff --git a/internal/codegen/golang/imports.go b/internal/codegen/golang/imports.go index caa96ffe26..a0f9d4c4d9 100644 --- a/internal/codegen/golang/imports.go +++ b/internal/codegen/golang/imports.go @@ -263,6 +263,16 @@ func (i *importer) interfaceImports() fileImports { std["context"] = struct{}{} + sqlpkg := parseDriver(i.Options.SqlPackage) + switch sqlpkg { + case SQLDriverPGXV4: + pkg[ImportSpec{Path: "github.com/jackc/pgx/v4"}] = struct{}{} + case SQLDriverPGXV5: + pkg[ImportSpec{Path: "github.com/jackc/pgx/v5"}] = struct{}{} + default: + std["database/sql"] = struct{}{} + } + return sortedImports(std, pkg) } diff --git a/internal/codegen/golang/opts/options.go b/internal/codegen/golang/opts/options.go index 0b66975506..461eac1069 100644 --- a/internal/codegen/golang/opts/options.go +++ b/internal/codegen/golang/opts/options.go @@ -11,6 +11,7 @@ import ( type Options struct { EmitInterface bool `json:"emit_interface" yaml:"emit_interface"` + UseInterfaceReturnTypes bool `json:"use_interface_return_types" yaml:"use_interface_return_types"` EmitJsonTags bool `json:"emit_json_tags" yaml:"emit_json_tags"` JsonTagsIdUppercase bool `json:"json_tags_id_uppercase" yaml:"json_tags_id_uppercase"` EmitDbTags bool `json:"emit_db_tags" yaml:"emit_db_tags"` diff --git a/internal/codegen/golang/templates/pgx/dbCode.tmpl b/internal/codegen/golang/templates/pgx/dbCode.tmpl index 236554d9f2..307c74cfaa 100644 --- a/internal/codegen/golang/templates/pgx/dbCode.tmpl +++ b/internal/codegen/golang/templates/pgx/dbCode.tmpl @@ -28,7 +28,11 @@ type Queries struct { } {{if not .EmitMethodsWithDBArgument}} +{{- if and .EmitInterface .UseInterfaceReturnTypes}} +func (q *Queries) WithTx(tx pgx.Tx) Querier { +{{- else -}} func (q *Queries) WithTx(tx pgx.Tx) *Queries { +{{- end}} return &Queries{ db: tx, } diff --git a/internal/codegen/golang/templates/pgx/interfaceCode.tmpl b/internal/codegen/golang/templates/pgx/interfaceCode.tmpl index cf7cd36cb9..f91bf9e756 100644 --- a/internal/codegen/golang/templates/pgx/interfaceCode.tmpl +++ b/internal/codegen/golang/templates/pgx/interfaceCode.tmpl @@ -1,5 +1,10 @@ {{define "interfaceCodePgx"}} type Querier interface { + {{- if .UseInterfaceReturnTypes}} + WithTx(tx pgx.Tx) Querier + {{- else -}} + WithTx(tx pgx.Tx) *Queries + {{- end}} {{- $dbtxParam := .EmitMethodsWithDBArgument -}} {{- range .GoQueries}} {{- if and (eq .Cmd ":one") ($dbtxParam) }} diff --git a/internal/codegen/golang/templates/stdlib/dbCode.tmpl b/internal/codegen/golang/templates/stdlib/dbCode.tmpl index 7433d522f6..c190956abc 100644 --- a/internal/codegen/golang/templates/stdlib/dbCode.tmpl +++ b/internal/codegen/golang/templates/stdlib/dbCode.tmpl @@ -90,7 +90,11 @@ type Queries struct { } {{if not .EmitMethodsWithDBArgument}} +{{- if and .EmitInterface .UseInterfaceReturnTypes}} +func (q *Queries) WithTx(tx *sql.Tx) Querier { +{{- else -}} func (q *Queries) WithTx(tx *sql.Tx) *Queries { +{{- end}} return &Queries{ db: tx, {{- if .EmitPreparedQueries}} diff --git a/internal/codegen/golang/templates/stdlib/interfaceCode.tmpl b/internal/codegen/golang/templates/stdlib/interfaceCode.tmpl index 3cbefe6df4..906fea82e6 100644 --- a/internal/codegen/golang/templates/stdlib/interfaceCode.tmpl +++ b/internal/codegen/golang/templates/stdlib/interfaceCode.tmpl @@ -1,5 +1,12 @@ {{define "interfaceCodeStd"}} type Querier interface { + {{if not .EmitMethodsWithDBArgument}} + {{- if .UseInterfaceReturnTypes}} + WithTx(tx *sql.Tx) Querier + {{- else -}} + WithTx(tx *sql.Tx) *Queries + {{- end}} + {{- end}} {{- $dbtxParam := .EmitMethodsWithDBArgument -}} {{- range .GoQueries}} {{- if and (eq .Cmd ":one") ($dbtxParam) }} diff --git a/internal/config/v_one.go b/internal/config/v_one.go index 8efa9f42fc..028f8deea4 100644 --- a/internal/config/v_one.go +++ b/internal/config/v_one.go @@ -28,6 +28,7 @@ type v1PackageSettings struct { Schema Paths `json:"schema" yaml:"schema"` Queries Paths `json:"queries" yaml:"queries"` EmitInterface bool `json:"emit_interface" yaml:"emit_interface"` + UseInterfaceReturnTypes bool `json:"use_interface_return_types" yaml:"use_interface_return_types"` EmitJSONTags bool `json:"emit_json_tags" yaml:"emit_json_tags"` JsonTagsIDUppercase bool `json:"json_tags_id_uppercase" yaml:"json_tags_id_uppercase"` EmitDBTags bool `json:"emit_db_tags" yaml:"emit_db_tags"` @@ -138,6 +139,7 @@ func (c *V1GenerateSettings) Translate() Config { Gen: SQLGen{ Go: &golang.Options{ EmitInterface: pkg.EmitInterface, + UseInterfaceReturnTypes: pkg.UseInterfaceReturnTypes, EmitJsonTags: pkg.EmitJSONTags, JsonTagsIdUppercase: pkg.JsonTagsIDUppercase, EmitDbTags: pkg.EmitDBTags, diff --git a/internal/config/v_one.json b/internal/config/v_one.json index a0667a7c9c..de9dbfd36d 100644 --- a/internal/config/v_one.json +++ b/internal/config/v_one.json @@ -92,6 +92,9 @@ "emit_interface": { "type": "boolean" }, + "use_interface_return_types": { + "type": "boolean" + }, "emit_json_tags": { "type": "boolean" }, diff --git a/internal/config/v_two.json b/internal/config/v_two.json index acf914997d..105b3e7907 100644 --- a/internal/config/v_two.json +++ b/internal/config/v_two.json @@ -101,6 +101,9 @@ "emit_interface": { "type": "boolean" }, + "use_interface_return_types": { + "type": "boolean" + }, "emit_json_tags": { "type": "boolean" }, diff --git a/internal/endtoend/testdata/build_tags/postgresql/stdlib/go/querier.go b/internal/endtoend/testdata/build_tags/postgresql/stdlib/go/querier.go index b82113536a..8dda8b4656 100644 --- a/internal/endtoend/testdata/build_tags/postgresql/stdlib/go/querier.go +++ b/internal/endtoend/testdata/build_tags/postgresql/stdlib/go/querier.go @@ -8,9 +8,11 @@ package authors import ( "context" + "database/sql" ) type Querier interface { + WithTx(tx *sql.Tx) *Queries CreateAuthor(ctx context.Context, arg CreateAuthorParams) (Author, error) DeleteAuthor(ctx context.Context, id int64) error GetAuthor(ctx context.Context, id int64) (Author, error) diff --git a/internal/endtoend/testdata/copyfrom/postgresql/pgx/v4/go/querier.go b/internal/endtoend/testdata/copyfrom/postgresql/pgx/v4/go/querier.go index b924cb1717..aef63d72a1 100644 --- a/internal/endtoend/testdata/copyfrom/postgresql/pgx/v4/go/querier.go +++ b/internal/endtoend/testdata/copyfrom/postgresql/pgx/v4/go/querier.go @@ -7,9 +7,12 @@ package querytest import ( "context" "database/sql" + + "github.com/jackc/pgx/v4" ) type Querier interface { + WithTx(tx pgx.Tx) *Queries // InsertSingleValue inserts a single value using copy. InsertSingleValue(ctx context.Context, a []sql.NullString) (int64, error) // InsertValues inserts multiple values using copy. diff --git a/internal/endtoend/testdata/copyfrom/postgresql/pgx/v5/go/querier.go b/internal/endtoend/testdata/copyfrom/postgresql/pgx/v5/go/querier.go index 1ee2fa0e88..61bfb81a1a 100644 --- a/internal/endtoend/testdata/copyfrom/postgresql/pgx/v5/go/querier.go +++ b/internal/endtoend/testdata/copyfrom/postgresql/pgx/v5/go/querier.go @@ -7,10 +7,12 @@ package querytest import ( "context" + "github.com/jackc/pgx/v5" "github.com/jackc/pgx/v5/pgtype" ) type Querier interface { + WithTx(tx pgx.Tx) *Queries // InsertSingleValue inserts a single value using copy. InsertSingleValue(ctx context.Context, a []pgtype.Text) (int64, error) // InsertValues inserts multiple values using copy. diff --git a/internal/endtoend/testdata/copyfrom_singlecolumn/postgresql/pgx/v4/go/querier.go b/internal/endtoend/testdata/copyfrom_singlecolumn/postgresql/pgx/v4/go/querier.go index eadc6f6849..d5c5399694 100644 --- a/internal/endtoend/testdata/copyfrom_singlecolumn/postgresql/pgx/v4/go/querier.go +++ b/internal/endtoend/testdata/copyfrom_singlecolumn/postgresql/pgx/v4/go/querier.go @@ -6,9 +6,12 @@ package querytest import ( "context" + + "github.com/jackc/pgx/v4" ) type Querier interface { + WithTx(tx pgx.Tx) *Queries CreateAuthors(ctx context.Context, authorID []int32) (int64, error) } diff --git a/internal/endtoend/testdata/copyfrom_singlecolumn/postgresql/pgx/v5/go/querier.go b/internal/endtoend/testdata/copyfrom_singlecolumn/postgresql/pgx/v5/go/querier.go index eadc6f6849..940ba9b5c8 100644 --- a/internal/endtoend/testdata/copyfrom_singlecolumn/postgresql/pgx/v5/go/querier.go +++ b/internal/endtoend/testdata/copyfrom_singlecolumn/postgresql/pgx/v5/go/querier.go @@ -6,9 +6,12 @@ package querytest import ( "context" + + "github.com/jackc/pgx/v5" ) type Querier interface { + WithTx(tx pgx.Tx) *Queries CreateAuthors(ctx context.Context, authorID []int32) (int64, error) } diff --git a/internal/endtoend/testdata/emit_result_and_params_struct_pointers/mysql/go/querier.go b/internal/endtoend/testdata/emit_result_and_params_struct_pointers/mysql/go/querier.go index 55eb728a1f..cba82dccac 100644 --- a/internal/endtoend/testdata/emit_result_and_params_struct_pointers/mysql/go/querier.go +++ b/internal/endtoend/testdata/emit_result_and_params_struct_pointers/mysql/go/querier.go @@ -10,6 +10,7 @@ import ( ) type Querier interface { + WithTx(tx *sql.Tx) *Queries GetAll(ctx context.Context) ([]*Foo, error) GetAllAByB(ctx context.Context, b sql.NullInt32) ([]sql.NullInt32, error) GetOne(ctx context.Context, arg *GetOneParams) (*Foo, error) diff --git a/internal/endtoend/testdata/enum_ordering/postgresql/stdlib/go/querier.go b/internal/endtoend/testdata/enum_ordering/postgresql/stdlib/go/querier.go index 7af6fb9ed2..be8968d516 100644 --- a/internal/endtoend/testdata/enum_ordering/postgresql/stdlib/go/querier.go +++ b/internal/endtoend/testdata/enum_ordering/postgresql/stdlib/go/querier.go @@ -6,9 +6,11 @@ package db import ( "context" + "database/sql" ) type Querier interface { + WithTx(tx *sql.Tx) *Queries GetAll(ctx context.Context) ([]int32, error) } diff --git a/internal/endtoend/testdata/exec_imports/pgx/v4/go/querier.go b/internal/endtoend/testdata/exec_imports/pgx/v4/go/querier.go index 265b9b5876..53200bb5a1 100644 --- a/internal/endtoend/testdata/exec_imports/pgx/v4/go/querier.go +++ b/internal/endtoend/testdata/exec_imports/pgx/v4/go/querier.go @@ -6,9 +6,12 @@ package querytest import ( "context" + + "github.com/jackc/pgx/v4" ) type Querier interface { + WithTx(tx pgx.Tx) *Queries Bar(ctx context.Context) error Bars(ctx context.Context) error } diff --git a/internal/endtoend/testdata/exec_imports/pgx/v5/go/querier.go b/internal/endtoend/testdata/exec_imports/pgx/v5/go/querier.go index 265b9b5876..19b6f8c9fb 100644 --- a/internal/endtoend/testdata/exec_imports/pgx/v5/go/querier.go +++ b/internal/endtoend/testdata/exec_imports/pgx/v5/go/querier.go @@ -6,9 +6,12 @@ package querytest import ( "context" + + "github.com/jackc/pgx/v5" ) type Querier interface { + WithTx(tx pgx.Tx) *Queries Bar(ctx context.Context) error Bars(ctx context.Context) error } diff --git a/internal/endtoend/testdata/exec_imports/stdlib/go/querier.go b/internal/endtoend/testdata/exec_imports/stdlib/go/querier.go index 265b9b5876..93c75933d2 100644 --- a/internal/endtoend/testdata/exec_imports/stdlib/go/querier.go +++ b/internal/endtoend/testdata/exec_imports/stdlib/go/querier.go @@ -6,9 +6,11 @@ package querytest import ( "context" + "database/sql" ) type Querier interface { + WithTx(tx *sql.Tx) *Queries Bar(ctx context.Context) error Bars(ctx context.Context) error } diff --git a/internal/endtoend/testdata/exec_lastid/go_postgresql_stdlib/go/querier.go b/internal/endtoend/testdata/exec_lastid/go_postgresql_stdlib/go/querier.go index c85e0fddd0..d01361d522 100644 --- a/internal/endtoend/testdata/exec_lastid/go_postgresql_stdlib/go/querier.go +++ b/internal/endtoend/testdata/exec_lastid/go_postgresql_stdlib/go/querier.go @@ -6,9 +6,11 @@ package querytest import ( "context" + "database/sql" ) type Querier interface { + WithTx(tx *sql.Tx) *Queries InsertBar(ctx context.Context) (int64, error) } diff --git a/internal/endtoend/testdata/exec_result/go_postgresql_pgx/v4/go/querier.go b/internal/endtoend/testdata/exec_result/go_postgresql_pgx/v4/go/querier.go index 73cf9a7e06..cc8eaaf8ff 100644 --- a/internal/endtoend/testdata/exec_result/go_postgresql_pgx/v4/go/querier.go +++ b/internal/endtoend/testdata/exec_result/go_postgresql_pgx/v4/go/querier.go @@ -8,9 +8,11 @@ import ( "context" "github.com/jackc/pgconn" + "github.com/jackc/pgx/v4" ) type Querier interface { + WithTx(tx pgx.Tx) *Queries DeleteBarByID(ctx context.Context, id int32) (pgconn.CommandTag, error) } diff --git a/internal/endtoend/testdata/exec_result/go_postgresql_pgx/v5/go/querier.go b/internal/endtoend/testdata/exec_result/go_postgresql_pgx/v5/go/querier.go index ea3ef9d326..ea8da9cdac 100644 --- a/internal/endtoend/testdata/exec_result/go_postgresql_pgx/v5/go/querier.go +++ b/internal/endtoend/testdata/exec_result/go_postgresql_pgx/v5/go/querier.go @@ -7,10 +7,12 @@ package querytest import ( "context" + "github.com/jackc/pgx/v5" "github.com/jackc/pgx/v5/pgconn" ) type Querier interface { + WithTx(tx pgx.Tx) *Queries DeleteBarByID(ctx context.Context, id int32) (pgconn.CommandTag, error) } diff --git a/internal/endtoend/testdata/exec_result/go_postgresql_stdlib/go/querier.go b/internal/endtoend/testdata/exec_result/go_postgresql_stdlib/go/querier.go index 61eeb791ab..6434460ca8 100644 --- a/internal/endtoend/testdata/exec_result/go_postgresql_stdlib/go/querier.go +++ b/internal/endtoend/testdata/exec_result/go_postgresql_stdlib/go/querier.go @@ -10,6 +10,7 @@ import ( ) type Querier interface { + WithTx(tx *sql.Tx) *Queries DeleteBarByID(ctx context.Context, id int32) (sql.Result, error) } diff --git a/internal/endtoend/testdata/exec_rows/go_postgresql_pgx/v4/go/querier.go b/internal/endtoend/testdata/exec_rows/go_postgresql_pgx/v4/go/querier.go index 9ef785a7e5..6744c785da 100644 --- a/internal/endtoend/testdata/exec_rows/go_postgresql_pgx/v4/go/querier.go +++ b/internal/endtoend/testdata/exec_rows/go_postgresql_pgx/v4/go/querier.go @@ -6,9 +6,12 @@ package querytest import ( "context" + + "github.com/jackc/pgx/v4" ) type Querier interface { + WithTx(tx pgx.Tx) *Queries DeleteBarByID(ctx context.Context, id int32) (int64, error) } diff --git a/internal/endtoend/testdata/exec_rows/go_postgresql_pgx/v5/go/querier.go b/internal/endtoend/testdata/exec_rows/go_postgresql_pgx/v5/go/querier.go index 9ef785a7e5..bb3dd06745 100644 --- a/internal/endtoend/testdata/exec_rows/go_postgresql_pgx/v5/go/querier.go +++ b/internal/endtoend/testdata/exec_rows/go_postgresql_pgx/v5/go/querier.go @@ -6,9 +6,12 @@ package querytest import ( "context" + + "github.com/jackc/pgx/v5" ) type Querier interface { + WithTx(tx pgx.Tx) *Queries DeleteBarByID(ctx context.Context, id int32) (int64, error) } diff --git a/internal/endtoend/testdata/exec_rows/go_postgresql_stdlib/go/querier.go b/internal/endtoend/testdata/exec_rows/go_postgresql_stdlib/go/querier.go index 9ef785a7e5..66669a6354 100644 --- a/internal/endtoend/testdata/exec_rows/go_postgresql_stdlib/go/querier.go +++ b/internal/endtoend/testdata/exec_rows/go_postgresql_stdlib/go/querier.go @@ -6,9 +6,11 @@ package querytest import ( "context" + "database/sql" ) type Querier interface { + WithTx(tx *sql.Tx) *Queries DeleteBarByID(ctx context.Context, id int32) (int64, error) } diff --git a/internal/endtoend/testdata/output_file_names/pgx/v4/go/querier_gen.go b/internal/endtoend/testdata/output_file_names/pgx/v4/go/querier_gen.go index f0fea55f68..fe31397efb 100644 --- a/internal/endtoend/testdata/output_file_names/pgx/v4/go/querier_gen.go +++ b/internal/endtoend/testdata/output_file_names/pgx/v4/go/querier_gen.go @@ -6,9 +6,12 @@ package querytest import ( "context" + + "github.com/jackc/pgx/v4" ) type Querier interface { + WithTx(tx pgx.Tx) *Queries User(ctx context.Context) ([]int64, error) UsersB(ctx context.Context, id []int64) *UsersBBatchResults UsersC(ctx context.Context, id []int64) (int64, error) diff --git a/internal/endtoend/testdata/output_file_names/pgx/v5/go/querier_gen.go b/internal/endtoend/testdata/output_file_names/pgx/v5/go/querier_gen.go index f0fea55f68..6894eb7af2 100644 --- a/internal/endtoend/testdata/output_file_names/pgx/v5/go/querier_gen.go +++ b/internal/endtoend/testdata/output_file_names/pgx/v5/go/querier_gen.go @@ -6,9 +6,12 @@ package querytest import ( "context" + + "github.com/jackc/pgx/v5" ) type Querier interface { + WithTx(tx pgx.Tx) *Queries User(ctx context.Context) ([]int64, error) UsersB(ctx context.Context, id []int64) *UsersBBatchResults UsersC(ctx context.Context, id []int64) (int64, error) diff --git a/internal/endtoend/testdata/output_file_names/stdlib/go/querier_gen.go b/internal/endtoend/testdata/output_file_names/stdlib/go/querier_gen.go index e20a00ba40..17aaa68ef2 100644 --- a/internal/endtoend/testdata/output_file_names/stdlib/go/querier_gen.go +++ b/internal/endtoend/testdata/output_file_names/stdlib/go/querier_gen.go @@ -6,9 +6,11 @@ package querytest import ( "context" + "database/sql" ) type Querier interface { + WithTx(tx *sql.Tx) *Queries User(ctx context.Context) ([]int64, error) } diff --git a/internal/endtoend/testdata/query_parameter_limit_param_only/postgresql/go/querier.go b/internal/endtoend/testdata/query_parameter_limit_param_only/postgresql/go/querier.go index 54ec9efae3..a4ba3e1144 100644 --- a/internal/endtoend/testdata/query_parameter_limit_param_only/postgresql/go/querier.go +++ b/internal/endtoend/testdata/query_parameter_limit_param_only/postgresql/go/querier.go @@ -11,6 +11,7 @@ import ( ) type Querier interface { + WithTx(tx *sql.Tx) *Queries CreateNotice(ctx context.Context, cnt int32, createdAt time.Time) error MarkNoticeDone(ctx context.Context, noticeAt sql.NullTime, iD int32) error } diff --git a/internal/endtoend/testdata/query_parameter_limit_to_zero/postgresql/go/querier.go b/internal/endtoend/testdata/query_parameter_limit_to_zero/postgresql/go/querier.go index 1e90ff3aaf..29a7793b53 100644 --- a/internal/endtoend/testdata/query_parameter_limit_to_zero/postgresql/go/querier.go +++ b/internal/endtoend/testdata/query_parameter_limit_to_zero/postgresql/go/querier.go @@ -6,9 +6,11 @@ package querytest import ( "context" + "database/sql" ) type Querier interface { + WithTx(tx *sql.Tx) *Queries CreateAuthor(ctx context.Context, arg CreateAuthorParams) (Author, error) DeleteAuthor(ctx context.Context, arg DeleteAuthorParams) error GetAuthor(ctx context.Context, arg GetAuthorParams) (Author, error) diff --git a/internal/endtoend/testdata/unnest/postgresql/pgx/v4/go/querier.go b/internal/endtoend/testdata/unnest/postgresql/pgx/v4/go/querier.go index 80add2241a..4b31e03529 100644 --- a/internal/endtoend/testdata/unnest/postgresql/pgx/v4/go/querier.go +++ b/internal/endtoend/testdata/unnest/postgresql/pgx/v4/go/querier.go @@ -8,9 +8,11 @@ import ( "context" "github.com/google/uuid" + "github.com/jackc/pgx/v4" ) type Querier interface { + WithTx(tx pgx.Tx) *Queries CreateMemories(ctx context.Context, vampireID []uuid.UUID) ([]Memory, error) GetVampireIDs(ctx context.Context, vampireID []uuid.UUID) ([]uuid.UUID, error) } diff --git a/internal/endtoend/testdata/unnest/postgresql/pgx/v5/go/querier.go b/internal/endtoend/testdata/unnest/postgresql/pgx/v5/go/querier.go index a41cc8a479..42f8e1e5da 100644 --- a/internal/endtoend/testdata/unnest/postgresql/pgx/v5/go/querier.go +++ b/internal/endtoend/testdata/unnest/postgresql/pgx/v5/go/querier.go @@ -7,10 +7,12 @@ package querytest import ( "context" + "github.com/jackc/pgx/v5" "github.com/jackc/pgx/v5/pgtype" ) type Querier interface { + WithTx(tx pgx.Tx) *Queries CreateMemories(ctx context.Context, vampireID []pgtype.UUID) ([]Memory, error) GetVampireIDs(ctx context.Context, vampireID []pgtype.UUID) ([]pgtype.UUID, error) } diff --git a/internal/endtoend/testdata/unnest/postgresql/stdlib/go/querier.go b/internal/endtoend/testdata/unnest/postgresql/stdlib/go/querier.go index 80add2241a..e2707f934d 100644 --- a/internal/endtoend/testdata/unnest/postgresql/stdlib/go/querier.go +++ b/internal/endtoend/testdata/unnest/postgresql/stdlib/go/querier.go @@ -6,11 +6,13 @@ package querytest import ( "context" + "database/sql" "github.com/google/uuid" ) type Querier interface { + WithTx(tx *sql.Tx) *Queries CreateMemories(ctx context.Context, vampireID []uuid.UUID) ([]Memory, error) GetVampireIDs(ctx context.Context, vampireID []uuid.UUID) ([]uuid.UUID, error) } diff --git a/internal/endtoend/testdata/unnest_with_ordinality/postgresql/pgx/v4/go/querier.go b/internal/endtoend/testdata/unnest_with_ordinality/postgresql/pgx/v4/go/querier.go index 24c35b96ae..03e90ea2f3 100644 --- a/internal/endtoend/testdata/unnest_with_ordinality/postgresql/pgx/v4/go/querier.go +++ b/internal/endtoend/testdata/unnest_with_ordinality/postgresql/pgx/v4/go/querier.go @@ -6,9 +6,12 @@ package querytest import ( "context" + + "github.com/jackc/pgx/v4" ) type Querier interface { + WithTx(tx pgx.Tx) *Queries GetValues(ctx context.Context) ([]GetValuesRow, error) } diff --git a/internal/endtoend/testdata/unnest_with_ordinality/postgresql/pgx/v5/go/querier.go b/internal/endtoend/testdata/unnest_with_ordinality/postgresql/pgx/v5/go/querier.go index 24c35b96ae..587b2a5f1a 100644 --- a/internal/endtoend/testdata/unnest_with_ordinality/postgresql/pgx/v5/go/querier.go +++ b/internal/endtoend/testdata/unnest_with_ordinality/postgresql/pgx/v5/go/querier.go @@ -6,9 +6,12 @@ package querytest import ( "context" + + "github.com/jackc/pgx/v5" ) type Querier interface { + WithTx(tx pgx.Tx) *Queries GetValues(ctx context.Context) ([]GetValuesRow, error) } diff --git a/internal/endtoend/testdata/unnest_with_ordinality/postgresql/stdlib/go/querier.go b/internal/endtoend/testdata/unnest_with_ordinality/postgresql/stdlib/go/querier.go index 24c35b96ae..8201f03ac9 100644 --- a/internal/endtoend/testdata/unnest_with_ordinality/postgresql/stdlib/go/querier.go +++ b/internal/endtoend/testdata/unnest_with_ordinality/postgresql/stdlib/go/querier.go @@ -6,9 +6,11 @@ package querytest import ( "context" + "database/sql" ) type Querier interface { + WithTx(tx *sql.Tx) *Queries GetValues(ctx context.Context) ([]GetValuesRow, error) } diff --git a/internal/endtoend/testdata/use_interface_return_types/pgx/v4/go/db.go b/internal/endtoend/testdata/use_interface_return_types/pgx/v4/go/db.go new file mode 100644 index 0000000000..5f9cc6e8de --- /dev/null +++ b/internal/endtoend/testdata/use_interface_return_types/pgx/v4/go/db.go @@ -0,0 +1,32 @@ +// Code generated by sqlc. DO NOT EDIT. +// versions: +// sqlc v1.25.0 + +package querytest + +import ( + "context" + + "github.com/jackc/pgconn" + "github.com/jackc/pgx/v4" +) + +type DBTX interface { + Exec(context.Context, string, ...interface{}) (pgconn.CommandTag, error) + Query(context.Context, string, ...interface{}) (pgx.Rows, error) + QueryRow(context.Context, string, ...interface{}) pgx.Row +} + +func New(db DBTX) *Queries { + return &Queries{db: db} +} + +type Queries struct { + db DBTX +} + +func (q *Queries) WithTx(tx pgx.Tx) Querier { + return &Queries{ + db: tx, + } +} diff --git a/internal/endtoend/testdata/use_interface_return_types/pgx/v4/go/models.go b/internal/endtoend/testdata/use_interface_return_types/pgx/v4/go/models.go new file mode 100644 index 0000000000..02b1d4c940 --- /dev/null +++ b/internal/endtoend/testdata/use_interface_return_types/pgx/v4/go/models.go @@ -0,0 +1,14 @@ +// Code generated by sqlc. DO NOT EDIT. +// versions: +// sqlc v1.25.0 + +package querytest + +import ( + "database/sql" +) + +type Foo struct { + Bar sql.NullInt32 + Bars []int32 +} diff --git a/internal/endtoend/testdata/use_interface_return_types/pgx/v4/go/querier.go b/internal/endtoend/testdata/use_interface_return_types/pgx/v4/go/querier.go new file mode 100644 index 0000000000..51f707bf2a --- /dev/null +++ b/internal/endtoend/testdata/use_interface_return_types/pgx/v4/go/querier.go @@ -0,0 +1,19 @@ +// Code generated by sqlc. DO NOT EDIT. +// versions: +// sqlc v1.25.0 + +package querytest + +import ( + "context" + + "github.com/jackc/pgx/v4" +) + +type Querier interface { + WithTx(tx pgx.Tx) Querier + Bar(ctx context.Context) error + Bars(ctx context.Context) error +} + +var _ Querier = (*Queries)(nil) diff --git a/internal/endtoend/testdata/use_interface_return_types/pgx/v4/go/query.sql.go b/internal/endtoend/testdata/use_interface_return_types/pgx/v4/go/query.sql.go new file mode 100644 index 0000000000..433af49b5c --- /dev/null +++ b/internal/endtoend/testdata/use_interface_return_types/pgx/v4/go/query.sql.go @@ -0,0 +1,30 @@ +// Code generated by sqlc. DO NOT EDIT. +// versions: +// sqlc v1.25.0 +// source: query.sql + +package querytest + +import ( + "context" +) + +const bar = `-- name: Bar :exec +SELECT bar +FROM foo +` + +func (q *Queries) Bar(ctx context.Context) error { + _, err := q.db.Exec(ctx, bar) + return err +} + +const bars = `-- name: Bars :exec +SELECT bars +FROM foo +` + +func (q *Queries) Bars(ctx context.Context) error { + _, err := q.db.Exec(ctx, bars) + return err +} diff --git a/internal/endtoend/testdata/use_interface_return_types/pgx/v4/query.sql b/internal/endtoend/testdata/use_interface_return_types/pgx/v4/query.sql new file mode 100644 index 0000000000..b1be28c911 --- /dev/null +++ b/internal/endtoend/testdata/use_interface_return_types/pgx/v4/query.sql @@ -0,0 +1,7 @@ +-- name: Bar :exec +SELECT bar +FROM foo; + +-- name: Bars :exec +SELECT bars +FROM foo; diff --git a/internal/endtoend/testdata/use_interface_return_types/pgx/v4/schema.sql b/internal/endtoend/testdata/use_interface_return_types/pgx/v4/schema.sql new file mode 100644 index 0000000000..63886c12da --- /dev/null +++ b/internal/endtoend/testdata/use_interface_return_types/pgx/v4/schema.sql @@ -0,0 +1,2 @@ +CREATE TABLE foo (bar int, bars int[] not null); + diff --git a/internal/endtoend/testdata/use_interface_return_types/pgx/v4/sqlc.json b/internal/endtoend/testdata/use_interface_return_types/pgx/v4/sqlc.json new file mode 100644 index 0000000000..0acd44a877 --- /dev/null +++ b/internal/endtoend/testdata/use_interface_return_types/pgx/v4/sqlc.json @@ -0,0 +1,15 @@ +{ + "version": "1", + "packages": [ + { + "path": "go", + "engine": "postgresql", + "sql_package": "pgx/v4", + "name": "querytest", + "schema": "schema.sql", + "queries": "query.sql", + "emit_interface": true, + "use_interface_return_types": true + } + ] +} diff --git a/internal/endtoend/testdata/use_interface_return_types/pgx/v5/go/db.go b/internal/endtoend/testdata/use_interface_return_types/pgx/v5/go/db.go new file mode 100644 index 0000000000..581ba94a6b --- /dev/null +++ b/internal/endtoend/testdata/use_interface_return_types/pgx/v5/go/db.go @@ -0,0 +1,32 @@ +// Code generated by sqlc. DO NOT EDIT. +// versions: +// sqlc v1.25.0 + +package querytest + +import ( + "context" + + "github.com/jackc/pgx/v5" + "github.com/jackc/pgx/v5/pgconn" +) + +type DBTX interface { + Exec(context.Context, string, ...interface{}) (pgconn.CommandTag, error) + Query(context.Context, string, ...interface{}) (pgx.Rows, error) + QueryRow(context.Context, string, ...interface{}) pgx.Row +} + +func New(db DBTX) *Queries { + return &Queries{db: db} +} + +type Queries struct { + db DBTX +} + +func (q *Queries) WithTx(tx pgx.Tx) Querier { + return &Queries{ + db: tx, + } +} diff --git a/internal/endtoend/testdata/use_interface_return_types/pgx/v5/go/models.go b/internal/endtoend/testdata/use_interface_return_types/pgx/v5/go/models.go new file mode 100644 index 0000000000..aa2e1dcc90 --- /dev/null +++ b/internal/endtoend/testdata/use_interface_return_types/pgx/v5/go/models.go @@ -0,0 +1,14 @@ +// Code generated by sqlc. DO NOT EDIT. +// versions: +// sqlc v1.25.0 + +package querytest + +import ( + "github.com/jackc/pgx/v5/pgtype" +) + +type Foo struct { + Bar pgtype.Int4 + Bars []int32 +} diff --git a/internal/endtoend/testdata/use_interface_return_types/pgx/v5/go/querier.go b/internal/endtoend/testdata/use_interface_return_types/pgx/v5/go/querier.go new file mode 100644 index 0000000000..89289b90c7 --- /dev/null +++ b/internal/endtoend/testdata/use_interface_return_types/pgx/v5/go/querier.go @@ -0,0 +1,19 @@ +// Code generated by sqlc. DO NOT EDIT. +// versions: +// sqlc v1.25.0 + +package querytest + +import ( + "context" + + "github.com/jackc/pgx/v5" +) + +type Querier interface { + WithTx(tx pgx.Tx) Querier + Bar(ctx context.Context) error + Bars(ctx context.Context) error +} + +var _ Querier = (*Queries)(nil) diff --git a/internal/endtoend/testdata/use_interface_return_types/pgx/v5/go/query.sql.go b/internal/endtoend/testdata/use_interface_return_types/pgx/v5/go/query.sql.go new file mode 100644 index 0000000000..433af49b5c --- /dev/null +++ b/internal/endtoend/testdata/use_interface_return_types/pgx/v5/go/query.sql.go @@ -0,0 +1,30 @@ +// Code generated by sqlc. DO NOT EDIT. +// versions: +// sqlc v1.25.0 +// source: query.sql + +package querytest + +import ( + "context" +) + +const bar = `-- name: Bar :exec +SELECT bar +FROM foo +` + +func (q *Queries) Bar(ctx context.Context) error { + _, err := q.db.Exec(ctx, bar) + return err +} + +const bars = `-- name: Bars :exec +SELECT bars +FROM foo +` + +func (q *Queries) Bars(ctx context.Context) error { + _, err := q.db.Exec(ctx, bars) + return err +} diff --git a/internal/endtoend/testdata/use_interface_return_types/pgx/v5/query.sql b/internal/endtoend/testdata/use_interface_return_types/pgx/v5/query.sql new file mode 100644 index 0000000000..b1be28c911 --- /dev/null +++ b/internal/endtoend/testdata/use_interface_return_types/pgx/v5/query.sql @@ -0,0 +1,7 @@ +-- name: Bar :exec +SELECT bar +FROM foo; + +-- name: Bars :exec +SELECT bars +FROM foo; diff --git a/internal/endtoend/testdata/use_interface_return_types/pgx/v5/schema.sql b/internal/endtoend/testdata/use_interface_return_types/pgx/v5/schema.sql new file mode 100644 index 0000000000..63886c12da --- /dev/null +++ b/internal/endtoend/testdata/use_interface_return_types/pgx/v5/schema.sql @@ -0,0 +1,2 @@ +CREATE TABLE foo (bar int, bars int[] not null); + diff --git a/internal/endtoend/testdata/use_interface_return_types/pgx/v5/sqlc.json b/internal/endtoend/testdata/use_interface_return_types/pgx/v5/sqlc.json new file mode 100644 index 0000000000..5ab9f1f9b4 --- /dev/null +++ b/internal/endtoend/testdata/use_interface_return_types/pgx/v5/sqlc.json @@ -0,0 +1,15 @@ +{ + "version": "1", + "packages": [ + { + "path": "go", + "engine": "postgresql", + "sql_package": "pgx/v5", + "name": "querytest", + "schema": "schema.sql", + "queries": "query.sql", + "emit_interface": true, + "use_interface_return_types": true + } + ] +} diff --git a/internal/endtoend/testdata/use_interface_return_types/stdlib/go/db.go b/internal/endtoend/testdata/use_interface_return_types/stdlib/go/db.go new file mode 100644 index 0000000000..627e7dc6c4 --- /dev/null +++ b/internal/endtoend/testdata/use_interface_return_types/stdlib/go/db.go @@ -0,0 +1,31 @@ +// Code generated by sqlc. DO NOT EDIT. +// versions: +// sqlc v1.25.0 + +package querytest + +import ( + "context" + "database/sql" +) + +type DBTX interface { + ExecContext(context.Context, string, ...interface{}) (sql.Result, error) + PrepareContext(context.Context, string) (*sql.Stmt, error) + QueryContext(context.Context, string, ...interface{}) (*sql.Rows, error) + QueryRowContext(context.Context, string, ...interface{}) *sql.Row +} + +func New(db DBTX) *Queries { + return &Queries{db: db} +} + +type Queries struct { + db DBTX +} + +func (q *Queries) WithTx(tx *sql.Tx) Querier { + return &Queries{ + db: tx, + } +} diff --git a/internal/endtoend/testdata/use_interface_return_types/stdlib/go/models.go b/internal/endtoend/testdata/use_interface_return_types/stdlib/go/models.go new file mode 100644 index 0000000000..02b1d4c940 --- /dev/null +++ b/internal/endtoend/testdata/use_interface_return_types/stdlib/go/models.go @@ -0,0 +1,14 @@ +// Code generated by sqlc. DO NOT EDIT. +// versions: +// sqlc v1.25.0 + +package querytest + +import ( + "database/sql" +) + +type Foo struct { + Bar sql.NullInt32 + Bars []int32 +} diff --git a/internal/endtoend/testdata/use_interface_return_types/stdlib/go/querier.go b/internal/endtoend/testdata/use_interface_return_types/stdlib/go/querier.go new file mode 100644 index 0000000000..3e8f591a24 --- /dev/null +++ b/internal/endtoend/testdata/use_interface_return_types/stdlib/go/querier.go @@ -0,0 +1,18 @@ +// Code generated by sqlc. DO NOT EDIT. +// versions: +// sqlc v1.25.0 + +package querytest + +import ( + "context" + "database/sql" +) + +type Querier interface { + WithTx(tx *sql.Tx) Querier + Bar(ctx context.Context) error + Bars(ctx context.Context) error +} + +var _ Querier = (*Queries)(nil) diff --git a/internal/endtoend/testdata/use_interface_return_types/stdlib/go/query.sql.go b/internal/endtoend/testdata/use_interface_return_types/stdlib/go/query.sql.go new file mode 100644 index 0000000000..3ee2241435 --- /dev/null +++ b/internal/endtoend/testdata/use_interface_return_types/stdlib/go/query.sql.go @@ -0,0 +1,30 @@ +// Code generated by sqlc. DO NOT EDIT. +// versions: +// sqlc v1.25.0 +// source: query.sql + +package querytest + +import ( + "context" +) + +const bar = `-- name: Bar :exec +SELECT bar +FROM foo +` + +func (q *Queries) Bar(ctx context.Context) error { + _, err := q.db.ExecContext(ctx, bar) + return err +} + +const bars = `-- name: Bars :exec +SELECT bars +FROM foo +` + +func (q *Queries) Bars(ctx context.Context) error { + _, err := q.db.ExecContext(ctx, bars) + return err +} diff --git a/internal/endtoend/testdata/use_interface_return_types/stdlib/query.sql b/internal/endtoend/testdata/use_interface_return_types/stdlib/query.sql new file mode 100644 index 0000000000..b1be28c911 --- /dev/null +++ b/internal/endtoend/testdata/use_interface_return_types/stdlib/query.sql @@ -0,0 +1,7 @@ +-- name: Bar :exec +SELECT bar +FROM foo; + +-- name: Bars :exec +SELECT bars +FROM foo; diff --git a/internal/endtoend/testdata/use_interface_return_types/stdlib/schema.sql b/internal/endtoend/testdata/use_interface_return_types/stdlib/schema.sql new file mode 100644 index 0000000000..63886c12da --- /dev/null +++ b/internal/endtoend/testdata/use_interface_return_types/stdlib/schema.sql @@ -0,0 +1,2 @@ +CREATE TABLE foo (bar int, bars int[] not null); + diff --git a/internal/endtoend/testdata/use_interface_return_types/stdlib/sqlc.json b/internal/endtoend/testdata/use_interface_return_types/stdlib/sqlc.json new file mode 100644 index 0000000000..97296228d0 --- /dev/null +++ b/internal/endtoend/testdata/use_interface_return_types/stdlib/sqlc.json @@ -0,0 +1,13 @@ +{ + "version": "1", + "packages": [ + { + "path": "go", + "name": "querytest", + "schema": "schema.sql", + "queries": "query.sql", + "emit_interface": true, + "use_interface_return_types": true + } + ] +}