ede97dea5b
- Make postgres name its enums - Add way to filter columns by whether or not they're an enum - Split parsing of enums into name & values - Add strmangle check functions: IsEnumNormal, ShouldTitleCaseEnum - Add new strmangle enum functions to template test - Implement a set type called "once" inside the templates so that we can ensure certain things only generate one time via some unique name.
73 lines
1.5 KiB
Go
73 lines
1.5 KiB
Go
package bdb
|
|
|
|
import (
|
|
"strings"
|
|
|
|
"github.com/vattle/sqlboiler/strmangle"
|
|
)
|
|
|
|
// Column holds information about a database column.
|
|
// Types are Go types, converted by TranslateColumnType.
|
|
type Column struct {
|
|
Name string
|
|
Type string
|
|
DBType string
|
|
Default string
|
|
Nullable bool
|
|
Unique bool
|
|
Validated bool
|
|
|
|
// Postgres only extension bits
|
|
// ArrType is the underlying data type of the Postgres
|
|
// ARRAY type. See here:
|
|
// https://www.postgresql.org/docs/9.1/static/infoschema-element-types.html
|
|
ArrType *string
|
|
UDTName string
|
|
}
|
|
|
|
// ColumnNames of the columns.
|
|
func ColumnNames(cols []Column) []string {
|
|
names := make([]string, len(cols))
|
|
for i, c := range cols {
|
|
names[i] = c.Name
|
|
}
|
|
|
|
return names
|
|
}
|
|
|
|
// ColumnDBTypes of the columns.
|
|
func ColumnDBTypes(cols []Column) map[string]string {
|
|
types := map[string]string{}
|
|
|
|
for _, c := range cols {
|
|
types[strmangle.TitleCase(c.Name)] = c.DBType
|
|
}
|
|
|
|
return types
|
|
}
|
|
|
|
// FilterColumnsByDefault generates the list of columns that have default values
|
|
func FilterColumnsByDefault(defaults bool, columns []Column) []Column {
|
|
var cols []Column
|
|
|
|
for _, c := range columns {
|
|
if (defaults && len(c.Default) != 0) || (!defaults && len(c.Default) == 0) {
|
|
cols = append(cols, c)
|
|
}
|
|
}
|
|
|
|
return cols
|
|
}
|
|
|
|
// FilterColumnsByEnum generates the list of columns that are enum values.
|
|
func FilterColumnsByEnum(columns []Column) []Column {
|
|
var cols []Column
|
|
|
|
for _, c := range columns {
|
|
if strings.HasPrefix(c.DBType, "enum") {
|
|
cols = append(cols, c)
|
|
}
|
|
}
|
|
|
|
return cols
|
|
}
|