WIP: Refactor
This commit is contained in:
@@ -0,0 +1,82 @@
|
||||
package schema
|
||||
|
||||
import (
|
||||
"errors"
|
||||
"reflect"
|
||||
"strings"
|
||||
)
|
||||
|
||||
type Column struct {
|
||||
Name string
|
||||
FieldName string
|
||||
Type string
|
||||
Modifiers map[string]string
|
||||
}
|
||||
|
||||
func NewColumn(name string, typ string, fieldName string, tag reflect.StructTag) Column {
|
||||
return Column{name, typ, fieldName, determineModifiers(tag)}
|
||||
}
|
||||
|
||||
func determineModifiers(tag reflect.StructTag) map[string]string {
|
||||
modifiers := make(map[string]string)
|
||||
sqlTag := tag.Get("sql")
|
||||
if sqlTag == "" {
|
||||
return modifiers
|
||||
}
|
||||
|
||||
rawModifiers := strings.SplitSeq(sqlTag, ";")
|
||||
for rawModifier := range rawModifiers {
|
||||
if strings.Contains(rawModifier, "=") {
|
||||
keyValue := strings.Split(rawModifier, "=")
|
||||
modifiers[keyValue[0]] = keyValue[1]
|
||||
} else {
|
||||
modifiers[rawModifier] = ""
|
||||
}
|
||||
}
|
||||
return modifiers
|
||||
}
|
||||
|
||||
func (c *Column) GetDDL() (string, error) {
|
||||
var ddlBuilder strings.Builder
|
||||
|
||||
ddlBuilder.WriteString(c.Name + " " + c.Type)
|
||||
|
||||
inlineMods := c.inlineModifiers()
|
||||
for _, mod := range inlineMods {
|
||||
ddlBuilder.WriteString(" " + mod)
|
||||
}
|
||||
|
||||
return ddlBuilder.String(), nil
|
||||
}
|
||||
|
||||
func (c *Column) inlineModifiers() []string {
|
||||
var mods []string
|
||||
for k, _ := range c.Modifiers {
|
||||
switch k {
|
||||
case "nn":
|
||||
mods = append(mods, "NOT NULL")
|
||||
}
|
||||
}
|
||||
return mods
|
||||
}
|
||||
|
||||
func (c Column) GetSelectDML() (string, error) {
|
||||
return c.Name, nil
|
||||
}
|
||||
|
||||
func (c Column) GetInsertDML() (string, error) {
|
||||
return c.Name, nil
|
||||
}
|
||||
|
||||
func (c Column) GetUpdateDML() (string, error) {
|
||||
return c.Name + " = ?", nil
|
||||
}
|
||||
|
||||
func (Column) GetDeleteDML() (string, error) {
|
||||
return "", errors.New("No delete DML for columns")
|
||||
}
|
||||
|
||||
func (c *Column) IsPK() bool {
|
||||
_, ok := c.Modifiers["pk"]
|
||||
return ok
|
||||
}
|
||||
Reference in New Issue
Block a user