Skip to content

Commit 8565e24

Browse files
committed
Add EmitResultSlicePointer option for result slice pointer emission
1 parent 3d86155 commit 8565e24

File tree

3 files changed

+28
-2
lines changed

3 files changed

+28
-2
lines changed

internal/gen.go

Lines changed: 4 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -10,10 +10,10 @@ import (
1010
"strings"
1111
"text/template"
1212

13-
"github.com/sqlc-dev/sqlc-gen-go/internal/opts"
14-
"github.com/sqlc-dev/plugin-sdk-go/sdk"
1513
"github.com/sqlc-dev/plugin-sdk-go/metadata"
1614
"github.com/sqlc-dev/plugin-sdk-go/plugin"
15+
"github.com/sqlc-dev/plugin-sdk-go/sdk"
16+
"github.com/sqlc-dev/sqlc-gen-go/internal/opts"
1717
)
1818

1919
type tmplCtx struct {
@@ -34,6 +34,7 @@ type tmplCtx struct {
3434
EmitPreparedQueries bool
3535
EmitInterface bool
3636
EmitEmptySlices bool
37+
EmitResultSlicePointer bool
3738
EmitMethodsWithDBArgument bool
3839
EmitEnumValidMethod bool
3940
EmitAllEnumValues bool
@@ -174,6 +175,7 @@ func generate(req *plugin.GenerateRequest, options *opts.Options, enums []Enum,
174175
EmitDBTags: options.EmitDbTags,
175176
EmitPreparedQueries: options.EmitPreparedQueries,
176177
EmitEmptySlices: options.EmitEmptySlices,
178+
EmitResultSlicePointer: options.EmitResultSlicePointer,
177179
EmitMethodsWithDBArgument: options.EmitMethodsWithDbArgument,
178180
EmitEnumValidMethod: options.EmitEnumValidMethod,
179181
EmitAllEnumValues: options.EmitAllEnumValues,

internal/opts/options.go

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -19,6 +19,7 @@ type Options struct {
1919
EmitEmptySlices bool `json:"emit_empty_slices,omitempty" yaml:"emit_empty_slices"`
2020
EmitExportedQueries bool `json:"emit_exported_queries" yaml:"emit_exported_queries"`
2121
EmitResultStructPointers bool `json:"emit_result_struct_pointers" yaml:"emit_result_struct_pointers"`
22+
EmitResultSlicePointer bool `json:"emit_result_slice_pointer" yaml:"emit_result_slice_pointer"`
2223
EmitParamsStructPointers bool `json:"emit_params_struct_pointers" yaml:"emit_params_struct_pointers"`
2324
EmitMethodsWithDbArgument bool `json:"emit_methods_with_db_argument,omitempty" yaml:"emit_methods_with_db_argument"`
2425
EmitPointersForNullTypes bool `json:"emit_pointers_for_null_types" yaml:"emit_pointers_for_null_types"`

internal/templates/pgx/queryCode.tmpl

Lines changed: 23 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -44,6 +44,28 @@ func (q *Queries) {{.MethodName}}(ctx context.Context, {{.Arg.Pair}}) ({{.Ret.De
4444
{{if eq .Cmd ":many"}}
4545
{{range .Comments}}//{{.}}
4646
{{end -}}
47+
{{- if $.EmitResultSlicePointer -}}
48+
{{- if $.EmitMethodsWithDBArgument -}}
49+
func (q *Queries) {{.MethodName}}(ctx context.Context, db DBTX, {{if .Arg.Pair}}{{.Arg.Pair}}, {{end}}dest *[]{{.Ret.DefineType}}) error {
50+
rows, err := db.Query(ctx, {{.ConstantName}}{{if .Arg.Params}}, {{.Arg.Params}}{{end}})
51+
{{- else -}}
52+
func (q *Queries) {{.MethodName}}(ctx context.Context, {{if .Arg.Pair}}{{.Arg.Pair}}, {{end}}dest *[]{{.Ret.DefineType}}) error {
53+
rows, err := q.db.Query(ctx, {{.ConstantName}}{{if .Arg.Params}}, {{.Arg.Params}}{{end}})
54+
{{- end}}
55+
if err != nil {
56+
return err
57+
}
58+
defer rows.Close()
59+
for rows.Next() {
60+
var {{.Ret.Name}} {{.Ret.Type}}
61+
if err := rows.Scan({{.Ret.Scan}}); err != nil {
62+
return err
63+
}
64+
*dest = append(*dest, {{.Ret.ReturnName}})
65+
}
66+
return rows.Err()
67+
}
68+
{{- else -}}
4769
{{- if $.EmitMethodsWithDBArgument -}}
4870
func (q *Queries) {{.MethodName}}(ctx context.Context, db DBTX, {{.Arg.Pair}}) ([]{{.Ret.DefineType}}, error) {
4971
rows, err := db.Query(ctx, {{.ConstantName}}, {{.Arg.Params}})
@@ -72,6 +94,7 @@ func (q *Queries) {{.MethodName}}(ctx context.Context, {{.Arg.Pair}}) ([]{{.Ret.
7294
}
7395
return items, nil
7496
}
97+
{{- end}}
7598
{{end}}
7699

77100
{{if eq .Cmd ":exec"}}

0 commit comments

Comments
 (0)