| 95 | } |
| 96 | |
| 97 | func TestTableWithAllFields(t *testing.T) { |
| 98 | dryDB := DB.Session(&gorm.Session{DryRun: true, QueryFields: true}) |
| 99 | userQuery := "SELECT .*user.*id.*user.*created_at.*user.*updated_at.*user.*deleted_at.*user.*name.*user.*age" + |
| 100 | ".*user.*birthday.*user.*company_id.*user.*manager_id.*user.*active.* " |
| 101 | |
| 102 | r := dryDB.Table("`user`").Find(&User{}).Statement |
| 103 | if !regexp.MustCompile(userQuery + "FROM `user`").MatchString(r.Statement.SQL.String()) { |
| 104 | t.Errorf("Table with escape character, got %v", r.Statement.SQL.String()) |
| 105 | } |
| 106 | |
| 107 | r = dryDB.Table("user as u").Select("name").Find(&User{}).Statement |
| 108 | if !regexp.MustCompile("SELECT .name. FROM user as u WHERE .u.\\..deleted_at. IS NULL").MatchString(r.Statement.SQL.String()) { |
| 109 | t.Errorf("Table with escape character, got %v", r.Statement.SQL.String()) |
| 110 | } |
| 111 | |
| 112 | r = dryDB.Table("gorm.user").Select("name").Find(&User{}).Statement |
| 113 | if !regexp.MustCompile("SELECT .name. FROM .gorm.\\..user. WHERE .user.\\..deleted_at. IS NULL").MatchString(r.Statement.SQL.String()) { |
| 114 | t.Errorf("Table with escape character, got %v", r.Statement.SQL.String()) |
| 115 | } |
| 116 | |
| 117 | r = dryDB.Select("name").Find(&UserWithTable{}).Statement |
| 118 | if !regexp.MustCompile("SELECT .name. FROM .gorm.\\..user. WHERE .user.\\..deleted_at. IS NULL").MatchString(r.Statement.SQL.String()) { |
| 119 | t.Errorf("Table with escape character, got %v", r.Statement.SQL.String()) |
| 120 | } |
| 121 | |
| 122 | r = dryDB.Create(&UserWithTable{}).Statement |
| 123 | if DB.Dialector.Name() != "sqlite" { |
| 124 | if !regexp.MustCompile(`INSERT INTO .gorm.\..user. (.*name.*) VALUES (.*)`).MatchString(r.Statement.SQL.String()) { |
| 125 | t.Errorf("Table with escape character, got %v", r.Statement.SQL.String()) |
| 126 | } |
| 127 | } else { |
| 128 | if !regexp.MustCompile(`INSERT INTO .user. (.*name.*) VALUES (.*)`).MatchString(r.Statement.SQL.String()) { |
| 129 | t.Errorf("Table with escape character, got %v", r.Statement.SQL.String()) |
| 130 | } |
| 131 | } |
| 132 | |
| 133 | userQueryCharacter := "SELECT .*u.*id.*u.*created_at.*u.*updated_at.*u.*deleted_at.*u.*name.*u.*age.*u.*birthday" + |
| 134 | ".*u.*company_id.*u.*manager_id.*u.*active.* " |
| 135 | |
| 136 | r = dryDB.Table("(?) as u", DB.Model(&User{}).Select("name")).Find(&User{}).Statement |
| 137 | if !regexp.MustCompile(userQueryCharacter + "FROM \\(SELECT .name. FROM .users. WHERE .users.\\..deleted_at. IS NULL\\) as u WHERE .u.\\..deleted_at. IS NULL").MatchString(r.Statement.SQL.String()) { |
| 138 | t.Errorf("Table with escape character, got %v", r.Statement.SQL.String()) |
| 139 | } |
| 140 | |
| 141 | r = dryDB.Table("(?) as u, (?) as p", DB.Model(&User{}).Select("name"), DB.Model(&Pet{}).Select("name")).Find(&User{}).Statement |
| 142 | if !regexp.MustCompile(userQueryCharacter + "FROM \\(SELECT .name. FROM .users. WHERE .users.\\..deleted_at. IS NULL\\) as u, \\(SELECT .name. FROM .pets. WHERE .pets.\\..deleted_at. IS NULL\\) as p WHERE .u.\\..deleted_at. IS NULL").MatchString(r.Statement.SQL.String()) { |
| 143 | t.Errorf("Table with escape character, got %v", r.Statement.SQL.String()) |
| 144 | } |
| 145 | |
| 146 | r = dryDB.Where("name = ?", 1).Table("(?) as u, (?) as p", DB.Model(&User{}).Select("name").Where("name = ?", 2), DB.Model(&Pet{}).Where("name = ?", 4).Select("name")).Where("name = ?", 3).Find(&User{}).Statement |
| 147 | if !regexp.MustCompile(userQueryCharacter + "FROM \\(SELECT .name. FROM .users. WHERE name = .+ AND .users.\\..deleted_at. IS NULL\\) as u, \\(SELECT .name. FROM .pets. WHERE name = .+ AND .pets.\\..deleted_at. IS NULL\\) as p WHERE name = .+ AND name = .+ AND .u.\\..deleted_at. IS NULL").MatchString(r.Statement.SQL.String()) { |
| 148 | t.Errorf("Table with escape character, got %v", r.Statement.SQL.String()) |
| 149 | } |
| 150 | |
| 151 | AssertEqual(t, r.Statement.Vars, []interface{}{2, 4, 1, 3}) |
| 152 | } |
| 153 | |
| 154 | type UserWithTableNamer struct { |