feat: add generator skip option for table columns
Signed-off-by: Alexander Trost <galexrt@googlemail.com>
This commit is contained in:
parent
f9ed359785
commit
60ba05b6fb
5 changed files with 73 additions and 9 deletions
|
|
@ -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}}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
||||||
|
|
@ -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,
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
||||||
|
|
@ -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)
|
||||||
|
|
|
||||||
|
|
@ -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
|
||||||
}
|
}
|
||||||
|
|
|
||||||
|
|
@ -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,
|
||||||
|
|
|
||||||
Loading…
Add table
Add a link
Reference in a new issue