| 521 | } |
| 522 | |
| 523 | func TestCreateFromSubQuery(t *testing.T) { |
| 524 | user := User{Name: "jinzhu"} |
| 525 | |
| 526 | DB.Create(&user) |
| 527 | |
| 528 | subQuery := DB.Table("users").Where("name=?", user.Name).Select("id") |
| 529 | |
| 530 | result := DB.Session(&gorm.Session{DryRun: true}).Model(&Pet{}).Create([]map[string]interface{}{ |
| 531 | { |
| 532 | "name": "cat", |
| 533 | "user_id": gorm.Expr("(?)", DB.Table("(?) as tmp", subQuery).Select("@uid:=id")), |
| 534 | }, |
| 535 | { |
| 536 | "name": "dog", |
| 537 | "user_id": gorm.Expr("@uid"), |
| 538 | }, |
| 539 | }) |
| 540 | |
| 541 | if !regexp.MustCompile(`INSERT INTO .pets. \(.name.,.user_id.\) .*VALUES \(.+,\(SELECT @uid:=id FROM \(SELECT id FROM .users. WHERE name=.+\) as tmp\)\),\(.+,@uid\)`).MatchString(result.Statement.SQL.String()) { |
| 542 | t.Errorf("invalid insert SQL, got %v", result.Statement.SQL.String()) |
| 543 | } |
| 544 | } |
| 545 | |
| 546 | func TestCreateNilPointer(t *testing.T) { |
| 547 | var user *User |