Updated sql_builder_template to check if column is in a conflicted column name array and renames to {col}_ if it is a conflicting name. Added unit tests.

This commit is contained in:
johnflynn 2024-10-26 22:40:49 -04:00
parent e715b13615
commit 9f8732cd95
2 changed files with 36 additions and 1 deletions

View file

@ -5,6 +5,7 @@ import (
"github.com/go-jet/jet/v2/generator/metadata" "github.com/go-jet/jet/v2/generator/metadata"
"github.com/go-jet/jet/v2/internal/utils/dbidentifier" "github.com/go-jet/jet/v2/internal/utils/dbidentifier"
"path" "path"
"slices"
"strings" "strings"
"unicode" "unicode"
) )
@ -134,10 +135,19 @@ type TableSQLBuilderColumn struct {
Type string Type string
} }
var reservedKeywords = []string{"TableName", "Table", "SchemaName", "Alias", "AllColumns", "MutableColumns"}
func renameIfReserved(name string) string {
if slices.Contains(reservedKeywords, name) {
return name + "_"
}
return name
}
// DefaultTableSQLBuilderColumn returns default implementation of TableSQLBuilderColumn // DefaultTableSQLBuilderColumn returns default implementation of TableSQLBuilderColumn
func DefaultTableSQLBuilderColumn(columnMetaData metadata.Column) TableSQLBuilderColumn { func DefaultTableSQLBuilderColumn(columnMetaData metadata.Column) TableSQLBuilderColumn {
return TableSQLBuilderColumn{ return TableSQLBuilderColumn{
Name: dbidentifier.ToGoIdentifier(columnMetaData.Name), Name: renameIfReserved(dbidentifier.ToGoIdentifier(columnMetaData.Name)),
Type: getSqlBuilderColumnType(columnMetaData), Type: getSqlBuilderColumnType(columnMetaData),
} }
} }

View file

@ -1,6 +1,7 @@
package template package template
import ( import (
"github.com/go-jet/jet/v2/generator/metadata"
"github.com/stretchr/testify/require" "github.com/stretchr/testify/require"
"testing" "testing"
) )
@ -9,3 +10,27 @@ func TestToGoEnumValueIdentifier(t *testing.T) {
require.Equal(t, defaultEnumValueName("enum_name", "enum_value"), "EnumValue") require.Equal(t, defaultEnumValueName("enum_name", "enum_value"), "EnumValue")
require.Equal(t, defaultEnumValueName("NumEnum", "100"), "NumEnum100") require.Equal(t, defaultEnumValueName("NumEnum", "100"), "NumEnum100")
} }
func TestColumnRenameReserved(t *testing.T) {
tests := []struct {
col string
want string
}{
{col: "TableName", want: "TableName_"},
{col: "Table", want: "Table_"},
{col: "SchemaName", want: "SchemaName_"},
{col: "Alias", want: "Alias_"},
{col: "AllColumns", want: "AllColumns_"},
{col: "MutableColumns", want: "MutableColumns_"},
{col: "OtherColumn", want: "OtherColumn"},
}
for _, tt := range tests {
t.Run(tt.col, func(t *testing.T) {
builder := DefaultTableSQLBuilderColumn(metadata.Column{
Name: tt.col,
})
require.Equal(t, builder.Name, tt.want)
})
}
}