| 444 | } |
| 445 | |
| 446 | func TestTableConstraintSQL(t *testing.T) { |
| 447 | // Via CreateTableStatement |
| 448 | stmt := &CreateTableStatement{ |
| 449 | Name: "t", |
| 450 | Columns: []ColumnDef{{Name: "id", Type: "INT"}}, |
| 451 | Constraints: []TableConstraint{ |
| 452 | {Name: "pk", Type: "PRIMARY KEY", Columns: []string{"id"}}, |
| 453 | {Type: "UNIQUE", Columns: []string{"email"}}, |
| 454 | {Type: "FOREIGN KEY", Columns: []string{"user_id"}, References: &ReferenceDefinition{Table: "users", Columns: []string{"id"}, OnDelete: "CASCADE", OnUpdate: "SET NULL"}}, |
| 455 | {Type: "CHECK", Check: &BinaryExpression{Left: &Identifier{Name: "age"}, Operator: ">", Right: &LiteralValue{Value: "0"}}}, |
| 456 | }, |
| 457 | } |
| 458 | sql := stmt.SQL() |
| 459 | for _, want := range []string{"CONSTRAINT pk PRIMARY KEY", "UNIQUE (email)", "FOREIGN KEY", "REFERENCES users (id)", "ON DELETE CASCADE", "ON UPDATE SET NULL", "CHECK"} { |
| 460 | if !strings.Contains(sql, want) { |
| 461 | t.Errorf("missing %q in: %s", want, sql) |
| 462 | } |
| 463 | } |
| 464 | } |
| 465 | |
| 466 | func TestColumnConstraintSQL_AllTypes(t *testing.T) { |
| 467 | stmt := &CreateTableStatement{ |