Files
simpleorm/column.go
T
2026-05-03 19:23:27 +02:00

66 lines
1.3 KiB
Go

package simpleorm
import (
"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) ToDDL() string {
var ddlBuilder strings.Builder
ddlBuilder.WriteString(c.Name + " " + c.Type)
inlineMods := c.inlineModifiers()
for _, mod := range inlineMods {
ddlBuilder.WriteString(" " + mod)
}
return ddlBuilder.String()
}
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) IsPK() bool {
_, ok := c.Modifiers["pk"]
return ok
}