Skip to content

Commit 5454832

Browse files
authored
gen: Create consistent JSON tags (#110)
A field's JSON tag value should be the name of the column as it appears in the database.
1 parent ed42c09 commit 5454832

8 files changed

Lines changed: 51 additions & 48 deletions

File tree

internal/dinosql/gen.go

Lines changed: 15 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -556,9 +556,23 @@ func (r Result) columnsToStruct(name string, columns []core.Column) *GoStruct {
556556
return &gs
557557
}
558558

559+
func argName(name string) string {
560+
out := ""
561+
for i, p := range strings.Split(name, "_") {
562+
if i == 0 {
563+
out += strings.ToLower(p)
564+
} else if p == "id" {
565+
out += "ID"
566+
} else {
567+
out += strings.Title(p)
568+
}
569+
}
570+
return out
571+
}
572+
559573
func paramName(p Parameter) string {
560574
if p.Column.Name != "" {
561-
return p.Column.Name
575+
return argName(p.Column.Name)
562576
}
563577
return fmt.Sprintf("dollar_%d", p.Number)
564578
}

internal/dinosql/parser.go

Lines changed: 2 additions & 16 deletions
Original file line numberDiff line numberDiff line change
@@ -804,20 +804,6 @@ func search(root nodes.Node, f func(nodes.Node) bool) nodes.List {
804804
return ns.list
805805
}
806806

807-
func argName(name string) string {
808-
out := ""
809-
for i, p := range strings.Split(name, "_") {
810-
if i == 0 {
811-
out += strings.ToLower(p)
812-
} else if p == "id" {
813-
out += "ID"
814-
} else {
815-
out += strings.Title(p)
816-
}
817-
}
818-
return out
819-
}
820-
821807
func resolveCatalogRefs(c core.Catalog, rvs []nodes.RangeVar, args []paramRef) ([]Parameter, error) {
822808
aliasMap := map[string]core.FQN{}
823809
// TODO: Deprecate defaultTable
@@ -939,7 +925,7 @@ func resolveCatalogRefs(c core.Catalog, rvs []nodes.RangeVar, args []paramRef) (
939925
a = append(a, Parameter{
940926
Number: ref.ref.Number,
941927
Column: core.Column{
942-
Name: argName(key),
928+
Name: key,
943929
DataType: c.DataType,
944930
NotNull: c.NotNull,
945931
IsArray: c.IsArray,
@@ -972,7 +958,7 @@ func resolveCatalogRefs(c core.Catalog, rvs []nodes.RangeVar, args []paramRef) (
972958
a = append(a, Parameter{
973959
Number: ref.ref.Number,
974960
Column: core.Column{
975-
Name: argName(key),
961+
Name: key,
976962
DataType: c.DataType,
977963
NotNull: c.NotNull,
978964
IsArray: c.IsArray,

internal/dinosql/parser_test.go

Lines changed: 4 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -165,15 +165,17 @@ func TestParseSchema(t *testing.T) {
165165
}
166166

167167
q, err := ParseQueries(c, GenerateSettings{}, PackageSettings{
168-
Queries: filepath.Join("testdata", "ondeck", "query"),
168+
Queries: filepath.Join("testdata", "ondeck", "query"),
169+
EmitJSONTags: true,
169170
})
170171
if err != nil {
171172
t.Fatal(err)
172173
}
173174

174175
t.Run("default", func(t *testing.T) {
175176
output, err := Generate(q, GenerateSettings{}, PackageSettings{
176-
Name: "ondeck",
177+
Name: "ondeck",
178+
EmitJSONTags: true,
177179
})
178180
if err != nil {
179181
t.Fatal(err)

internal/dinosql/query_test.go

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -214,7 +214,7 @@ func TestQueries(t *testing.T) {
214214
{1, core.Column{NotNull: true, DataType: "text", Name: "slug"}},
215215
{2, core.Column{NotNull: true, DataType: "pg_catalog.varchar", Name: "name"}},
216216
{3, core.Column{NotNull: true, DataType: "text", Name: "city"}},
217-
{4, core.Column{NotNull: true, DataType: "pg_catalog.varchar", Name: "spotifyPlaylist"}},
217+
{4, core.Column{NotNull: true, DataType: "pg_catalog.varchar", Name: "spotify_playlist"}},
218218
{5, core.Column{NotNull: true, DataType: "status", Name: "status"}},
219219
},
220220
},

internal/dinosql/testdata/ondeck/city.sql.go

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

internal/dinosql/testdata/ondeck/models.go

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

internal/dinosql/testdata/ondeck/sqlc.json

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -4,7 +4,8 @@
44
"name": "ondeck",
55
"path": ".",
66
"schema": "./schema",
7-
"queries": "./query"
7+
"queries": "./query",
8+
"emit_json_tags": true
89
},
910
{
1011
"path": "prepared",

internal/dinosql/testdata/ondeck/venue.sql.go

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

0 commit comments

Comments
 (0)