Make it possible to add fully custom columns to table definition

This adds a few different fields to the column SQL builder that were
once either calculated or hard-coded:
 * Import - so you can import the column from anywhere
 * Type - fully, rather than partially, modifiable to allow any naming
   convention
 * TypeFactory - fully, rather than partially defined

I also alphabetized some things because the OCD compels me.
This commit is contained in:
Eli Ribble 2026-05-06 16:26:38 +00:00
parent b30d7c524d
commit 2053415c76
No known key found for this signature in database
4 changed files with 70 additions and 42 deletions

View file

@ -8,6 +8,7 @@ import (
"unicode"
"github.com/go-jet/jet/v2/generator/metadata"
"github.com/go-jet/jet/v2/internal/jet"
"github.com/go-jet/jet/v2/internal/utils/dbidentifier"
)
@ -62,13 +63,14 @@ func (sb SQLBuilder) ShouldSkip(skip bool) SQLBuilder {
// TableSQLBuilder is template for generating table SQLBuilder files
type TableSQLBuilder struct {
Skip bool
Path string
FileName string
InstanceName string
TypeName string
Column func(dialect jet.Dialect, columnMetaData metadata.Column) TableSQLBuilderColumn
DefaultAlias string
Column func(columnMetaData metadata.Column) TableSQLBuilderColumn
Imports []string
InstanceName string
FileName string
Path string
Skip bool
TypeName string
}
// ViewSQLBuilder is template for generating view SQLBuilder files
@ -79,12 +81,13 @@ func DefaultTableSQLBuilder(tableMetaData metadata.Table) TableSQLBuilder {
tableNameGoIdentifier := dbidentifier.ToGoIdentifier(tableMetaData.Name)
return TableSQLBuilder{
Path: "/table",
FileName: dbidentifier.ToGoFileName(tableMetaData.Name),
InstanceName: tableNameGoIdentifier,
TypeName: tableNameGoIdentifier + "Table",
DefaultAlias: "",
Column: DefaultTableSQLBuilderColumn,
DefaultAlias: "",
FileName: dbidentifier.ToGoFileName(tableMetaData.Name),
Imports: []string{},
InstanceName: tableNameGoIdentifier,
Path: "/table",
TypeName: tableNameGoIdentifier + "Table",
}
}
@ -131,16 +134,19 @@ func (tb TableSQLBuilder) UseDefaultAlias(defaultAlias string) TableSQLBuilder {
}
// UseColumn returns new TableSQLBuilder with new column template function set
func (tb TableSQLBuilder) UseColumn(columnsFunc func(column metadata.Column) TableSQLBuilderColumn) TableSQLBuilder {
func (tb TableSQLBuilder) UseColumn(columnsFunc func(dialect jet.Dialect, column metadata.Column) TableSQLBuilderColumn) TableSQLBuilder {
tb.Column = columnsFunc
return tb
}
// TableSQLBuilderColumn is template for table sql builder column
type TableSQLBuilderColumn struct {
Skip bool
Import string
Name string
PackageName string
Skip bool
Type string
TypeFactory string
}
var reservedKeywords = []string{"TableName", "Table", "SchemaName", "Alias", "AllColumns", "MutableColumns", "DefaultColumns"}
@ -153,10 +159,14 @@ func renameIfReserved(name string) string {
}
// DefaultTableSQLBuilderColumn returns default implementation of TableSQLBuilderColumn
func DefaultTableSQLBuilderColumn(columnMetaData metadata.Column) TableSQLBuilderColumn {
func DefaultTableSQLBuilderColumn(dialect jet.Dialect, columnMetaData metadata.Column) TableSQLBuilderColumn {
package_name := dialect.PackageName()
return TableSQLBuilderColumn{
Import: "github.com/go-jet/jet/v2/" + package_name,
Name: renameIfReserved(dbidentifier.ToGoIdentifier(columnMetaData.Name)),
Type: getSqlBuilderColumnType(columnMetaData),
PackageName: package_name,
Type: "Column" + getSqlBuilderColumnType(columnMetaData),
TypeFactory: getSqlBuilderColumnType(columnMetaData)+"Column",
}
}