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") }