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:
parent
e715b13615
commit
9f8732cd95
2 changed files with 36 additions and 1 deletions
|
|
@ -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),
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
|
||||||
|
|
@ -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)
|
||||||
|
})
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
|
||||||
Loading…
Add table
Add a link
Reference in a new issue