Skip to content

Commit 81dd475

Browse files
committed
Add support for omitempty in JSON tags
Adds a new configuration option json_tags_omit_empty
1 parent c9d826b commit 81dd475

File tree

22 files changed

+325
-4
lines changed

22 files changed

+325
-4
lines changed

docs/reference/config.md

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -171,6 +171,8 @@ The `gen` mapping supports the following keys:
171171
- If true, "Id" in json tags will be uppercase. If false, will be camelcase. Defaults to `false`
172172
- `json_tags_case_style`:
173173
- `camel` for camelCase, `pascal` for PascalCase, `snake` for snake_case or `none` to use the column name in the DB. Defaults to `none`.
174+
- `json_tags_omit_empty`:
175+
- If true will add `omitempty` to JSON tags. Defaults to `false`.
174176
- `omit_unused_structs`:
175177
- If `true`, sqlc won't generate table and enum structs that aren't used in queries for a given package. Defaults to `false`.
176178
- `output_batch_file_name`:

internal/codegen/golang/field.go

Lines changed: 7 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -44,11 +44,14 @@ func TagsToString(tags map[string]string) string {
4444
func JSONTagName(name string, options *opts.Options) string {
4545
style := options.JsonTagsCaseStyle
4646
idUppercase := options.JsonTagsIdUppercase
47-
if style == "" || style == "none" {
48-
return name
49-
} else {
50-
return SetJSONCaseStyle(name, style, idUppercase)
47+
addOmitEmpty := options.JsonTagsOmitEmpty
48+
if style != "" && style != "none" {
49+
name = SetJSONCaseStyle(name, style, idUppercase)
5150
}
51+
if addOmitEmpty {
52+
name = name + ",omitempty"
53+
}
54+
return name
5255
}
5356

5457
func SetCaseStyle(name string, style string) string {

internal/codegen/golang/opts/options.go

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -26,6 +26,7 @@ type Options struct {
2626
EmitAllEnumValues bool `json:"emit_all_enum_values,omitempty" yaml:"emit_all_enum_values"`
2727
EmitSqlAsComment bool `json:"emit_sql_as_comment,omitempty" yaml:"emit_sql_as_comment"`
2828
JsonTagsCaseStyle string `json:"json_tags_case_style,omitempty" yaml:"json_tags_case_style"`
29+
JsonTagsOmitEmpty bool `json:"json_tags_omit_empty,omitempty" yaml:"json_tags_omit_empty"`
2930
Package string `json:"package" yaml:"package"`
3031
Out string `json:"out" yaml:"out"`
3132
Overrides []Override `json:"overrides,omitempty" yaml:"overrides"`

internal/config/v_one.go

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -43,6 +43,7 @@ type v1PackageSettings struct {
4343
EmitAllEnumValues bool `json:"emit_all_enum_values,omitempty" yaml:"emit_all_enum_values"`
4444
EmitSqlAsComment bool `json:"emit_sql_as_comment,omitempty" yaml:"emit_sql_as_comment"`
4545
JSONTagsCaseStyle string `json:"json_tags_case_style,omitempty" yaml:"json_tags_case_style"`
46+
JSONTagsOmitEmpty bool `json:"json_tags_omit_empty,omitempty" yaml:"json_tags_omit_empty"`
4647
SQLPackage string `json:"sql_package" yaml:"sql_package"`
4748
SQLDriver string `json:"sql_driver" yaml:"sql_driver"`
4849
Overrides []golang.Override `json:"overrides" yaml:"overrides"`
@@ -158,6 +159,7 @@ func (c *V1GenerateSettings) Translate() Config {
158159
SqlDriver: pkg.SQLDriver,
159160
Overrides: pkg.Overrides,
160161
JsonTagsCaseStyle: pkg.JSONTagsCaseStyle,
162+
JsonTagsOmitEmpty: pkg.JSONTagsOmitEmpty,
161163
OutputBatchFileName: pkg.OutputBatchFileName,
162164
OutputDbFileName: pkg.OutputDBFileName,
163165
OutputModelsFileName: pkg.OutputModelsFileName,

internal/endtoend/testdata/json_tags/omit_empty/postgresql/pgx/v4/go/db.go

Lines changed: 32 additions & 0 deletions
Some generated files are not rendered by default. Learn more about customizing how changed files appear on GitHub.

internal/endtoend/testdata/json_tags/omit_empty/postgresql/pgx/v4/go/models.go

Lines changed: 15 additions & 0 deletions
Some generated files are not rendered by default. Learn more about customizing how changed files appear on GitHub.

internal/endtoend/testdata/json_tags/omit_empty/postgresql/pgx/v4/go/query.sql.go

Lines changed: 34 additions & 0 deletions
Some generated files are not rendered by default. Learn more about customizing how changed files appear on GitHub.
Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,2 @@
1+
-- name: GetAll :many
2+
SELECT * FROM users;
Lines changed: 6 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,6 @@
1+
CREATE TABLE users (
2+
first_name varchar(255),
3+
last_name varchar(255),
4+
age smallint
5+
);
6+
Lines changed: 15 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,15 @@
1+
{
2+
"version": "1",
3+
"packages": [
4+
{
5+
"path": "go",
6+
"engine": "postgresql",
7+
"sql_package": "pgx/v4",
8+
"name": "querytest",
9+
"schema": "schema.sql",
10+
"queries": "query.sql",
11+
"emit_json_tags": true,
12+
"json_tags_omit_empty": true
13+
}
14+
]
15+
}

internal/endtoend/testdata/json_tags/omit_empty/postgresql/pgx/v5/go/db.go

Lines changed: 32 additions & 0 deletions
Some generated files are not rendered by default. Learn more about customizing how changed files appear on GitHub.

internal/endtoend/testdata/json_tags/omit_empty/postgresql/pgx/v5/go/models.go

Lines changed: 15 additions & 0 deletions
Some generated files are not rendered by default. Learn more about customizing how changed files appear on GitHub.

internal/endtoend/testdata/json_tags/omit_empty/postgresql/pgx/v5/go/query.sql.go

Lines changed: 34 additions & 0 deletions
Some generated files are not rendered by default. Learn more about customizing how changed files appear on GitHub.
Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,2 @@
1+
-- name: GetAll :many
2+
SELECT * FROM users;
Lines changed: 6 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,6 @@
1+
CREATE TABLE users (
2+
first_name varchar(255),
3+
last_name varchar(255),
4+
age smallint
5+
);
6+
Lines changed: 15 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,15 @@
1+
{
2+
"version": "1",
3+
"packages": [
4+
{
5+
"path": "go",
6+
"engine": "postgresql",
7+
"sql_package": "pgx/v5",
8+
"name": "querytest",
9+
"schema": "schema.sql",
10+
"queries": "query.sql",
11+
"emit_json_tags": true,
12+
"json_tags_omit_empty": true
13+
}
14+
]
15+
}

internal/endtoend/testdata/json_tags/omit_empty/postgresql/stdlib/go/db.go

Lines changed: 31 additions & 0 deletions
Some generated files are not rendered by default. Learn more about customizing how changed files appear on GitHub.

internal/endtoend/testdata/json_tags/omit_empty/postgresql/stdlib/go/models.go

Lines changed: 15 additions & 0 deletions
Some generated files are not rendered by default. Learn more about customizing how changed files appear on GitHub.

internal/endtoend/testdata/json_tags/omit_empty/postgresql/stdlib/go/query.sql.go

Lines changed: 37 additions & 0 deletions
Some generated files are not rendered by default. Learn more about customizing how changed files appear on GitHub.
Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,2 @@
1+
-- name: GetAll :many
2+
SELECT * FROM users;
Lines changed: 6 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,6 @@
1+
CREATE TABLE users (
2+
first_name varchar(255),
3+
last_name varchar(255),
4+
age smallint
5+
);
6+
Lines changed: 14 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,14 @@
1+
{
2+
"version": "1",
3+
"packages": [
4+
{
5+
"path": "go",
6+
"engine": "postgresql",
7+
"name": "querytest",
8+
"schema": "schema.sql",
9+
"queries": "query.sql",
10+
"emit_json_tags": true,
11+
"json_tags_omit_empty": true
12+
}
13+
]
14+
}

0 commit comments

Comments
 (0)