diff --git a/generator/metadata/column_meta_data.go b/generator/metadata/column_meta_data.go index 8fcc157..5e2484f 100644 --- a/generator/metadata/column_meta_data.go +++ b/generator/metadata/column_meta_data.go @@ -1,5 +1,7 @@ package metadata +import "regexp" + // Column struct type Column struct { Name string @@ -10,6 +12,16 @@ type Column struct { Comment string } +// GoLangComment returns column comment without ascii control characters +func (c Column) GoLangComment() string { + if c.Comment == "" { + return "" + } + + // remove ascii control characters from string + return regexp.MustCompile(`[[:cntrl:]]+`).ReplaceAllString(c.Comment, "") +} + // DataTypeKind is database type kind(base, enum, user-defined, array) type DataTypeKind string diff --git a/generator/template/file_templates.go b/generator/template/file_templates.go index b65e51d..c2dc33b 100644 --- a/generator/template/file_templates.go +++ b/generator/template/file_templates.go @@ -32,7 +32,7 @@ type {{structImplName}} struct { // Columns {{- range $i, $c := .Columns}} {{- $field := columnField $c}} - {{$field.Name}} {{dialect.PackageName}}.Column{{$field.Type}} {{- if $c.Comment }} // {{$c.Comment}} {{end}} + {{$field.Name}} {{dialect.PackageName}}.Column{{$field.Type}} {{- if $c.Comment }} // {{$c.GoLangComment}} {{end}} {{- end}} AllColumns {{dialect.PackageName}}.ColumnList @@ -122,7 +122,7 @@ import ( type {{$modelTableTemplate.TypeName}} struct { {{- range .Columns}} {{- $field := structField .}} - {{$field.Name}} {{$field.Type.Name}} ` + "{{$field.TagsString}}" + ` {{- if .Comment }} // {{.Comment}} {{end}} + {{$field.Name}} {{$field.Type.Name}} ` + "{{$field.TagsString}}" + ` {{- if .Comment }} // {{.GoLangComment}} {{end}} {{- end}} } diff --git a/tests/mysql/generator_test.go b/tests/mysql/generator_test.go index 289dc20..daac358 100644 --- a/tests/mysql/generator_test.go +++ b/tests/mysql/generator_test.go @@ -191,7 +191,96 @@ type Link struct { ID int32 `+"`sql:\"primary_key\"`"+` // this is link id URL string // link url Name string // link name - Description *string // this is link description + Description *string // '"\\%\_ +} +`) +} + +func TestSQLBuilderColumnComment(t *testing.T) { + testutils.AssertFileContent(t, "./../.gentestdata/mysql/test_sample/table/link.go", ` +// +// Code generated by go-jet DO NOT EDIT. +// +// WARNING: Changes to this file may cause incorrect behavior +// and will be lost if the code is regenerated +// + +package table + +import ( + "github.com/go-jet/jet/v2/mysql" +) + +var Link = newLinkTable("test_sample", "link", "") + +type linkTable struct { + mysql.Table + + // Columns + ID mysql.ColumnInteger // this is link id + URL mysql.ColumnString // link url + Name mysql.ColumnString // link name + Description mysql.ColumnString // '"\\%\_ + + AllColumns mysql.ColumnList + MutableColumns mysql.ColumnList +} + +type LinkTable struct { + linkTable + + NEW linkTable +} + +// AS creates new LinkTable with assigned alias +func (a LinkTable) AS(alias string) *LinkTable { + return newLinkTable(a.SchemaName(), a.TableName(), alias) +} + +// Schema creates new LinkTable with assigned schema name +func (a LinkTable) FromSchema(schemaName string) *LinkTable { + return newLinkTable(schemaName, a.TableName(), a.Alias()) +} + +// WithPrefix creates new LinkTable with assigned table prefix +func (a LinkTable) WithPrefix(prefix string) *LinkTable { + return newLinkTable(a.SchemaName(), prefix+a.TableName(), a.TableName()) +} + +// WithSuffix creates new LinkTable with assigned table suffix +func (a LinkTable) WithSuffix(suffix string) *LinkTable { + return newLinkTable(a.SchemaName(), a.TableName()+suffix, a.TableName()) +} + +func newLinkTable(schemaName, tableName, alias string) *LinkTable { + return &LinkTable{ + linkTable: newLinkTableImpl(schemaName, tableName, alias), + NEW: newLinkTableImpl("", "new", ""), + } +} + +func newLinkTableImpl(schemaName, tableName, alias string) linkTable { + var ( + IDColumn = mysql.IntegerColumn("id") + URLColumn = mysql.StringColumn("url") + NameColumn = mysql.StringColumn("name") + DescriptionColumn = mysql.StringColumn("description") + allColumns = mysql.ColumnList{IDColumn, URLColumn, NameColumn, DescriptionColumn} + mutableColumns = mysql.ColumnList{URLColumn, NameColumn, DescriptionColumn} + ) + + return linkTable{ + Table: mysql.NewTable(schemaName, tableName, alias, allColumns...), + + //Columns + ID: IDColumn, + URL: URLColumn, + Name: NameColumn, + Description: DescriptionColumn, + + AllColumns: allColumns, + MutableColumns: mutableColumns, + } } `) }