diff --git a/generator/template/file_templates.go b/generator/template/file_templates.go index 1538031d..be3d2f67 100644 --- a/generator/template/file_templates.go +++ b/generator/template/file_templates.go @@ -11,13 +11,6 @@ var autoGenWarningTemplate = ` ` var tableSQLBuilderTemplate = ` -{{define "column-list" -}} - {{- range $i, $c := . }} -{{- $field := columnField $c}} - {{- if gt $i 0 }}, {{end}}{{$field.Name}}Column - {{- end}} -{{- end}} - package {{package}} import ( @@ -33,7 +26,9 @@ type {{structImplName}} struct { // Columns {{- range $i, $c := .Columns}} {{- $field := columnField $c}} +{{- if not $field.Skip}} {{$field.Name}} {{dialect.PackageName}}.Column{{$field.Type}} {{golangComment .Comment}} +{{- end}} {{- end}} AllColumns {{dialect.PackageName}}.ColumnList @@ -77,10 +72,12 @@ func new{{tableTemplate.TypeName}}Impl(schemaName, tableName, alias string) {{st var ( {{- range $i, $c := .Columns}} {{- $field := columnField $c}} +{{- if not $field.Skip }} {{$field.Name}}Column = {{dialect.PackageName}}.{{$field.Type}}Column("{{$c.Name}}") {{- end}} - allColumns = {{dialect.PackageName}}.ColumnList{ {{template "column-list" .Columns}} } - mutableColumns = {{dialect.PackageName}}.ColumnList{ {{template "column-list" .MutableColumns}} } +{{- end}} + allColumns = {{dialect.PackageName}}.ColumnList{ {{columnList .Columns}} } + mutableColumns = {{dialect.PackageName}}.ColumnList{ {{columnList .MutableColumns}} } ) return {{structImplName}}{ @@ -89,7 +86,9 @@ func new{{tableTemplate.TypeName}}Impl(schemaName, tableName, alias string) {{st //Columns {{- range $i, $c := .Columns}} {{- $field := columnField $c}} +{{- if not $field.Skip }} {{$field.Name}}: {{$field.Name}}Column, +{{- end}} {{- end}} AllColumns: allColumns, @@ -124,7 +123,9 @@ import ( type {{$modelTableTemplate.TypeName}} struct { {{- range .Columns}} {{- $field := structField .}} +{{- if not $field.Skip}} {{$field.Name}} {{$field.Type.Name}} ` + "{{$field.TagsString}}" + ` {{golangComment .Comment}} +{{- end }} {{- end}} } diff --git a/generator/template/model_template.go b/generator/template/model_template.go index 990b4096..84f46d70 100644 --- a/generator/template/model_template.go +++ b/generator/template/model_template.go @@ -159,6 +159,7 @@ type TableModelField struct { Name string Type Type Tags []string + Skip bool } // DefaultTableModelField returns default TableModelField implementation @@ -173,6 +174,7 @@ func DefaultTableModelField(columnMetaData metadata.Column) TableModelField { Name: dbidentifier.ToGoIdentifier(columnMetaData.Name), Type: getType(columnMetaData), Tags: tags, + Skip: false, } } diff --git a/generator/template/process.go b/generator/template/process.go index 371c89b6..28e6c0ab 100644 --- a/generator/template/process.go +++ b/generator/template/process.go @@ -217,6 +217,17 @@ func processTableSQLBuilder(fileTypes, dirPath string, return insertedRowAlias(dialect) }, "golangComment": formatGolangComment, + "columnList": func(columns []metadata.Column) string { + names := []string{} + for _, col := range columns { + bc := tableSQLBuilder.Column(col) + if bc.Skip { + continue + } + names = append(names, bc.Name+"Column") + } + return strings.Join(names, ", ") + }, }) if err != nil { return fmt.Errorf("failed to generate table sql builder type %s: %w", tableSQLBuilder.TypeName, err) diff --git a/generator/template/sql_builder_template.go b/generator/template/sql_builder_template.go index 3b158b85..a72e8e99 100644 --- a/generator/template/sql_builder_template.go +++ b/generator/template/sql_builder_template.go @@ -131,6 +131,7 @@ func (tb TableSQLBuilder) UseColumn(columnsFunc func(column metadata.Column) Tab // TableSQLBuilderColumn is template for table sql builder column type TableSQLBuilderColumn struct { + Skip bool Name string Type string } diff --git a/tests/postgres/generator_template_test.go b/tests/postgres/generator_template_test.go index 9d323bd9..e518db71 100644 --- a/tests/postgres/generator_template_test.go +++ b/tests/postgres/generator_template_test.go @@ -479,6 +479,55 @@ func TestGeneratorTemplate_SQLBuilder_ChangeColumnTypes(t *testing.T) { require.Contains(t, actor, "ActorID postgres.ColumnString") } +func TestGeneratorTemplate_Model_SQLBuilder_SkipColumn(t *testing.T) { + err := postgres.Generate( + tempTestDir, + dbConnection, + template.Default(postgres2.Dialect). + UseSchema(func(schemaMetaData metadata.Schema) template.Schema { + return template.DefaultSchema(schemaMetaData). + UseSQLBuilder(template.DefaultSQLBuilder(). + UseTable(func(table metadata.Table) template.TableSQLBuilder { + return template.DefaultTableSQLBuilder(table). + UseColumn(func(column metadata.Column) template.TableSQLBuilderColumn { + defaultColumn := template.DefaultTableSQLBuilderColumn(column) + + if defaultColumn.Name == "FirstName" { + defaultColumn.Skip = true + } + + return defaultColumn + }) + }), + ). + UseModel(template.DefaultModel(). + UseTable(func(table metadata.Table) template.TableModel { + return template.DefaultTableModel(table). + UseField(func(column metadata.Column) template.TableModelField { + defaultColumn := template.DefaultTableModelField(column) + + if defaultColumn.Name == "FirstName" { + defaultColumn.Skip = true + } + + return defaultColumn + }) + }), + ) + }), + ) + + require.Nil(t, err) + + actorSql := file2.Exists(t, defaultActorSQLBuilderFilePath) + require.NotContains(t, actorSql, "FirstName") + require.Contains(t, actorSql, "ActorID") + + actorModel := file2.Exists(t, defaultActorModelFilePath) + require.NotContains(t, actorModel, "FirstName") + require.Contains(t, actorModel, "ActorID") +} + func TestRenameEnumValueName(t *testing.T) { err := postgres.Generate( tempTestDir,