Skip to content
Snippets Groups Projects

Issue #3217699: Convert select query extenders to backend-overrideable services

Closed Issue #3217699: Convert select query extenders to backend-overrideable services
Closed mondrake requested to merge issue/drupal-3217699:3217699-mk2 into 11.x
Files
33
@@ -3,6 +3,7 @@
@@ -3,6 +3,7 @@
namespace Drupal\Core\Database\Query;
namespace Drupal\Core\Database\Query;
use Drupal\Core\Database\Connection;
use Drupal\Core\Database\Connection;
 
use Drupal\Core\Pager\PagerManagerInterface;
/**
/**
* Query extender for pager queries.
* Query extender for pager queries.
@@ -16,6 +17,25 @@
@@ -16,6 +17,25 @@
*/
*/
class PagerSelectExtender extends SelectExtender {
class PagerSelectExtender extends SelectExtender {
 
/**
 
* The pager manager service.
 
*
 
* @var \Drupal\Core\Pager\PagerManagerInterface
 
*/
 
protected $pagerManager;
 
 
/**
 
* The highest element we've autogenerated so far.
 
*
 
* @var int
 
*
 
* @deprecated in drupal:9.2.0 and is removed from drupal:10.0.0. Use
 
* \Drupal::service('pager.manager')->getMaxPagerElementId() instead.
 
*
 
* @see https://www.drupal.org/node/3194594
 
*/
 
public static $maxElement = 0;
 
/**
/**
* The number of elements per page to allow.
* The number of elements per page to allow.
*
*
@@ -44,9 +64,16 @@ class PagerSelectExtender extends SelectExtender {
@@ -44,9 +64,16 @@ class PagerSelectExtender extends SelectExtender {
* Select query object.
* Select query object.
* @param \Drupal\Core\Database\Connection $connection
* @param \Drupal\Core\Database\Connection $connection
* Database connection object.
* Database connection object.
 
* @param \Drupal\Core\Pager\PagerManagerInterface $pager_manager
 
* The pager manager service.
*/
*/
public function __construct(SelectInterface $query, Connection $connection) {
public function __construct(SelectInterface $query, Connection $connection, PagerManagerInterface $pager_manager = NULL) {
 
if (is_null($pager_manager)) {
 
@trigger_error('Calling ' . __METHOD__ . ' without the $pager_manager argument is deprecated in drupal:9.4.0 and will be required in drupal:10.0.0. Use the relevant service to instantiate extenders. See https://www.drupal.org/node/3218001', E_USER_DEPRECATED);
 
$pager_manager = \Drupal::service('pager.manager');
 
}
parent::__construct($query, $connection);
parent::__construct($query, $connection);
 
$this->pagerManager = $pager_manager;
// Add pager tag. Do this here to ensure that it is always added before
// Add pager tag. Do this here to ensure that it is always added before
// preExecute() is called.
// preExecute() is called.
@@ -74,7 +101,7 @@ public function execute() {
@@ -74,7 +101,7 @@ public function execute() {
$this->ensureElement();
$this->ensureElement();
$total_items = $this->getCountQuery()->execute()->fetchField();
$total_items = $this->getCountQuery()->execute()->fetchField();
$pager = $this->connection->getPagerManager()->createPager($total_items, $this->limit, $this->element);
$pager = $this->pagerManager->createPager($total_items, $this->limit, $this->element);
$this->range($pager->getCurrentPage() * $this->limit, $this->limit);
$this->range($pager->getCurrentPage() * $this->limit, $this->limit);
// Now that we've added our pager-based range instructions, run the query normally.
// Now that we've added our pager-based range instructions, run the query normally.
@@ -89,7 +116,7 @@ public function execute() {
@@ -89,7 +116,7 @@ public function execute() {
*/
*/
protected function ensureElement() {
protected function ensureElement() {
if (!isset($this->element)) {
if (!isset($this->element)) {
$this->element($this->connection->getPagerManager()->getMaxPagerElementId() + 1);
$this->element($this->pagerManager->getMaxPagerElementId() + 1);
}
}
}
}
@@ -157,7 +184,7 @@ public function limit($limit = 10) {
@@ -157,7 +184,7 @@ public function limit($limit = 10) {
*/
*/
public function element($element) {
public function element($element) {
$this->element = $element;
$this->element = $element;
$this->connection->getPagerManager()->reservePagerElementId($this->element);
$this->pagerManager->reservePagerElementId($this->element);
return $this;
return $this;
}
}
Loading