SelectOrderedTest.php 2.3 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970717273747576777879808182838485
  1. <?php
  2. namespace Drupal\KernelTests\Core\Database;
  3. /**
  4. * Tests the Select query builder.
  5. *
  6. * @group Database
  7. */
  8. class SelectOrderedTest extends DatabaseTestBase {
  9. /**
  10. * Tests basic ORDER BY.
  11. */
  12. public function testSimpleSelectOrdered() {
  13. $query = $this->connection->select('test');
  14. $query->addField('test', 'name');
  15. $age_field = $query->addField('test', 'age', 'age');
  16. $query->orderBy($age_field);
  17. $result = $query->execute();
  18. $num_records = 0;
  19. $last_age = 0;
  20. foreach ($result as $record) {
  21. $num_records++;
  22. $this->assertTrue($record->age >= $last_age, 'Results returned in correct order.');
  23. $last_age = $record->age;
  24. }
  25. $this->assertEqual($num_records, 4, 'Returned the correct number of rows.');
  26. }
  27. /**
  28. * Tests multiple ORDER BY.
  29. */
  30. public function testSimpleSelectMultiOrdered() {
  31. $query = $this->connection->select('test');
  32. $query->addField('test', 'name');
  33. $age_field = $query->addField('test', 'age', 'age');
  34. $job_field = $query->addField('test', 'job');
  35. $query->orderBy($job_field);
  36. $query->orderBy($age_field);
  37. $result = $query->execute();
  38. $num_records = 0;
  39. $expected = [
  40. ['Ringo', 28, 'Drummer'],
  41. ['John', 25, 'Singer'],
  42. ['George', 27, 'Singer'],
  43. ['Paul', 26, 'Songwriter'],
  44. ];
  45. $results = $result->fetchAll(\PDO::FETCH_NUM);
  46. foreach ($expected as $k => $record) {
  47. $num_records++;
  48. foreach ($record as $kk => $col) {
  49. if ($expected[$k][$kk] != $results[$k][$kk]) {
  50. $this->assertTrue(FALSE, 'Results returned in correct order.');
  51. }
  52. }
  53. }
  54. $this->assertEqual($num_records, 4, 'Returned the correct number of rows.');
  55. }
  56. /**
  57. * Tests ORDER BY descending.
  58. */
  59. public function testSimpleSelectOrderedDesc() {
  60. $query = $this->connection->select('test');
  61. $query->addField('test', 'name');
  62. $age_field = $query->addField('test', 'age', 'age');
  63. $query->orderBy($age_field, 'DESC');
  64. $result = $query->execute();
  65. $num_records = 0;
  66. $last_age = 100000000;
  67. foreach ($result as $record) {
  68. $num_records++;
  69. $this->assertTrue($record->age <= $last_age, 'Results returned in correct order.');
  70. $last_age = $record->age;
  71. }
  72. $this->assertEqual($num_records, 4, 'Returned the correct number of rows.');
  73. }
  74. }