88 lines
1.6 KiB
Go
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")
|
|
}
|