From f283db581d1d9572081e8cef6b8267b503b0347c Mon Sep 17 00:00:00 2001 From: Rodion Stolyarov Date: Sun, 5 Jan 2025 02:15:18 +0700 Subject: [PATCH] Add support for getting db session form context --- docs/reference/config.md | 5 +++ internal/codegen/golang/gen.go | 5 +++ internal/codegen/golang/opts/options.go | 7 ++++ .../go-sql-driver-mysql/copyfromCopy.tmpl | 8 +++- .../golang/templates/pgx/batchCode.tmpl | 8 +++- .../golang/templates/pgx/copyfromCopy.tmpl | 7 +++- .../codegen/golang/templates/pgx/dbCode.tmpl | 9 +++- .../golang/templates/pgx/queryCode.tmpl | 15 ++++--- .../golang/templates/stdlib/dbCode.tmpl | 9 +++- internal/config/v_one.go | 2 + internal/config/v_one.json | 3 ++ internal/config/v_two.json | 3 ++ .../get_db_from_context/mysql/go/db.go | 25 +++++++++++ .../get_db_from_context/mysql/go/models.go | 16 +++++++ .../get_db_from_context/mysql/go/query.sql.go | 42 +++++++++++++++++++ .../get_db_from_context/mysql/query.sql | 2 + .../get_db_from_context/mysql/schema.sql | 6 +++ .../get_db_from_context/mysql/sqlc.json | 13 ++++++ .../postgresql/pgx/v4/go/db.go | 26 ++++++++++++ .../postgresql/pgx/v4/go/models.go | 16 +++++++ .../postgresql/pgx/v4/go/query.sql.go | 39 +++++++++++++++++ .../postgresql/pgx/v4/query.sql | 2 + .../postgresql/pgx/v4/schema.sql | 6 +++ .../postgresql/pgx/v4/sqlc.json | 14 +++++++ .../postgresql/pgx/v5/go/db.go | 26 ++++++++++++ .../postgresql/pgx/v5/go/models.go | 16 +++++++ .../postgresql/pgx/v5/go/query.sql.go | 39 +++++++++++++++++ .../postgresql/pgx/v5/query.sql | 2 + .../postgresql/pgx/v5/schema.sql | 6 +++ .../postgresql/pgx/v5/sqlc.json | 14 +++++++ .../postgresql/stdlib/go/db.go | 25 +++++++++++ .../postgresql/stdlib/go/models.go | 16 +++++++ .../postgresql/stdlib/go/query.sql.go | 42 +++++++++++++++++++ .../postgresql/stdlib/query.sql | 2 + .../postgresql/stdlib/schema.sql | 6 +++ .../postgresql/stdlib/sqlc.json | 13 ++++++ .../get_db_from_context/sqlite/go/db.go | 25 +++++++++++ .../get_db_from_context/sqlite/go/models.go | 16 +++++++ .../sqlite/go/query.sql.go | 42 +++++++++++++++++++ .../get_db_from_context/sqlite/query.sql | 2 + .../get_db_from_context/sqlite/schema.sql | 6 +++ .../get_db_from_context/sqlite/sqlc.json | 13 ++++++ 42 files changed, 587 insertions(+), 12 deletions(-) create mode 100755 internal/endtoend/testdata/get_db_from_context/mysql/go/db.go create mode 100644 internal/endtoend/testdata/get_db_from_context/mysql/go/models.go create mode 100755 internal/endtoend/testdata/get_db_from_context/mysql/go/query.sql.go create mode 100644 internal/endtoend/testdata/get_db_from_context/mysql/query.sql create mode 100644 internal/endtoend/testdata/get_db_from_context/mysql/schema.sql create mode 100644 internal/endtoend/testdata/get_db_from_context/mysql/sqlc.json create mode 100755 internal/endtoend/testdata/get_db_from_context/postgresql/pgx/v4/go/db.go create mode 100644 internal/endtoend/testdata/get_db_from_context/postgresql/pgx/v4/go/models.go create mode 100755 internal/endtoend/testdata/get_db_from_context/postgresql/pgx/v4/go/query.sql.go create mode 100644 internal/endtoend/testdata/get_db_from_context/postgresql/pgx/v4/query.sql create mode 100644 internal/endtoend/testdata/get_db_from_context/postgresql/pgx/v4/schema.sql create mode 100644 internal/endtoend/testdata/get_db_from_context/postgresql/pgx/v4/sqlc.json create mode 100755 internal/endtoend/testdata/get_db_from_context/postgresql/pgx/v5/go/db.go create mode 100644 internal/endtoend/testdata/get_db_from_context/postgresql/pgx/v5/go/models.go create mode 100755 internal/endtoend/testdata/get_db_from_context/postgresql/pgx/v5/go/query.sql.go create mode 100644 internal/endtoend/testdata/get_db_from_context/postgresql/pgx/v5/query.sql create mode 100644 internal/endtoend/testdata/get_db_from_context/postgresql/pgx/v5/schema.sql create mode 100644 internal/endtoend/testdata/get_db_from_context/postgresql/pgx/v5/sqlc.json create mode 100755 internal/endtoend/testdata/get_db_from_context/postgresql/stdlib/go/db.go create mode 100644 internal/endtoend/testdata/get_db_from_context/postgresql/stdlib/go/models.go create mode 100755 internal/endtoend/testdata/get_db_from_context/postgresql/stdlib/go/query.sql.go create mode 100644 internal/endtoend/testdata/get_db_from_context/postgresql/stdlib/query.sql create mode 100644 internal/endtoend/testdata/get_db_from_context/postgresql/stdlib/schema.sql create mode 100644 internal/endtoend/testdata/get_db_from_context/postgresql/stdlib/sqlc.json create mode 100755 internal/endtoend/testdata/get_db_from_context/sqlite/go/db.go create mode 100644 internal/endtoend/testdata/get_db_from_context/sqlite/go/models.go create mode 100755 internal/endtoend/testdata/get_db_from_context/sqlite/go/query.sql.go create mode 100644 internal/endtoend/testdata/get_db_from_context/sqlite/query.sql create mode 100644 internal/endtoend/testdata/get_db_from_context/sqlite/schema.sql create mode 100644 internal/endtoend/testdata/get_db_from_context/sqlite/sqlc.json diff --git a/docs/reference/config.md b/docs/reference/config.md index 9d334834f0..dc97e4455c 100644 --- a/docs/reference/config.md +++ b/docs/reference/config.md @@ -167,6 +167,8 @@ The `gen` mapping supports the following keys: that returns all valid enum values. - `emit_sql_as_comment`: - If true, emits the SQL statement as a code-block comment above the generated function, appending to any existing comments. Defaults to `false`. +- `get_db_from_context`: + - If true, emits `New` method for `Querier` with a function argument which accepts a ctx argument and returns DBTX. Defaults to `false`. - `build_tags`: - If set, add a `//go:build ` directive at the beginning of each generated Go file. - `initialisms`: @@ -414,6 +416,7 @@ packages: emit_pointers_for_null_types: false emit_enum_valid_method: false emit_all_enum_values: false + get_db_from_context: false build_tags: "some_tag" json_tags_case_style: "camel" omit_unused_structs: false @@ -469,6 +472,8 @@ Each mapping in the `packages` collection has the following keys: - `emit_all_enum_values`: - If true, emit a function per enum type that returns all valid enum values. +- `get_db_from_context`: + - If true, emits `New` method for `Querier` with a function argument which accepts a ctx argument and returns DBTX. Defaults to `false`. - `build_tags`: - If set, add a `//go:build ` directive at the beginning of each generated Go file. - `json_tags_case_style`: diff --git a/internal/codegen/golang/gen.go b/internal/codegen/golang/gen.go index 5b7977f500..3e5f020bc9 100644 --- a/internal/codegen/golang/gen.go +++ b/internal/codegen/golang/gen.go @@ -37,6 +37,7 @@ type tmplCtx struct { EmitMethodsWithDBArgument bool EmitEnumValidMethod bool EmitAllEnumValues bool + GetDBFromContext bool UsesCopyFrom bool UsesBatch bool OmitSqlcVersion bool @@ -65,6 +66,9 @@ func (t *tmplCtx) codegenQueryMethod(q Query) string { if t.EmitMethodsWithDBArgument { db = "db" } + if t.GetDBFromContext { + db = "q.getDBFromContext(ctx)" + } switch q.Cmd { case ":one": @@ -177,6 +181,7 @@ func generate(req *plugin.GenerateRequest, options *opts.Options, enums []Enum, EmitMethodsWithDBArgument: options.EmitMethodsWithDbArgument, EmitEnumValidMethod: options.EmitEnumValidMethod, EmitAllEnumValues: options.EmitAllEnumValues, + GetDBFromContext: options.GetDBFromContext, UsesCopyFrom: usesCopyFrom(queries), UsesBatch: usesBatch(queries), SQLDriver: parseDriver(options.SqlPackage), diff --git a/internal/codegen/golang/opts/options.go b/internal/codegen/golang/opts/options.go index 30a6c2246c..d46a40faa5 100644 --- a/internal/codegen/golang/opts/options.go +++ b/internal/codegen/golang/opts/options.go @@ -25,6 +25,7 @@ type Options struct { EmitEnumValidMethod bool `json:"emit_enum_valid_method,omitempty" yaml:"emit_enum_valid_method"` EmitAllEnumValues bool `json:"emit_all_enum_values,omitempty" yaml:"emit_all_enum_values"` EmitSqlAsComment bool `json:"emit_sql_as_comment,omitempty" yaml:"emit_sql_as_comment"` + GetDBFromContext bool `json:"get_db_from_context,omitempty" yaml:"get_db_from_context"` JsonTagsCaseStyle string `json:"json_tags_case_style,omitempty" yaml:"json_tags_case_style"` Package string `json:"package" yaml:"package"` Out string `json:"out" yaml:"out"` @@ -147,6 +148,12 @@ func ValidateOpts(opts *Options) error { if opts.EmitMethodsWithDbArgument && opts.EmitPreparedQueries { return fmt.Errorf("invalid options: emit_methods_with_db_argument and emit_prepared_queries options are mutually exclusive") } + if opts.GetDBFromContext && opts.EmitPreparedQueries { + return fmt.Errorf("invalid options: get_db_from_context and emit_prepared_queries options are mutually exclusive") + } + if opts.GetDBFromContext && opts.EmitMethodsWithDbArgument { + return fmt.Errorf("invalid options: get_db_from_context and emit_methods_with_db_argument options are mutually exclusive") + } if *opts.QueryParameterLimit < 0 { return fmt.Errorf("invalid options: query parameter limit must not be negative") } diff --git a/internal/codegen/golang/templates/go-sql-driver-mysql/copyfromCopy.tmpl b/internal/codegen/golang/templates/go-sql-driver-mysql/copyfromCopy.tmpl index e21475b148..340ac87fc1 100644 --- a/internal/codegen/golang/templates/go-sql-driver-mysql/copyfromCopy.tmpl +++ b/internal/codegen/golang/templates/go-sql-driver-mysql/copyfromCopy.tmpl @@ -40,7 +40,13 @@ func (q *Queries) {{.MethodName}}(ctx context.Context{{if $.EmitMethodsWithDBArg go convertRowsFor{{.MethodName}}(pw, {{.Arg.Name}}) // The string interpolation is necessary because LOAD DATA INFILE requires // the file name to be given as a literal string. - result, err := {{if (not $.EmitMethodsWithDBArgument)}}q.{{end}}db.ExecContext(ctx, fmt.Sprintf("LOAD DATA LOCAL INFILE '%s' INTO TABLE {{.TableIdentifierForMySQL}} %s ({{range $index, $name := .Arg.ColumnNames}}{{if gt $index 0}}, {{end}}{{$name}}{{end}})", "Reader::" + rh, mysqltsv.Escaping)) + {{- $db := "q.db"}} + {{- if $.EmitMethodsWithDBArgument}} + {{- $db = "db"}} + {{- else if $.GetDBFromContext}} + {{- $db = "q.getDBFromContext(ctx)"}} + {{- end}} + result, err := {{$db}}.ExecContext(ctx, fmt.Sprintf("LOAD DATA LOCAL INFILE '%s' INTO TABLE {{.TableIdentifierForMySQL}} %s ({{range $index, $name := .Arg.ColumnNames}}{{if gt $index 0}}, {{end}}{{$name}}{{end}})", "Reader::" + rh, mysqltsv.Escaping)) if err != nil { return 0, err } diff --git a/internal/codegen/golang/templates/pgx/batchCode.tmpl b/internal/codegen/golang/templates/pgx/batchCode.tmpl index 35bd701bd3..2de6fd65bb 100644 --- a/internal/codegen/golang/templates/pgx/batchCode.tmpl +++ b/internal/codegen/golang/templates/pgx/batchCode.tmpl @@ -46,7 +46,13 @@ func (q *Queries) {{.MethodName}}(ctx context.Context, {{ if $.EmitMethodsWithDB } batch.Queue({{.ConstantName}}, vals...) } - br := {{if not $.EmitMethodsWithDBArgument}}q.{{end}}db.SendBatch(ctx, batch) + {{- $db := "q.db"}} + {{- if $.EmitMethodsWithDBArgument}} + {{- $db = "db"}} + {{- else if $.GetDBFromContext}} + {{- $db = "q.getDBFromContext(ctx)"}} + {{- end}} + br := {{$db}}.SendBatch(ctx, batch) return &{{.MethodName}}BatchResults{br,len({{.Arg.Name}}),false} } diff --git a/internal/codegen/golang/templates/pgx/copyfromCopy.tmpl b/internal/codegen/golang/templates/pgx/copyfromCopy.tmpl index c1cfa68d1d..43da098223 100644 --- a/internal/codegen/golang/templates/pgx/copyfromCopy.tmpl +++ b/internal/codegen/golang/templates/pgx/copyfromCopy.tmpl @@ -42,7 +42,12 @@ func (q *Queries) {{.MethodName}}(ctx context.Context, db DBTX, {{.Arg.SlicePair return db.CopyFrom(ctx, {{.TableIdentifierAsGoSlice}}, {{.Arg.ColumnNamesAsGoSlice}}, &iteratorFor{{.MethodName}}{rows: {{.Arg.Name}}}) {{- else -}} func (q *Queries) {{.MethodName}}(ctx context.Context, {{.Arg.SlicePair}}) (int64, error) { - return q.db.CopyFrom(ctx, {{.TableIdentifierAsGoSlice}}, {{.Arg.ColumnNamesAsGoSlice}}, &iteratorFor{{.MethodName}}{rows: {{.Arg.Name}}}) + +{{- $db := "db"}} +{{- if $.GetDBFromContext}} +{{- $db = "getDBFromContext(ctx)"}} +{{- end}} + return q.{{$db}}.CopyFrom(ctx, {{.TableIdentifierAsGoSlice}}, {{.Arg.ColumnNamesAsGoSlice}}, &iteratorFor{{.MethodName}}{rows: {{.Arg.Name}}}) {{- end}} } diff --git a/internal/codegen/golang/templates/pgx/dbCode.tmpl b/internal/codegen/golang/templates/pgx/dbCode.tmpl index 236554d9f2..d14211f403 100644 --- a/internal/codegen/golang/templates/pgx/dbCode.tmpl +++ b/internal/codegen/golang/templates/pgx/dbCode.tmpl @@ -15,6 +15,9 @@ type DBTX interface { {{ if .EmitMethodsWithDBArgument}} func New() *Queries { return &Queries{} +{{- else if .GetDBFromContext}} +func New(getDBFromContext func(context.Context) DBTX) *Queries { + return &Queries{getDBFromContext: getDBFromContext} {{- else -}} func New(db DBTX) *Queries { return &Queries{db: db} @@ -22,12 +25,14 @@ func New(db DBTX) *Queries { } type Queries struct { - {{if not .EmitMethodsWithDBArgument}} + {{- if .GetDBFromContext}} + getDBFromContext func(context.Context) DBTX + {{- else if not .EmitMethodsWithDBArgument}} db DBTX {{end}} } -{{if not .EmitMethodsWithDBArgument}} +{{if and (not .EmitMethodsWithDBArgument) (not .GetDBFromContext)}} func (q *Queries) WithTx(tx pgx.Tx) *Queries { return &Queries{ db: tx, diff --git a/internal/codegen/golang/templates/pgx/queryCode.tmpl b/internal/codegen/golang/templates/pgx/queryCode.tmpl index 18de5db2ba..cc72212297 100644 --- a/internal/codegen/golang/templates/pgx/queryCode.tmpl +++ b/internal/codegen/golang/templates/pgx/queryCode.tmpl @@ -7,6 +7,11 @@ const {{.ConstantName}} = {{$.Q}}-- name: {{.MethodName}} {{.Cmd}} {{$.Q}} {{end}} +{{- $db := "db" }} +{{- if $.GetDBFromContext}} +{{- $db = "getDBFromContext(ctx)"}} +{{- end}} + {{if ne (hasPrefix .Cmd ":batch") true}} {{if .Arg.EmitStruct}} type {{.Arg.Type}} struct { {{- range .Arg.Struct.Fields}} @@ -31,7 +36,7 @@ func (q *Queries) {{.MethodName}}(ctx context.Context, db DBTX, {{.Arg.Pair}}) ( row := db.QueryRow(ctx, {{.ConstantName}}, {{.Arg.Params}}) {{- else -}} func (q *Queries) {{.MethodName}}(ctx context.Context, {{.Arg.Pair}}) ({{.Ret.DefineType}}, error) { - row := q.db.QueryRow(ctx, {{.ConstantName}}, {{.Arg.Params}}) + row := q.{{$db}}.QueryRow(ctx, {{.ConstantName}}, {{.Arg.Params}}) {{- end}} {{- if or (ne .Arg.Pair .Ret.Pair) (ne .Arg.DefineType .Ret.DefineType) }} var {{.Ret.Name}} {{.Ret.Type}} @@ -49,7 +54,7 @@ func (q *Queries) {{.MethodName}}(ctx context.Context, db DBTX, {{.Arg.Pair}}) ( rows, err := db.Query(ctx, {{.ConstantName}}, {{.Arg.Params}}) {{- else -}} func (q *Queries) {{.MethodName}}(ctx context.Context, {{.Arg.Pair}}) ([]{{.Ret.DefineType}}, error) { - rows, err := q.db.Query(ctx, {{.ConstantName}}, {{.Arg.Params}}) + rows, err := q.{{$db}}.Query(ctx, {{.ConstantName}}, {{.Arg.Params}}) {{- end}} if err != nil { return nil, err @@ -82,7 +87,7 @@ func (q *Queries) {{.MethodName}}(ctx context.Context, db DBTX, {{.Arg.Pair}}) e _, err := db.Exec(ctx, {{.ConstantName}}, {{.Arg.Params}}) {{- else -}} func (q *Queries) {{.MethodName}}(ctx context.Context, {{.Arg.Pair}}) error { - _, err := q.db.Exec(ctx, {{.ConstantName}}, {{.Arg.Params}}) + _, err := q.{{$db}}.Exec(ctx, {{.ConstantName}}, {{.Arg.Params}}) {{- end}} return err } @@ -96,7 +101,7 @@ func (q *Queries) {{.MethodName}}(ctx context.Context, db DBTX, {{.Arg.Pair}}) ( result, err := db.Exec(ctx, {{.ConstantName}}, {{.Arg.Params}}) {{- else -}} func (q *Queries) {{.MethodName}}(ctx context.Context, {{.Arg.Pair}}) (int64, error) { - result, err := q.db.Exec(ctx, {{.ConstantName}}, {{.Arg.Params}}) + result, err := q.{{$db}}.Exec(ctx, {{.ConstantName}}, {{.Arg.Params}}) {{- end}} if err != nil { return 0, err @@ -113,7 +118,7 @@ func (q *Queries) {{.MethodName}}(ctx context.Context, db DBTX, {{.Arg.Pair}}) ( return db.Exec(ctx, {{.ConstantName}}, {{.Arg.Params}}) {{- else -}} func (q *Queries) {{.MethodName}}(ctx context.Context, {{.Arg.Pair}}) (pgconn.CommandTag, error) { - return q.db.Exec(ctx, {{.ConstantName}}, {{.Arg.Params}}) + return q.{{$db}}.Exec(ctx, {{.ConstantName}}, {{.Arg.Params}}) {{- end}} } {{end}} diff --git a/internal/codegen/golang/templates/stdlib/dbCode.tmpl b/internal/codegen/golang/templates/stdlib/dbCode.tmpl index 7433d522f6..02f0634fcf 100644 --- a/internal/codegen/golang/templates/stdlib/dbCode.tmpl +++ b/internal/codegen/golang/templates/stdlib/dbCode.tmpl @@ -9,6 +9,9 @@ type DBTX interface { {{ if .EmitMethodsWithDBArgument}} func New() *Queries { return &Queries{} +{{- else if .GetDBFromContext}} +func New(getDBFromContext func(context.Context) DBTX) *Queries { + return &Queries{getDBFromContext: getDBFromContext} {{- else -}} func New(db DBTX) *Queries { return &Queries{db: db} @@ -77,7 +80,9 @@ func (q *Queries) queryRow(ctx context.Context, stmt *sql.Stmt, query string, ar {{end}} type Queries struct { - {{- if not .EmitMethodsWithDBArgument}} + {{- if .GetDBFromContext}} + getDBFromContext func(context.Context) DBTX + {{- else if not .EmitMethodsWithDBArgument}} db DBTX {{- end}} @@ -89,7 +94,7 @@ type Queries struct { {{- end}} } -{{if not .EmitMethodsWithDBArgument}} +{{if and (not .EmitMethodsWithDBArgument) (not .GetDBFromContext)}} func (q *Queries) WithTx(tx *sql.Tx) *Queries { return &Queries{ db: tx, diff --git a/internal/config/v_one.go b/internal/config/v_one.go index 8efa9f42fc..69d5db9bf6 100644 --- a/internal/config/v_one.go +++ b/internal/config/v_one.go @@ -42,6 +42,7 @@ type v1PackageSettings struct { EmitEnumValidMethod bool `json:"emit_enum_valid_method,omitempty" yaml:"emit_enum_valid_method"` EmitAllEnumValues bool `json:"emit_all_enum_values,omitempty" yaml:"emit_all_enum_values"` EmitSqlAsComment bool `json:"emit_sql_as_comment,omitempty" yaml:"emit_sql_as_comment"` + GetDBFromContext bool `json:"get_db_from_context,omitempty" yaml:"get_db_from_context"` JSONTagsCaseStyle string `json:"json_tags_case_style,omitempty" yaml:"json_tags_case_style"` SQLPackage string `json:"sql_package" yaml:"sql_package"` SQLDriver string `json:"sql_driver" yaml:"sql_driver"` @@ -152,6 +153,7 @@ func (c *V1GenerateSettings) Translate() Config { EmitEnumValidMethod: pkg.EmitEnumValidMethod, EmitAllEnumValues: pkg.EmitAllEnumValues, EmitSqlAsComment: pkg.EmitSqlAsComment, + GetDBFromContext: pkg.GetDBFromContext, Package: pkg.Name, Out: pkg.Path, SqlPackage: pkg.SQLPackage, diff --git a/internal/config/v_one.json b/internal/config/v_one.json index a0667a7c9c..9c6006178b 100644 --- a/internal/config/v_one.json +++ b/internal/config/v_one.json @@ -134,6 +134,9 @@ "emit_sql_as_comment": { "type": "boolean" }, + "get_db_from_context": { + "type": "boolean" + }, "build_tags": { "type": "string" }, diff --git a/internal/config/v_two.json b/internal/config/v_two.json index acf914997d..4f8c0d10d7 100644 --- a/internal/config/v_two.json +++ b/internal/config/v_two.json @@ -143,6 +143,9 @@ "emit_sql_as_comment": { "type": "boolean" }, + "get_db_from_context": { + "type": "boolean" + }, "build_tags": { "type": "string" }, diff --git a/internal/endtoend/testdata/get_db_from_context/mysql/go/db.go b/internal/endtoend/testdata/get_db_from_context/mysql/go/db.go new file mode 100755 index 0000000000..cdc94c577e --- /dev/null +++ b/internal/endtoend/testdata/get_db_from_context/mysql/go/db.go @@ -0,0 +1,25 @@ +// Code generated by sqlc. DO NOT EDIT. +// versions: +// sqlc v1.27.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(getDBFromContext func(context.Context) DBTX) *Queries { + return &Queries{getDBFromContext: getDBFromContext} +} + +type Queries struct { + getDBFromContext func(context.Context) DBTX +} diff --git a/internal/endtoend/testdata/get_db_from_context/mysql/go/models.go b/internal/endtoend/testdata/get_db_from_context/mysql/go/models.go new file mode 100644 index 0000000000..171ccfd0f2 --- /dev/null +++ b/internal/endtoend/testdata/get_db_from_context/mysql/go/models.go @@ -0,0 +1,16 @@ +// Code generated by sqlc. DO NOT EDIT. +// versions: +// sqlc v1.27.0 + +package querytest + +import ( + "database/sql" +) + +type User struct { + ID int32 + FirstName string + LastName sql.NullString + Age int32 +} diff --git a/internal/endtoend/testdata/get_db_from_context/mysql/go/query.sql.go b/internal/endtoend/testdata/get_db_from_context/mysql/go/query.sql.go new file mode 100755 index 0000000000..da8684a052 --- /dev/null +++ b/internal/endtoend/testdata/get_db_from_context/mysql/go/query.sql.go @@ -0,0 +1,42 @@ +// Code generated by sqlc. DO NOT EDIT. +// versions: +// sqlc v1.27.0 +// source: query.sql + +package querytest + +import ( + "context" +) + +const getAll = `-- name: GetAll :many +SELECT id, first_name, last_name, age FROM users +` + +func (q *Queries) GetAll(ctx context.Context) ([]User, error) { + rows, err := q.getDBFromContext(ctx).QueryContext(ctx, getAll) + if err != nil { + return nil, err + } + defer rows.Close() + var items []User + for rows.Next() { + var i User + if err := rows.Scan( + &i.ID, + &i.FirstName, + &i.LastName, + &i.Age, + ); err != nil { + return nil, err + } + items = append(items, i) + } + if err := rows.Close(); err != nil { + return nil, err + } + if err := rows.Err(); err != nil { + return nil, err + } + return items, nil +} diff --git a/internal/endtoend/testdata/get_db_from_context/mysql/query.sql b/internal/endtoend/testdata/get_db_from_context/mysql/query.sql new file mode 100644 index 0000000000..e2f85e2a9a --- /dev/null +++ b/internal/endtoend/testdata/get_db_from_context/mysql/query.sql @@ -0,0 +1,2 @@ +/* name: GetAll :many */ +SELECT * FROM users; diff --git a/internal/endtoend/testdata/get_db_from_context/mysql/schema.sql b/internal/endtoend/testdata/get_db_from_context/mysql/schema.sql new file mode 100644 index 0000000000..3e36d6cdf7 --- /dev/null +++ b/internal/endtoend/testdata/get_db_from_context/mysql/schema.sql @@ -0,0 +1,6 @@ +CREATE TABLE users ( + id integer NOT NULL AUTO_INCREMENT PRIMARY KEY, + first_name varchar(255) NOT NULL, + last_name varchar(255), + age integer NOT NULL +); diff --git a/internal/endtoend/testdata/get_db_from_context/mysql/sqlc.json b/internal/endtoend/testdata/get_db_from_context/mysql/sqlc.json new file mode 100644 index 0000000000..2fde96ba86 --- /dev/null +++ b/internal/endtoend/testdata/get_db_from_context/mysql/sqlc.json @@ -0,0 +1,13 @@ +{ + "version": "1", + "packages": [ + { + "name": "querytest", + "path": "go", + "schema": "schema.sql", + "queries": "query.sql", + "engine": "mysql", + "get_db_from_context": true + } + ] +} diff --git a/internal/endtoend/testdata/get_db_from_context/postgresql/pgx/v4/go/db.go b/internal/endtoend/testdata/get_db_from_context/postgresql/pgx/v4/go/db.go new file mode 100755 index 0000000000..90a68fa3c2 --- /dev/null +++ b/internal/endtoend/testdata/get_db_from_context/postgresql/pgx/v4/go/db.go @@ -0,0 +1,26 @@ +// Code generated by sqlc. DO NOT EDIT. +// versions: +// sqlc v1.27.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(getDBFromContext func(context.Context) DBTX) *Queries { + return &Queries{getDBFromContext: getDBFromContext} +} + +type Queries struct { + getDBFromContext func(context.Context) DBTX +} diff --git a/internal/endtoend/testdata/get_db_from_context/postgresql/pgx/v4/go/models.go b/internal/endtoend/testdata/get_db_from_context/postgresql/pgx/v4/go/models.go new file mode 100644 index 0000000000..171ccfd0f2 --- /dev/null +++ b/internal/endtoend/testdata/get_db_from_context/postgresql/pgx/v4/go/models.go @@ -0,0 +1,16 @@ +// Code generated by sqlc. DO NOT EDIT. +// versions: +// sqlc v1.27.0 + +package querytest + +import ( + "database/sql" +) + +type User struct { + ID int32 + FirstName string + LastName sql.NullString + Age int32 +} diff --git a/internal/endtoend/testdata/get_db_from_context/postgresql/pgx/v4/go/query.sql.go b/internal/endtoend/testdata/get_db_from_context/postgresql/pgx/v4/go/query.sql.go new file mode 100755 index 0000000000..f3bd582ff6 --- /dev/null +++ b/internal/endtoend/testdata/get_db_from_context/postgresql/pgx/v4/go/query.sql.go @@ -0,0 +1,39 @@ +// Code generated by sqlc. DO NOT EDIT. +// versions: +// sqlc v1.27.0 +// source: query.sql + +package querytest + +import ( + "context" +) + +const getAll = `-- name: GetAll :many +SELECT id, first_name, last_name, age FROM users +` + +func (q *Queries) GetAll(ctx context.Context) ([]User, error) { + rows, err := q.getDBFromContext(ctx).Query(ctx, getAll) + if err != nil { + return nil, err + } + defer rows.Close() + var items []User + for rows.Next() { + var i User + if err := rows.Scan( + &i.ID, + &i.FirstName, + &i.LastName, + &i.Age, + ); err != nil { + return nil, err + } + items = append(items, i) + } + if err := rows.Err(); err != nil { + return nil, err + } + return items, nil +} diff --git a/internal/endtoend/testdata/get_db_from_context/postgresql/pgx/v4/query.sql b/internal/endtoend/testdata/get_db_from_context/postgresql/pgx/v4/query.sql new file mode 100644 index 0000000000..237b20193b --- /dev/null +++ b/internal/endtoend/testdata/get_db_from_context/postgresql/pgx/v4/query.sql @@ -0,0 +1,2 @@ +-- name: GetAll :many +SELECT * FROM users; diff --git a/internal/endtoend/testdata/get_db_from_context/postgresql/pgx/v4/schema.sql b/internal/endtoend/testdata/get_db_from_context/postgresql/pgx/v4/schema.sql new file mode 100644 index 0000000000..ae8e46e25e --- /dev/null +++ b/internal/endtoend/testdata/get_db_from_context/postgresql/pgx/v4/schema.sql @@ -0,0 +1,6 @@ +CREATE TABLE users ( + id integer NOT NULL GENERATED ALWAYS AS IDENTITY PRIMARY KEY, + first_name varchar(255) NOT NULL, + last_name varchar(255), + age integer NOT NULL +); diff --git a/internal/endtoend/testdata/get_db_from_context/postgresql/pgx/v4/sqlc.json b/internal/endtoend/testdata/get_db_from_context/postgresql/pgx/v4/sqlc.json new file mode 100644 index 0000000000..7751ab2366 --- /dev/null +++ b/internal/endtoend/testdata/get_db_from_context/postgresql/pgx/v4/sqlc.json @@ -0,0 +1,14 @@ +{ + "version": "1", + "packages": [ + { + "path": "go", + "engine": "postgresql", + "sql_package": "pgx/v4", + "name": "querytest", + "schema": "schema.sql", + "queries": "query.sql", + "get_db_from_context": true + } + ] +} diff --git a/internal/endtoend/testdata/get_db_from_context/postgresql/pgx/v5/go/db.go b/internal/endtoend/testdata/get_db_from_context/postgresql/pgx/v5/go/db.go new file mode 100755 index 0000000000..bd0fbf66ba --- /dev/null +++ b/internal/endtoend/testdata/get_db_from_context/postgresql/pgx/v5/go/db.go @@ -0,0 +1,26 @@ +// Code generated by sqlc. DO NOT EDIT. +// versions: +// sqlc v1.27.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(getDBFromContext func(context.Context) DBTX) *Queries { + return &Queries{getDBFromContext: getDBFromContext} +} + +type Queries struct { + getDBFromContext func(context.Context) DBTX +} diff --git a/internal/endtoend/testdata/get_db_from_context/postgresql/pgx/v5/go/models.go b/internal/endtoend/testdata/get_db_from_context/postgresql/pgx/v5/go/models.go new file mode 100644 index 0000000000..af95591f94 --- /dev/null +++ b/internal/endtoend/testdata/get_db_from_context/postgresql/pgx/v5/go/models.go @@ -0,0 +1,16 @@ +// Code generated by sqlc. DO NOT EDIT. +// versions: +// sqlc v1.27.0 + +package querytest + +import ( + "github.com/jackc/pgx/v5/pgtype" +) + +type User struct { + ID int32 + FirstName string + LastName pgtype.Text + Age int32 +} diff --git a/internal/endtoend/testdata/get_db_from_context/postgresql/pgx/v5/go/query.sql.go b/internal/endtoend/testdata/get_db_from_context/postgresql/pgx/v5/go/query.sql.go new file mode 100755 index 0000000000..f3bd582ff6 --- /dev/null +++ b/internal/endtoend/testdata/get_db_from_context/postgresql/pgx/v5/go/query.sql.go @@ -0,0 +1,39 @@ +// Code generated by sqlc. DO NOT EDIT. +// versions: +// sqlc v1.27.0 +// source: query.sql + +package querytest + +import ( + "context" +) + +const getAll = `-- name: GetAll :many +SELECT id, first_name, last_name, age FROM users +` + +func (q *Queries) GetAll(ctx context.Context) ([]User, error) { + rows, err := q.getDBFromContext(ctx).Query(ctx, getAll) + if err != nil { + return nil, err + } + defer rows.Close() + var items []User + for rows.Next() { + var i User + if err := rows.Scan( + &i.ID, + &i.FirstName, + &i.LastName, + &i.Age, + ); err != nil { + return nil, err + } + items = append(items, i) + } + if err := rows.Err(); err != nil { + return nil, err + } + return items, nil +} diff --git a/internal/endtoend/testdata/get_db_from_context/postgresql/pgx/v5/query.sql b/internal/endtoend/testdata/get_db_from_context/postgresql/pgx/v5/query.sql new file mode 100644 index 0000000000..237b20193b --- /dev/null +++ b/internal/endtoend/testdata/get_db_from_context/postgresql/pgx/v5/query.sql @@ -0,0 +1,2 @@ +-- name: GetAll :many +SELECT * FROM users; diff --git a/internal/endtoend/testdata/get_db_from_context/postgresql/pgx/v5/schema.sql b/internal/endtoend/testdata/get_db_from_context/postgresql/pgx/v5/schema.sql new file mode 100644 index 0000000000..ae8e46e25e --- /dev/null +++ b/internal/endtoend/testdata/get_db_from_context/postgresql/pgx/v5/schema.sql @@ -0,0 +1,6 @@ +CREATE TABLE users ( + id integer NOT NULL GENERATED ALWAYS AS IDENTITY PRIMARY KEY, + first_name varchar(255) NOT NULL, + last_name varchar(255), + age integer NOT NULL +); diff --git a/internal/endtoend/testdata/get_db_from_context/postgresql/pgx/v5/sqlc.json b/internal/endtoend/testdata/get_db_from_context/postgresql/pgx/v5/sqlc.json new file mode 100644 index 0000000000..eb76daa8a1 --- /dev/null +++ b/internal/endtoend/testdata/get_db_from_context/postgresql/pgx/v5/sqlc.json @@ -0,0 +1,14 @@ +{ + "version": "1", + "packages": [ + { + "path": "go", + "engine": "postgresql", + "sql_package": "pgx/v5", + "name": "querytest", + "schema": "schema.sql", + "queries": "query.sql", + "get_db_from_context": true + } + ] +} diff --git a/internal/endtoend/testdata/get_db_from_context/postgresql/stdlib/go/db.go b/internal/endtoend/testdata/get_db_from_context/postgresql/stdlib/go/db.go new file mode 100755 index 0000000000..cdc94c577e --- /dev/null +++ b/internal/endtoend/testdata/get_db_from_context/postgresql/stdlib/go/db.go @@ -0,0 +1,25 @@ +// Code generated by sqlc. DO NOT EDIT. +// versions: +// sqlc v1.27.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(getDBFromContext func(context.Context) DBTX) *Queries { + return &Queries{getDBFromContext: getDBFromContext} +} + +type Queries struct { + getDBFromContext func(context.Context) DBTX +} diff --git a/internal/endtoend/testdata/get_db_from_context/postgresql/stdlib/go/models.go b/internal/endtoend/testdata/get_db_from_context/postgresql/stdlib/go/models.go new file mode 100644 index 0000000000..171ccfd0f2 --- /dev/null +++ b/internal/endtoend/testdata/get_db_from_context/postgresql/stdlib/go/models.go @@ -0,0 +1,16 @@ +// Code generated by sqlc. DO NOT EDIT. +// versions: +// sqlc v1.27.0 + +package querytest + +import ( + "database/sql" +) + +type User struct { + ID int32 + FirstName string + LastName sql.NullString + Age int32 +} diff --git a/internal/endtoend/testdata/get_db_from_context/postgresql/stdlib/go/query.sql.go b/internal/endtoend/testdata/get_db_from_context/postgresql/stdlib/go/query.sql.go new file mode 100755 index 0000000000..da8684a052 --- /dev/null +++ b/internal/endtoend/testdata/get_db_from_context/postgresql/stdlib/go/query.sql.go @@ -0,0 +1,42 @@ +// Code generated by sqlc. DO NOT EDIT. +// versions: +// sqlc v1.27.0 +// source: query.sql + +package querytest + +import ( + "context" +) + +const getAll = `-- name: GetAll :many +SELECT id, first_name, last_name, age FROM users +` + +func (q *Queries) GetAll(ctx context.Context) ([]User, error) { + rows, err := q.getDBFromContext(ctx).QueryContext(ctx, getAll) + if err != nil { + return nil, err + } + defer rows.Close() + var items []User + for rows.Next() { + var i User + if err := rows.Scan( + &i.ID, + &i.FirstName, + &i.LastName, + &i.Age, + ); err != nil { + return nil, err + } + items = append(items, i) + } + if err := rows.Close(); err != nil { + return nil, err + } + if err := rows.Err(); err != nil { + return nil, err + } + return items, nil +} diff --git a/internal/endtoend/testdata/get_db_from_context/postgresql/stdlib/query.sql b/internal/endtoend/testdata/get_db_from_context/postgresql/stdlib/query.sql new file mode 100644 index 0000000000..237b20193b --- /dev/null +++ b/internal/endtoend/testdata/get_db_from_context/postgresql/stdlib/query.sql @@ -0,0 +1,2 @@ +-- name: GetAll :many +SELECT * FROM users; diff --git a/internal/endtoend/testdata/get_db_from_context/postgresql/stdlib/schema.sql b/internal/endtoend/testdata/get_db_from_context/postgresql/stdlib/schema.sql new file mode 100644 index 0000000000..ae8e46e25e --- /dev/null +++ b/internal/endtoend/testdata/get_db_from_context/postgresql/stdlib/schema.sql @@ -0,0 +1,6 @@ +CREATE TABLE users ( + id integer NOT NULL GENERATED ALWAYS AS IDENTITY PRIMARY KEY, + first_name varchar(255) NOT NULL, + last_name varchar(255), + age integer NOT NULL +); diff --git a/internal/endtoend/testdata/get_db_from_context/postgresql/stdlib/sqlc.json b/internal/endtoend/testdata/get_db_from_context/postgresql/stdlib/sqlc.json new file mode 100644 index 0000000000..16c56ba8ca --- /dev/null +++ b/internal/endtoend/testdata/get_db_from_context/postgresql/stdlib/sqlc.json @@ -0,0 +1,13 @@ +{ + "version": "1", + "packages": [ + { + "path": "go", + "engine": "postgresql", + "name": "querytest", + "schema": "schema.sql", + "queries": "query.sql", + "get_db_from_context": true + } + ] +} diff --git a/internal/endtoend/testdata/get_db_from_context/sqlite/go/db.go b/internal/endtoend/testdata/get_db_from_context/sqlite/go/db.go new file mode 100755 index 0000000000..cdc94c577e --- /dev/null +++ b/internal/endtoend/testdata/get_db_from_context/sqlite/go/db.go @@ -0,0 +1,25 @@ +// Code generated by sqlc. DO NOT EDIT. +// versions: +// sqlc v1.27.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(getDBFromContext func(context.Context) DBTX) *Queries { + return &Queries{getDBFromContext: getDBFromContext} +} + +type Queries struct { + getDBFromContext func(context.Context) DBTX +} diff --git a/internal/endtoend/testdata/get_db_from_context/sqlite/go/models.go b/internal/endtoend/testdata/get_db_from_context/sqlite/go/models.go new file mode 100644 index 0000000000..58db29e8ff --- /dev/null +++ b/internal/endtoend/testdata/get_db_from_context/sqlite/go/models.go @@ -0,0 +1,16 @@ +// Code generated by sqlc. DO NOT EDIT. +// versions: +// sqlc v1.27.0 + +package querytest + +import ( + "database/sql" +) + +type User struct { + ID int64 + FirstName string + LastName sql.NullString + Age int64 +} diff --git a/internal/endtoend/testdata/get_db_from_context/sqlite/go/query.sql.go b/internal/endtoend/testdata/get_db_from_context/sqlite/go/query.sql.go new file mode 100755 index 0000000000..da8684a052 --- /dev/null +++ b/internal/endtoend/testdata/get_db_from_context/sqlite/go/query.sql.go @@ -0,0 +1,42 @@ +// Code generated by sqlc. DO NOT EDIT. +// versions: +// sqlc v1.27.0 +// source: query.sql + +package querytest + +import ( + "context" +) + +const getAll = `-- name: GetAll :many +SELECT id, first_name, last_name, age FROM users +` + +func (q *Queries) GetAll(ctx context.Context) ([]User, error) { + rows, err := q.getDBFromContext(ctx).QueryContext(ctx, getAll) + if err != nil { + return nil, err + } + defer rows.Close() + var items []User + for rows.Next() { + var i User + if err := rows.Scan( + &i.ID, + &i.FirstName, + &i.LastName, + &i.Age, + ); err != nil { + return nil, err + } + items = append(items, i) + } + if err := rows.Close(); err != nil { + return nil, err + } + if err := rows.Err(); err != nil { + return nil, err + } + return items, nil +} diff --git a/internal/endtoend/testdata/get_db_from_context/sqlite/query.sql b/internal/endtoend/testdata/get_db_from_context/sqlite/query.sql new file mode 100644 index 0000000000..e2f85e2a9a --- /dev/null +++ b/internal/endtoend/testdata/get_db_from_context/sqlite/query.sql @@ -0,0 +1,2 @@ +/* name: GetAll :many */ +SELECT * FROM users; diff --git a/internal/endtoend/testdata/get_db_from_context/sqlite/schema.sql b/internal/endtoend/testdata/get_db_from_context/sqlite/schema.sql new file mode 100644 index 0000000000..86b83a3ddd --- /dev/null +++ b/internal/endtoend/testdata/get_db_from_context/sqlite/schema.sql @@ -0,0 +1,6 @@ +CREATE TABLE users ( + id integer NOT NULL PRIMARY KEY, + first_name varchar NOT NULL, + last_name varchar, + age integer NOT NULL +); diff --git a/internal/endtoend/testdata/get_db_from_context/sqlite/sqlc.json b/internal/endtoend/testdata/get_db_from_context/sqlite/sqlc.json new file mode 100644 index 0000000000..5a47f4aec3 --- /dev/null +++ b/internal/endtoend/testdata/get_db_from_context/sqlite/sqlc.json @@ -0,0 +1,13 @@ +{ + "version": "1", + "packages": [ + { + "name": "querytest", + "path": "go", + "schema": "schema.sql", + "queries": "query.sql", + "engine": "sqlite", + "get_db_from_context": true + } + ] +}