| 190 | } |
| 191 | |
| 192 | func TestGenericsRow(t *testing.T) { |
| 193 | ctx := context.Background() |
| 194 | |
| 195 | user := User{Name: "GenericsRow"} |
| 196 | if err := gorm.G[User](DB).Create(ctx, &user); err != nil { |
| 197 | t.Fatalf("Create failed: %v", err) |
| 198 | } |
| 199 | |
| 200 | rawSQLUserRow := gorm.G[User](DB).Raw("SELECT name FROM ? WHERE id = ?", clause.Table{Name: clause.CurrentTable}, user.ID).Row(ctx) |
| 201 | var name string |
| 202 | if err := rawSQLUserRow.Scan(&name); err != nil { |
| 203 | t.Fatalf("rawSQLUserRow scan failed: %v", err) |
| 204 | } |
| 205 | if name != user.Name { |
| 206 | t.Errorf("expected %s, got %s", user.Name, name) |
| 207 | } |
| 208 | |
| 209 | var scannedUserName string |
| 210 | selectUserRow := gorm.G[User](DB).Select("name").Where("name = ?", user.Name).Row(ctx) |
| 211 | if err := selectUserRow.Scan(&scannedUserName); err != nil { |
| 212 | t.Fatalf("selectUserRow scan failed: %v", err) |
| 213 | } |
| 214 | if name != user.Name { |
| 215 | t.Errorf("expected %s, got %s", user.Name, scannedUserName) |
| 216 | } |
| 217 | |
| 218 | user2 := User{Name: "GenericsRow2"} |
| 219 | if err := gorm.G[User](DB).Create(ctx, &user2); err != nil { |
| 220 | t.Fatalf("Create failed: %v", err) |
| 221 | } |
| 222 | rawSQLUserRows, err := gorm.G[User](DB).Raw("SELECT name FROM users WHERE id IN ?", []uint{user.ID, user2.ID}).Rows(ctx) |
| 223 | if err != nil { |
| 224 | t.Fatalf("rawSQLUserRows failed: %v", err) |
| 225 | } |
| 226 | |
| 227 | count := 0 |
| 228 | for rawSQLUserRows.Next() { |
| 229 | var name string |
| 230 | if err := rawSQLUserRows.Scan(&name); err != nil { |
| 231 | t.Fatalf("rawSQLUserRows.Scan failed: %v", err) |
| 232 | } |
| 233 | count++ |
| 234 | } |
| 235 | if count != 2 { |
| 236 | t.Errorf("expected 2 rows, got %d", count) |
| 237 | } |
| 238 | |
| 239 | selectNameUserRows, err := gorm.G[User](DB).Select("name").Where("id IN ?", []uint{user.ID, user2.ID}).Rows(ctx) |
| 240 | if err != nil { |
| 241 | t.Fatalf("selectNameUserRows failed: %v", err) |
| 242 | } |
| 243 | count = 0 |
| 244 | for selectNameUserRows.Next() { |
| 245 | var name string |
| 246 | if err := selectNameUserRows.Scan(&name); err != nil { |
| 247 | t.Fatalf("selectNameUserRows.Scan failed: %v", err) |
| 248 | } |
| 249 | count++ |