Skip to content

Commit 68511b6

Browse files
alessiodionisivictoraugustolls
authored andcommitted
Customizable output file names (sqlc-dev#998)
* customizable output file names * fix tests * use OutputFilesSuffix only on queryFile template, add tests
1 parent 47544d8 commit 68511b6

File tree

25 files changed

+453
-40
lines changed

25 files changed

+453
-40
lines changed

internal/codegen/golang/gen.go

Lines changed: 21 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -427,21 +427,39 @@ func generate(settings config.CombinedSettings, enums []Enum, structs []Struct,
427427
fmt.Println(b.String())
428428
return fmt.Errorf("source error: %w", err)
429429
}
430+
431+
if templateName == "queryFile" && golang.OutputFilesSuffix != "" {
432+
name += golang.OutputFilesSuffix
433+
}
434+
430435
if !strings.HasSuffix(name, ".go") {
431436
name += ".go"
432437
}
433438
output[name] = string(code)
434439
return nil
435440
}
436441

437-
if err := execute("db.go", "dbFile"); err != nil {
442+
dbFileName := "db.go"
443+
if golang.OutputDBFileName != "" {
444+
dbFileName = golang.OutputDBFileName
445+
}
446+
modelsFileName := "models.go"
447+
if golang.OutputModelsFileName != "" {
448+
modelsFileName = golang.OutputModelsFileName
449+
}
450+
querierFileName := "querier.go"
451+
if golang.OutputQuerierFileName != "" {
452+
querierFileName = golang.OutputQuerierFileName
453+
}
454+
455+
if err := execute(dbFileName, "dbFile"); err != nil {
438456
return nil, err
439457
}
440-
if err := execute("models.go", "modelsFile"); err != nil {
458+
if err := execute(modelsFileName, "modelsFile"); err != nil {
441459
return nil, err
442460
}
443461
if golang.EmitInterface {
444-
if err := execute("querier.go", "interfaceFile"); err != nil {
462+
if err := execute(querierFileName, "interfaceFile"); err != nil {
445463
return nil, err
446464
}
447465
}

internal/codegen/golang/imports.go

Lines changed: 16 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -88,12 +88,25 @@ func (i *importer) usesArrays() bool {
8888
}
8989

9090
func (i *importer) Imports(filename string) [][]ImportSpec {
91+
dbFileName := "db.go"
92+
if i.Settings.Go.OutputDBFileName != "" {
93+
dbFileName = i.Settings.Go.OutputDBFileName
94+
}
95+
modelsFileName := "models.go"
96+
if i.Settings.Go.OutputModelsFileName != "" {
97+
modelsFileName = i.Settings.Go.OutputModelsFileName
98+
}
99+
querierFileName := "querier.go"
100+
if i.Settings.Go.OutputQuerierFileName != "" {
101+
querierFileName = i.Settings.Go.OutputQuerierFileName
102+
}
103+
91104
switch filename {
92-
case "db.go":
105+
case dbFileName:
93106
return mergeImports(i.dbImports())
94-
case "models.go":
107+
case modelsFileName:
95108
return mergeImports(i.modelImports())
96-
case "querier.go":
109+
case querierFileName:
97110
return mergeImports(i.interfaceImports())
98111
default:
99112
return mergeImports(i.queryImports(filename))

internal/config/config.go

Lines changed: 15 additions & 11 deletions
Original file line numberDiff line numberDiff line change
@@ -110,17 +110,21 @@ type SQLGen struct {
110110
}
111111

112112
type SQLGo struct {
113-
EmitInterface bool `json:"emit_interface" yaml:"emit_interface"`
114-
EmitJSONTags bool `json:"emit_json_tags" yaml:"emit_json_tags"`
115-
EmitDBTags bool `json:"emit_db_tags" yaml:"emit_db_tags"`
116-
EmitPreparedQueries bool `json:"emit_prepared_queries" yaml:"emit_prepared_queries"`
117-
EmitExactTableNames bool `json:"emit_exact_table_names,omitempty" yaml:"emit_exact_table_names"`
118-
EmitEmptySlices bool `json:"emit_empty_slices,omitempty" yaml:"emit_empty_slices"`
119-
JSONTagsCaseStyle string `json:"json_tags_case_style,omitempty" yaml:"json_tags_case_style"`
120-
Package string `json:"package" yaml:"package"`
121-
Out string `json:"out" yaml:"out"`
122-
Overrides []Override `json:"overrides,omitempty" yaml:"overrides"`
123-
Rename map[string]string `json:"rename,omitempty" yaml:"rename"`
113+
EmitInterface bool `json:"emit_interface" yaml:"emit_interface"`
114+
EmitJSONTags bool `json:"emit_json_tags" yaml:"emit_json_tags"`
115+
EmitDBTags bool `json:"emit_db_tags" yaml:"emit_db_tags"`
116+
EmitPreparedQueries bool `json:"emit_prepared_queries" yaml:"emit_prepared_queries"`
117+
EmitExactTableNames bool `json:"emit_exact_table_names,omitempty" yaml:"emit_exact_table_names"`
118+
EmitEmptySlices bool `json:"emit_empty_slices,omitempty" yaml:"emit_empty_slices"`
119+
JSONTagsCaseStyle string `json:"json_tags_case_style,omitempty" yaml:"json_tags_case_style"`
120+
Package string `json:"package" yaml:"package"`
121+
Out string `json:"out" yaml:"out"`
122+
Overrides []Override `json:"overrides,omitempty" yaml:"overrides"`
123+
Rename map[string]string `json:"rename,omitempty" yaml:"rename"`
124+
OutputDBFileName string `json:"output_db_file_name,omitempty" yaml:"output_db_file_name"`
125+
OutputModelsFileName string `json:"output_models_file_name,omitempty" yaml:"output_models_file_name"`
126+
OutputQuerierFileName string `json:"output_querier_file_name,omitempty" yaml:"output_querier_file_name"`
127+
OutputFilesSuffix string `json:"output_files_suffix,omitempty" yaml:"output_files_suffix"`
124128
}
125129

126130
type SQLKotlin struct {

internal/config/v_one.go

Lines changed: 31 additions & 23 deletions
Original file line numberDiff line numberDiff line change
@@ -16,19 +16,23 @@ type V1GenerateSettings struct {
1616
}
1717

1818
type v1PackageSettings struct {
19-
Name string `json:"name" yaml:"name"`
20-
Engine Engine `json:"engine,omitempty" yaml:"engine"`
21-
Path string `json:"path" yaml:"path"`
22-
Schema Paths `json:"schema" yaml:"schema"`
23-
Queries Paths `json:"queries" yaml:"queries"`
24-
EmitInterface bool `json:"emit_interface" yaml:"emit_interface"`
25-
EmitJSONTags bool `json:"emit_json_tags" yaml:"emit_json_tags"`
26-
EmitDBTags bool `json:"emit_db_tags" yaml:"emit_db_tags"`
27-
EmitPreparedQueries bool `json:"emit_prepared_queries" yaml:"emit_prepared_queries"`
28-
EmitExactTableNames bool `json:"emit_exact_table_names,omitempty" yaml:"emit_exact_table_names"`
29-
EmitEmptySlices bool `json:"emit_empty_slices,omitempty" yaml:"emit_empty_slices"`
30-
JSONTagsCaseStyle string `json:"json_tags_case_style,omitempty" yaml:"json_tags_case_style"`
31-
Overrides []Override `json:"overrides" yaml:"overrides"`
19+
Name string `json:"name" yaml:"name"`
20+
Engine Engine `json:"engine,omitempty" yaml:"engine"`
21+
Path string `json:"path" yaml:"path"`
22+
Schema Paths `json:"schema" yaml:"schema"`
23+
Queries Paths `json:"queries" yaml:"queries"`
24+
EmitInterface bool `json:"emit_interface" yaml:"emit_interface"`
25+
EmitJSONTags bool `json:"emit_json_tags" yaml:"emit_json_tags"`
26+
EmitDBTags bool `json:"emit_db_tags" yaml:"emit_db_tags"`
27+
EmitPreparedQueries bool `json:"emit_prepared_queries" yaml:"emit_prepared_queries"`
28+
EmitExactTableNames bool `json:"emit_exact_table_names,omitempty" yaml:"emit_exact_table_names"`
29+
EmitEmptySlices bool `json:"emit_empty_slices,omitempty" yaml:"emit_empty_slices"`
30+
JSONTagsCaseStyle string `json:"json_tags_case_style,omitempty" yaml:"json_tags_case_style"`
31+
Overrides []Override `json:"overrides" yaml:"overrides"`
32+
OutputDBFileName string `json:"output_db_file_name,omitempty" yaml:"output_db_file_name"`
33+
OutputModelsFileName string `json:"output_models_file_name,omitempty" yaml:"output_models_file_name"`
34+
OutputQuerierFileName string `json:"output_querier_file_name,omitempty" yaml:"output_querier_file_name"`
35+
OutputFilesSuffix string `json:"output_files_suffix,omitempty" yaml:"output_files_suffix"`
3236
}
3337

3438
func v1ParseConfig(rd io.Reader) (Config, error) {
@@ -104,16 +108,20 @@ func (c *V1GenerateSettings) Translate() Config {
104108
Queries: pkg.Queries,
105109
Gen: SQLGen{
106110
Go: &SQLGo{
107-
EmitInterface: pkg.EmitInterface,
108-
EmitJSONTags: pkg.EmitJSONTags,
109-
EmitDBTags: pkg.EmitDBTags,
110-
EmitPreparedQueries: pkg.EmitPreparedQueries,
111-
EmitExactTableNames: pkg.EmitExactTableNames,
112-
EmitEmptySlices: pkg.EmitEmptySlices,
113-
Package: pkg.Name,
114-
Out: pkg.Path,
115-
Overrides: pkg.Overrides,
116-
JSONTagsCaseStyle: pkg.JSONTagsCaseStyle,
111+
EmitInterface: pkg.EmitInterface,
112+
EmitJSONTags: pkg.EmitJSONTags,
113+
EmitDBTags: pkg.EmitDBTags,
114+
EmitPreparedQueries: pkg.EmitPreparedQueries,
115+
EmitExactTableNames: pkg.EmitExactTableNames,
116+
EmitEmptySlices: pkg.EmitEmptySlices,
117+
Package: pkg.Name,
118+
Out: pkg.Path,
119+
Overrides: pkg.Overrides,
120+
JSONTagsCaseStyle: pkg.JSONTagsCaseStyle,
121+
OutputDBFileName: pkg.OutputDBFileName,
122+
OutputModelsFileName: pkg.OutputModelsFileName,
123+
OutputQuerierFileName: pkg.OutputQuerierFileName,
124+
OutputFilesSuffix: pkg.OutputFilesSuffix,
117125
},
118126
},
119127
})

internal/endtoend/testdata/output_db_file_name/go/db_gen.go

Lines changed: 29 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_db_file_name/go/models.go

Lines changed: 9 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_db_file_name/go/query.sql.go

Lines changed: 35 additions & 0 deletions
Some generated files are not rendered by default. Learn more about customizing how changed files appear on GitHub.
Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,4 @@
1+
CREATE TABLE "user" (id bigserial not null);
2+
3+
-- name: User :many
4+
SELECT "user".* FROM "user";
Lines changed: 12 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,12 @@
1+
{
2+
"version": "1",
3+
"packages": [
4+
{
5+
"path": "go",
6+
"name": "querytest",
7+
"schema": "query.sql",
8+
"queries": "query.sql",
9+
"output_db_file_name": "db_gen.go"
10+
}
11+
]
12+
}

internal/endtoend/testdata/output_files_suffix/go/db.go

Lines changed: 29 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_files_suffix/go/models.go

Lines changed: 9 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_files_suffix/go/query.sql_gen.go

Lines changed: 35 additions & 0 deletions
Some generated files are not rendered by default. Learn more about customizing how changed files appear on GitHub.
Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,4 @@
1+
CREATE TABLE "user" (id bigserial not null);
2+
3+
-- name: User :many
4+
SELECT "user".* FROM "user";
Lines changed: 12 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,12 @@
1+
{
2+
"version": "1",
3+
"packages": [
4+
{
5+
"path": "go",
6+
"name": "querytest",
7+
"schema": "query.sql",
8+
"queries": "query.sql",
9+
"output_files_suffix": "_gen.go"
10+
}
11+
]
12+
}

internal/endtoend/testdata/output_models_file_name/go/db.go

Lines changed: 29 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)