Skip to content

Commit 4d66770

Browse files
authored
internal/dinosql: Remove unneeded column suffix (#492)
When returned columns have no name set, a name is generated based on index (e.g. column_1, column_2). When generating Go structs, sqlc wasn't using the correct column name to track duplicate, resulting in nonsense field names like `Column5_2`. This has the added benefit for generating correct JSON tag values for these columns.
1 parent 4a4a96d commit 4d66770

File tree

6 files changed

+94
-4
lines changed

6 files changed

+94
-4
lines changed

internal/dinosql/gen.go

Lines changed: 5 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -816,14 +816,15 @@ func (r Result) columnsToStruct(name string, columns []goColumn, settings config
816816
seen := map[string]int{}
817817
suffixes := map[int]int{}
818818
for i, c := range columns {
819-
tagName := c.Name
820-
fieldName := StructName(columnName(c.Column, i), settings)
819+
colName := columnName(c.Column, i)
820+
tagName := colName
821+
fieldName := StructName(colName, settings)
821822
// Track suffixes by the ID of the column, so that columns referring to the same numbered parameter can be
822823
// reused.
823824
suffix := 0
824825
if o, ok := suffixes[c.id]; ok {
825826
suffix = o
826-
} else if v := seen[c.Name]; v > 0 {
827+
} else if v := seen[colName]; v > 0 {
827828
suffix = v + 1
828829
}
829830
suffixes[c.id] = suffix
@@ -836,7 +837,7 @@ func (r Result) columnsToStruct(name string, columns []goColumn, settings config
836837
Type: r.goType(c.Column, settings),
837838
Tags: map[string]string{"json:": tagName},
838839
})
839-
seen[c.Name]++
840+
seen[colName]++
840841
}
841842
return &gs
842843
}

internal/endtoend/testdata/generate_series/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/generate_series/go/models.go

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

internal/endtoend/testdata/generate_series/go/query.sql.go

Lines changed: 41 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: GenerateSeries :many
2+
SELECT generate_series($1::timestamp, $2::timestamp);
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+
"emit_json_tags": true
10+
}
11+
]
12+
}

0 commit comments

Comments
 (0)