| 1313 | } |
| 1314 | |
| 1315 | func (s *AdapterTests) TestNonTrivialSubqueries() { |
| 1316 | sess := s.Session() |
| 1317 | |
| 1318 | // Creating test data |
| 1319 | artist := sess.Collection("artist") |
| 1320 | |
| 1321 | artistNames := []string{"Ozzie", "Flea", "Slash", "Chrono"} |
| 1322 | for _, artistName := range artistNames { |
| 1323 | _, err := artist.Insert(map[string]string{ |
| 1324 | "name": artistName, |
| 1325 | }) |
| 1326 | s.NoError(err) |
| 1327 | } |
| 1328 | |
| 1329 | { |
| 1330 | q, err := sess.SQL().Query(`WITH test AS (?) ?`, |
| 1331 | sess.SQL().Select("id AS foo").From("artist"), |
| 1332 | sess.SQL().Select("foo").From("test").Where("foo > ?", 0), |
| 1333 | ) |
| 1334 | |
| 1335 | s.NoError(err) |
| 1336 | s.NotNil(q) |
| 1337 | |
| 1338 | s.True(q.Next()) |
| 1339 | |
| 1340 | var number int |
| 1341 | s.NoError(q.Scan(&number)) |
| 1342 | |
| 1343 | s.Equal(1, number) |
| 1344 | s.NoError(q.Close()) |
| 1345 | } |
| 1346 | |
| 1347 | { |
| 1348 | builder := sess.SQL() |
| 1349 | row, err := builder.QueryRow(`WITH test AS (?) ?`, |
| 1350 | builder.Select("id AS foo").From("artist"), |
| 1351 | builder.Select("foo").From("test").Where("foo > ?", 0), |
| 1352 | ) |
| 1353 | |
| 1354 | s.NoError(err) |
| 1355 | s.NotNil(row) |
| 1356 | |
| 1357 | var number int |
| 1358 | s.NoError(row.Scan(&number)) |
| 1359 | |
| 1360 | s.Equal(1, number) |
| 1361 | } |
| 1362 | |
| 1363 | { |
| 1364 | res, err := sess.SQL().Exec( |
| 1365 | `UPDATE artist a1 SET id = ?`, |
| 1366 | sess.SQL().Select(db.Raw("id + 5")). |
| 1367 | From("artist a2"). |
| 1368 | Where("a2.id = a1.id"), |
| 1369 | ) |
| 1370 | |
| 1371 | s.NoError(err) |
| 1372 | s.NotNil(res) |