From 2d136f1bb30360a90e01a8ca5b4e70a99bc655bd Mon Sep 17 00:00:00 2001 From: Nao Yonashiro Date: Sun, 30 Apr 2023 23:45:51 +0900 Subject: [PATCH] fix: fix toSnakeCase to handle input in CamelCase format --- internal/codegen/golang/field.go | 8 ++++++++ internal/codegen/golang/result.go | 2 +- .../testdata/sqlc_embed/postgresql/pgx/go/query.sql.go | 4 ++-- 3 files changed, 11 insertions(+), 3 deletions(-) diff --git a/internal/codegen/golang/field.go b/internal/codegen/golang/field.go index be8d469355..c3504c4c2b 100644 --- a/internal/codegen/golang/field.go +++ b/internal/codegen/golang/field.go @@ -2,6 +2,7 @@ package golang import ( "fmt" + "regexp" "sort" "strings" @@ -57,7 +58,14 @@ func SetCaseStyle(name string, style string) string { } } +var camelPattern = regexp.MustCompile("[^A-Z][A-Z]+") + func toSnakeCase(s string) string { + if !strings.ContainsRune(s, '_') { + s = camelPattern.ReplaceAllStringFunc(s, func(x string) string { + return x[:1] + "_" + x[1:] + }) + } return strings.ToLower(s) } diff --git a/internal/codegen/golang/result.go b/internal/codegen/golang/result.go index 73b36e2ba4..c32d9c6d13 100644 --- a/internal/codegen/golang/result.go +++ b/internal/codegen/golang/result.go @@ -335,7 +335,7 @@ func columnsToStruct(req *plugin.CodeGenRequest, name string, columns []goColumn colName := columnName(c.Column, i) tagName := colName - // overide col/tag with expected model name + // override col/tag with expected model name if c.embed != nil { colName = c.embed.modelName tagName = SetCaseStyle(colName, "snake") diff --git a/internal/endtoend/testdata/sqlc_embed/postgresql/pgx/go/query.sql.go b/internal/endtoend/testdata/sqlc_embed/postgresql/pgx/go/query.sql.go index 9dd260e9b6..0239741079 100644 --- a/internal/endtoend/testdata/sqlc_embed/postgresql/pgx/go/query.sql.go +++ b/internal/endtoend/testdata/sqlc_embed/postgresql/pgx/go/query.sql.go @@ -118,7 +118,7 @@ INNER JOIN baz.users bu ON users.id = bu.id type WithCrossSchemaRow struct { User User `db:"user" json:"user"` - BazUser BazUser `db:"bazuser" json:"bazuser"` + BazUser BazUser `db:"baz_user" json:"baz_user"` } func (q *Queries) WithCrossSchema(ctx context.Context) ([]WithCrossSchemaRow, error) { @@ -152,7 +152,7 @@ SELECT bu.id, bu.name FROM baz.users bu ` type WithSchemaRow struct { - BazUser BazUser `db:"bazuser" json:"bazuser"` + BazUser BazUser `db:"baz_user" json:"baz_user"` } func (q *Queries) WithSchema(ctx context.Context) (WithSchemaRow, error) {