Files
simpleorm/schema/constraint.go
T
2026-06-05 15:54:47 +02:00

88 lines
1.6 KiB
Go

package schema
import (
"errors"
"strings"
"git.gdulai.com/gdulai/simpleorm/util"
)
type Constraint struct {
Name string
Type string
Columns []Column
RefTypeName string
RefColumns []Column
}
func (c *Constraint) GetDDL() (string, error) {
switch c.Type {
case "pk":
return c.getPkDDL(), nil
case "fk":
return c.getFkDDL(), nil
}
return "", errors.New("Unimplemented constraing: " + c.Type)
}
func (c *Constraint) getPkDDL() string {
var ddl strings.Builder
ddl.WriteString("CONSTRAINT ")
ddl.WriteString(c.Name)
ddl.WriteString(" PRIMARY KEY(")
for i, col := range c.Columns {
if i != 0 {
ddl.WriteString(", ")
}
ddl.WriteString(col.Name)
}
ddl.WriteString(")")
return ddl.String()
}
func (c *Constraint) getFkDDL() string {
var ddl strings.Builder
ddl.WriteString("CONSTRAINT ")
ddl.WriteString(c.Name)
ddl.WriteString(" FOREIGN KEY(")
for i, col := range c.Columns {
if i != 0 {
ddl.WriteString(", ")
}
ddl.WriteString(col.Name)
}
ddl.WriteString(") REFERENCES ")
ddl.WriteString(util.CamelToSnake(c.RefTypeName))
ddl.WriteString("(")
for i, col := range c.RefColumns {
if i != 0 {
ddl.WriteString(", ")
}
ddl.WriteString(col.Name)
}
ddl.WriteString(")")
return ddl.String()
}
func (Constraint) GetSelectDML() (string, error) {
return "", errors.New("No DML for constraints")
}
func (Constraint) GetInsertDML() (string, error) {
return "", errors.New("No DML for constraints")
}
func (Constraint) GetUpdateDML() (string, error) {
return "", errors.New("No DML for constraints")
}
func (Constraint) GetDeleteDML() (string, error) {
return "", errors.New("No DML for constraints")
}