diff --git a/internal/codegen/golang/gen.go b/internal/codegen/golang/gen.go index 138a9f41cd..3c9cf3ff4c 100644 --- a/internal/codegen/golang/gen.go +++ b/internal/codegen/golang/gen.go @@ -362,6 +362,7 @@ type tmplCtx struct { SourceName string EmitJSONTags bool + Int64ToStringTags bool EmitDBTags bool EmitPreparedQueries bool EmitInterface bool @@ -401,6 +402,7 @@ func generate(settings config.CombinedSettings, enums []Enum, structs []Struct, Settings: settings.Global, EmitInterface: golang.EmitInterface, EmitJSONTags: golang.EmitJSONTags, + Int64ToStringTags: golang.Int64ToStringTags, EmitDBTags: golang.EmitDBTags, EmitPreparedQueries: golang.EmitPreparedQueries, EmitEmptySlices: golang.EmitEmptySlices, diff --git a/internal/codegen/golang/result.go b/internal/codegen/golang/result.go index 3c534b19f7..07fa4a38be 100644 --- a/internal/codegen/golang/result.go +++ b/internal/codegen/golang/result.go @@ -77,12 +77,17 @@ func buildStructs(r *compiler.Result, settings config.CombinedSettings) []Struct if settings.Go.EmitDBTags { tags["db:"] = column.Name } + t := goType(r, compiler.ConvertColumn(table.Rel, column), settings) if settings.Go.EmitJSONTags { - tags["json:"] = column.Name + if t == "int64" && settings.Go.Int64ToStringTags { + tags["json:"] = column.Name + ",string" + } else { + tags["json:"] = column.Name + } } s.Fields = append(s.Fields, Field{ Name: StructName(column.Name, settings), - Type: goType(r, compiler.ConvertColumn(table.Rel, column), settings), + Type: t, Tags: tags, Comment: column.Comment, }) @@ -258,12 +263,17 @@ func columnsToStruct(r *compiler.Result, name string, columns []goColumn, settin if settings.Go.EmitDBTags { tags["db:"] = tagName } + t := goType(r, c.Column, settings) if settings.Go.EmitJSONTags { - tags["json:"] = tagName + if t == "int64" && settings.Go.Int64ToStringTags { + tags["json:"] = tagName + ",string" + } else { + tags["json:"] = tagName + } } gs.Fields = append(gs.Fields, Field{ Name: fieldName, - Type: goType(r, c.Column, settings), + Type: t, Tags: tags, }) seen[colName]++ diff --git a/internal/codegen/kotlin/gen.go b/internal/codegen/kotlin/gen.go index 54cd2a5413..d700a338d2 100644 --- a/internal/codegen/kotlin/gen.go +++ b/internal/codegen/kotlin/gen.go @@ -728,6 +728,7 @@ type ktTmplCtx struct { SourceName string EmitJSONTags bool + Int64ToStringTags bool EmitPreparedQueries bool EmitInterface bool } diff --git a/internal/config/config.go b/internal/config/config.go index e4eeff91ca..03e367c448 100644 --- a/internal/config/config.go +++ b/internal/config/config.go @@ -111,6 +111,7 @@ type SQLGen struct { type SQLGo struct { EmitInterface bool `json:"emit_interface" yaml:"emit_interface"` EmitJSONTags bool `json:"emit_json_tags" yaml:"emit_json_tags"` + Int64ToStringTags bool `json:"int64_to_string_tags" yaml:"int64_to_string_tags"` EmitDBTags bool `json:"emit_db_tags" yaml:"emit_db_tags"` EmitPreparedQueries bool `json:"emit_prepared_queries" yaml:"emit_prepared_queries"` EmitExactTableNames bool `json:"emit_exact_table_names,omitempty" yaml:"emit_exact_table_names"` diff --git a/internal/config/v_one.go b/internal/config/v_one.go index 55d6b3ae32..40ee05eeeb 100644 --- a/internal/config/v_one.go +++ b/internal/config/v_one.go @@ -23,6 +23,7 @@ type v1PackageSettings struct { Queries Paths `json:"queries" yaml:"queries"` EmitInterface bool `json:"emit_interface" yaml:"emit_interface"` EmitJSONTags bool `json:"emit_json_tags" yaml:"emit_json_tags"` + Int64ToStringTags bool `json:"int64_to_string_tags" yaml:"int64_to_string_tags"` EmitDBTags bool `json:"emit_db_tags" yaml:"emit_db_tags"` EmitPreparedQueries bool `json:"emit_prepared_queries" yaml:"emit_prepared_queries"` EmitExactTableNames bool `json:"emit_exact_table_names,omitempty" yaml:"emit_exact_table_names"` @@ -105,6 +106,7 @@ func (c *V1GenerateSettings) Translate() Config { Go: &SQLGo{ EmitInterface: pkg.EmitInterface, EmitJSONTags: pkg.EmitJSONTags, + Int64ToStringTags: pkg.Int64ToStringTags, EmitDBTags: pkg.EmitDBTags, EmitPreparedQueries: pkg.EmitPreparedQueries, EmitExactTableNames: pkg.EmitExactTableNames,