Skip to content

Commit b7341ba

Browse files
fix(codegen/golang): Move more Go-specific config validation into the plugin (#2951)
Resolves: #2950
1 parent 08ecde7 commit b7341ba

File tree

8 files changed

+22
-35
lines changed

8 files changed

+22
-35
lines changed

internal/codegen/golang/opts/options.go

Lines changed: 13 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -4,6 +4,7 @@ import (
44
"encoding/json"
55
"fmt"
66
"maps"
7+
"path/filepath"
78

89
"github.com/sqlc-dev/sqlc/internal/plugin"
910
)
@@ -16,7 +17,7 @@ type Options struct {
1617
EmitPreparedQueries bool `json:"emit_prepared_queries" yaml:"emit_prepared_queries"`
1718
EmitExactTableNames bool `json:"emit_exact_table_names,omitempty" yaml:"emit_exact_table_names"`
1819
EmitEmptySlices bool `json:"emit_empty_slices,omitempty" yaml:"emit_empty_slices"`
19-
EmitExportedQueries bool `json:"emit_exported_queries" yaml:"emit_exported_queries`
20+
EmitExportedQueries bool `json:"emit_exported_queries" yaml:"emit_exported_queries"`
2021
EmitResultStructPointers bool `json:"emit_result_struct_pointers" yaml:"emit_result_struct_pointers"`
2122
EmitParamsStructPointers bool `json:"emit_params_struct_pointers" yaml:"emit_params_struct_pointers"`
2223
EmitMethodsWithDbArgument bool `json:"emit_methods_with_db_argument,omitempty" yaml:"emit_methods_with_db_argument"`
@@ -77,6 +78,14 @@ func parseOpts(req *plugin.GenerateRequest) (*Options, error) {
7778
return nil, fmt.Errorf("unmarshalling plugin options: %w", err)
7879
}
7980

81+
if options.Package == "" {
82+
if options.Out != "" {
83+
options.Package = filepath.Base(options.Out)
84+
} else {
85+
return nil, fmt.Errorf("invalid options: missing package name")
86+
}
87+
}
88+
8089
for i := range options.Overrides {
8190
if err := options.Overrides[i].parse(req); err != nil {
8291
return nil, err
@@ -111,6 +120,9 @@ func ValidateOpts(opts *Options) error {
111120
if opts.EmitMethodsWithDbArgument && opts.EmitPreparedQueries {
112121
return fmt.Errorf("invalid options: emit_methods_with_db_argument and emit_prepared_queries options are mutually exclusive")
113122
}
123+
if *opts.QueryParameterLimit < 0 {
124+
return fmt.Errorf("invalid options: query parameter limit must not be negative")
125+
}
114126

115127
return nil
116128
}

internal/config/config.go

Lines changed: 0 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -139,13 +139,11 @@ type SQLJSON struct {
139139
var ErrMissingEngine = errors.New("unknown engine")
140140
var ErrMissingVersion = errors.New("no version number")
141141
var ErrNoOutPath = errors.New("no output path")
142-
var ErrNoPackageName = errors.New("missing package name")
143142
var ErrNoPackagePath = errors.New("missing package path")
144143
var ErrNoPackages = errors.New("no packages")
145144
var ErrNoQuerierType = errors.New("no querier emit type enabled")
146145
var ErrUnknownEngine = errors.New("invalid engine")
147146
var ErrUnknownVersion = errors.New("invalid version number")
148-
var ErrInvalidQueryParameterLimit = errors.New("invalid query parameter limit")
149147

150148
var ErrPluginBuiltin = errors.New("a built-in plugin with that name already exists")
151149
var ErrPluginNoName = errors.New("missing plugin name")

internal/config/v_one.go

Lines changed: 0 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -84,15 +84,6 @@ func v1ParseConfig(rd io.Reader) (Config, error) {
8484
return config, ErrNoPackagePath
8585
}
8686

87-
if settings.Packages[j].QueryParameterLimit != nil && (*settings.Packages[j].QueryParameterLimit < 0) {
88-
return config, ErrInvalidQueryParameterLimit
89-
}
90-
91-
if settings.Packages[j].QueryParameterLimit == nil {
92-
settings.Packages[j].QueryParameterLimit = new(int32)
93-
*settings.Packages[j].QueryParameterLimit = 1
94-
}
95-
9687
if settings.Packages[j].Name == "" {
9788
settings.Packages[j].Name = filepath.Base(settings.Packages[j].Path)
9889
}

internal/config/v_two.go

Lines changed: 0 additions & 13 deletions
Original file line numberDiff line numberDiff line change
@@ -3,7 +3,6 @@ package config
33
import (
44
"fmt"
55
"io"
6-
"path/filepath"
76

87
yaml "gopkg.in/yaml.v3"
98
)
@@ -64,18 +63,6 @@ func v2ParseConfig(rd io.Reader) (Config, error) {
6463
if conf.SQL[j].Gen.Go.Out == "" {
6564
return conf, ErrNoPackagePath
6665
}
67-
if conf.SQL[j].Gen.Go.Package == "" {
68-
conf.SQL[j].Gen.Go.Package = filepath.Base(conf.SQL[j].Gen.Go.Out)
69-
}
70-
71-
if conf.SQL[j].Gen.Go.QueryParameterLimit != nil && (*conf.SQL[j].Gen.Go.QueryParameterLimit < 0) {
72-
return conf, ErrInvalidQueryParameterLimit
73-
}
74-
75-
if conf.SQL[j].Gen.Go.QueryParameterLimit == nil {
76-
conf.SQL[j].Gen.Go.QueryParameterLimit = new(int32)
77-
*conf.SQL[j].Gen.Go.QueryParameterLimit = 1
78-
}
7966
}
8067
if conf.SQL[j].Gen.JSON != nil {
8168
if conf.SQL[j].Gen.JSON.Out == "" {

internal/endtoend/testdata/query_parameter_limit_invalid/postgresql/query.sql

Lines changed: 0 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -1,11 +1,3 @@
1-
-- Example queries for sqlc
2-
CREATE TABLE authors (
3-
id BIGSERIAL PRIMARY KEY,
4-
name text NOT NULL,
5-
bio text,
6-
country_code CHAR(2) NOT NULL
7-
);
8-
91
-- name: GetAuthor :one
102
SELECT * FROM authors
113
WHERE name = $1 AND country_code = $2 LIMIT 1;
Lines changed: 6 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,6 @@
1+
CREATE TABLE authors (
2+
id BIGSERIAL PRIMARY KEY,
3+
name text NOT NULL,
4+
bio text,
5+
country_code CHAR(2) NOT NULL
6+
);

internal/endtoend/testdata/query_parameter_limit_invalid/postgresql/sqlc.json

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -5,7 +5,7 @@
55
"path": "go",
66
"engine": "postgresql",
77
"name": "querytest",
8-
"schema": "query.sql",
8+
"schema": "schema.sql",
99
"queries": "query.sql",
1010
"query_parameter_limit": -1
1111
}
Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1 +1,2 @@
1-
error parsing sqlc.json: invalid query parameter limit
1+
# package querytest
2+
error generating code: invalid options: query parameter limit must not be negative

0 commit comments

Comments
 (0)