feat: add generator skip option for table columns

Signed-off-by: Alexander Trost <galexrt@googlemail.com>
This commit is contained in:
Alexander Trost 2024-12-26 15:03:42 +01:00
parent f9ed359785
commit 60ba05b6fb
No known key found for this signature in database
GPG key ID: 5CF1D4600D4CBFDF
5 changed files with 73 additions and 9 deletions

View file

@ -11,13 +11,6 @@ var autoGenWarningTemplate = `
` `
var tableSQLBuilderTemplate = ` var tableSQLBuilderTemplate = `
{{define "column-list" -}}
{{- range $i, $c := . }}
{{- $field := columnField $c}}
{{- if gt $i 0 }}, {{end}}{{$field.Name}}Column
{{- end}}
{{- end}}
package {{package}} package {{package}}
import ( import (
@ -33,7 +26,9 @@ type {{structImplName}} struct {
// Columns // Columns
{{- range $i, $c := .Columns}} {{- range $i, $c := .Columns}}
{{- $field := columnField $c}} {{- $field := columnField $c}}
{{- if not $field.Skip}}
{{$field.Name}} {{dialect.PackageName}}.Column{{$field.Type}} {{golangComment .Comment}} {{$field.Name}} {{dialect.PackageName}}.Column{{$field.Type}} {{golangComment .Comment}}
{{- end}}
{{- end}} {{- end}}
AllColumns {{dialect.PackageName}}.ColumnList AllColumns {{dialect.PackageName}}.ColumnList
@ -77,10 +72,12 @@ func new{{tableTemplate.TypeName}}Impl(schemaName, tableName, alias string) {{st
var ( var (
{{- range $i, $c := .Columns}} {{- range $i, $c := .Columns}}
{{- $field := columnField $c}} {{- $field := columnField $c}}
{{- if not $field.Skip }}
{{$field.Name}}Column = {{dialect.PackageName}}.{{$field.Type}}Column("{{$c.Name}}") {{$field.Name}}Column = {{dialect.PackageName}}.{{$field.Type}}Column("{{$c.Name}}")
{{- end}} {{- end}}
allColumns = {{dialect.PackageName}}.ColumnList{ {{template "column-list" .Columns}} } {{- end}}
mutableColumns = {{dialect.PackageName}}.ColumnList{ {{template "column-list" .MutableColumns}} } allColumns = {{dialect.PackageName}}.ColumnList{ {{columnList .Columns}} }
mutableColumns = {{dialect.PackageName}}.ColumnList{ {{columnList .MutableColumns}} }
) )
return {{structImplName}}{ return {{structImplName}}{
@ -89,7 +86,9 @@ func new{{tableTemplate.TypeName}}Impl(schemaName, tableName, alias string) {{st
//Columns //Columns
{{- range $i, $c := .Columns}} {{- range $i, $c := .Columns}}
{{- $field := columnField $c}} {{- $field := columnField $c}}
{{- if not $field.Skip }}
{{$field.Name}}: {{$field.Name}}Column, {{$field.Name}}: {{$field.Name}}Column,
{{- end}}
{{- end}} {{- end}}
AllColumns: allColumns, AllColumns: allColumns,
@ -124,7 +123,9 @@ import (
type {{$modelTableTemplate.TypeName}} struct { type {{$modelTableTemplate.TypeName}} struct {
{{- range .Columns}} {{- range .Columns}}
{{- $field := structField .}} {{- $field := structField .}}
{{- if not $field.Skip}}
{{$field.Name}} {{$field.Type.Name}} ` + "{{$field.TagsString}}" + ` {{golangComment .Comment}} {{$field.Name}} {{$field.Type.Name}} ` + "{{$field.TagsString}}" + ` {{golangComment .Comment}}
{{- end }}
{{- end}} {{- end}}
} }

View file

@ -159,6 +159,7 @@ type TableModelField struct {
Name string Name string
Type Type Type Type
Tags []string Tags []string
Skip bool
} }
// DefaultTableModelField returns default TableModelField implementation // DefaultTableModelField returns default TableModelField implementation
@ -173,6 +174,7 @@ func DefaultTableModelField(columnMetaData metadata.Column) TableModelField {
Name: dbidentifier.ToGoIdentifier(columnMetaData.Name), Name: dbidentifier.ToGoIdentifier(columnMetaData.Name),
Type: getType(columnMetaData), Type: getType(columnMetaData),
Tags: tags, Tags: tags,
Skip: false,
} }
} }

View file

@ -217,6 +217,17 @@ func processTableSQLBuilder(fileTypes, dirPath string,
return insertedRowAlias(dialect) return insertedRowAlias(dialect)
}, },
"golangComment": formatGolangComment, "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 { if err != nil {
return fmt.Errorf("failed to generate table sql builder type %s: %w", tableSQLBuilder.TypeName, err) return fmt.Errorf("failed to generate table sql builder type %s: %w", tableSQLBuilder.TypeName, err)

View file

@ -131,6 +131,7 @@ func (tb TableSQLBuilder) UseColumn(columnsFunc func(column metadata.Column) Tab
// TableSQLBuilderColumn is template for table sql builder column // TableSQLBuilderColumn is template for table sql builder column
type TableSQLBuilderColumn struct { type TableSQLBuilderColumn struct {
Skip bool
Name string Name string
Type string Type string
} }

View file

@ -479,6 +479,55 @@ func TestGeneratorTemplate_SQLBuilder_ChangeColumnTypes(t *testing.T) {
require.Contains(t, actor, "ActorID postgres.ColumnString") 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) { func TestRenameEnumValueName(t *testing.T) {
err := postgres.Generate( err := postgres.Generate(
tempTestDir, tempTestDir,