SelectGetRangeTest.php

Same filename and directory in other branches
  1. 11.x core/tests/Drupal/KernelTests/Core/Database/SelectGetRangeTest.php

Namespace

Drupal\KernelTests\Core\Database

File

core/tests/Drupal/KernelTests/Core/Database/SelectGetRangeTest.php

View source
<?php

declare (strict_types=1);
namespace Drupal\KernelTests\Core\Database;

use Drupal\Core\Database\Query\Select;
use Drupal\Core\Database\Query\SelectExtender;
use PHPUnit\Framework\Attributes\CoversClass;
use PHPUnit\Framework\Attributes\Group;
use PHPUnit\Framework\Attributes\RunTestsInSeparateProcesses;

/**
 * Tests SelectInterface::getRange().
 */
final class SelectGetRangeTest extends DatabaseTestBase {
  
  /**
   * Ensures getRange() returns NULL by default.
   */
  public function testGetRangeReferenceOnSelect() : void {
    $raw = $this->connection
      ->select('test', 't')
      ->fields('t', [
      'name',
    ])
      ->orderBy('name')
      ->execute()
      ->fetchCol();
    $query = $this->connection
      ->select('test', 't')
      ->fields('t', [
      'name',
    ])
      ->orderBy('name');
    $range =& $query->getRange();
    $this->assertNull($range);
    $query->range(1, 3);
    $this->assertSame([
      'start' => 1,
      'length' => 3,
    ], $query->getRange());
    $range2 =& $query->getRange();
    $range2['start'] = 2;
    $this->assertEquals(2, $range['start']);
    $names = $query->execute()
      ->fetchCol();
    $expected = array_slice($raw, 2, 3);
    $this->assertSame($expected, $names);
  }
  
  /**
   * Ensures SelectExtender::getRange() delegates and returns a live reference.
   */
  public function testGetRangeReferenceOnSelectExtender() : void {
    $raw = $this->connection
      ->select('test', 't')
      ->fields('t', [
      'name',
    ])
      ->orderBy('name')
      ->execute()
      ->fetchCol();
    $base_query = $this->connection
      ->select('test', 't')
      ->fields('t', [
      'name',
    ])
      ->orderBy('name');
    /** @var \Drupal\Core\Database\Query\SelectExtender $extender */
    $extender = $base_query->extend(SelectExtender::class);
    $range =& $extender->getRange();
    $this->assertNull($range);
    $base_query->range(2, 2);
    $this->assertSame([
      'start' => 2,
      'length' => 2,
    ], $extender->getRange());
    $range2 =& $extender->getRange();
    $range2['length'] = 1;
    $this->assertEquals(1, $range['length']);
    $names = $extender->execute()
      ->fetchCol();
    $expected = array_slice($raw, 2, 1);
    $this->assertSame($expected, $names);
  }

}

Classes

Title Deprecated Summary
SelectGetRangeTest Tests SelectInterface::getRange().

Buggy or inaccurate documentation? Please file an issue. Need support? Need help programming? Connect with the Drupal community.