Loading core/core.services.yml +10 −0 Original line number Diff line number Diff line Loading @@ -1790,3 +1790,13 @@ services: pager.parameters: class: Drupal\Core\Pager\PagerParameters arguments: ['@request_stack'] select_extender_factory.pager: class: Drupal\Core\Database\Query\PagerSelectExtenderFactory arguments: ['@pager.manager'] tags: - { name: backend_overridable } select_extender_factory.table_sort: class: Drupal\Core\Database\Query\TableSortExtenderFactory arguments: ['@request_stack'] tags: - { name: backend_overridable } core/lib/Drupal/Core/Database/Connection.php +0 −14 Original line number Diff line number Diff line Loading @@ -11,7 +11,6 @@ use Drupal\Core\Database\Query\Truncate; use Drupal\Core\Database\Query\Update; use Drupal\Core\Database\Query\Upsert; use Drupal\Core\Pager\PagerManagerInterface; /** * Base Database API class. Loading Loading @@ -1836,19 +1835,6 @@ public function getProvider(): string { return ($first === 'Drupal' && strtolower($second) === $second) ? $second : 'core'; } /** * Get the pager manager service, if available. * * @return \Drupal\Core\Pager\PagerManagerInterface * The pager manager service, if available. * * @throws \Drupal\Core\DependencyInjection\ContainerNotInitializedException * If the container has not been initialized yet. */ public function getPagerManager(): PagerManagerInterface { return \Drupal::service('pager.manager'); } /** * Runs a simple query to validate json datatype support. * Loading core/lib/Drupal/Core/Database/Query/PagerSelectExtender.php +11 −4 Original line number Diff line number Diff line Loading @@ -3,6 +3,7 @@ namespace Drupal\Core\Database\Query; use Drupal\Core\Database\Connection; use Drupal\Core\Pager\PagerManagerInterface; /** * Query extender for pager queries. Loading Loading @@ -44,8 +45,14 @@ class PagerSelectExtender extends SelectExtender { * Select query object. * @param \Drupal\Core\Database\Connection $connection * Database connection object. * @param \Drupal\Core\Pager\PagerManagerInterface $pagerManager * The pager manager service. */ public function __construct(SelectInterface $query, Connection $connection) { public function __construct( SelectInterface $query, Connection $connection, protected PagerManagerInterface $pagerManager ) { parent::__construct($query, $connection); // Add pager tag. Do this here to ensure that it is always added before Loading Loading @@ -74,7 +81,7 @@ public function execute() { $this->ensureElement(); $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); // Now that we've added our pager-based range instructions, run the query normally. Loading @@ -89,7 +96,7 @@ public function execute() { */ protected function ensureElement() { if (!isset($this->element)) { $this->element($this->connection->getPagerManager()->getMaxPagerElementId() + 1); $this->element($this->pagerManager->getMaxPagerElementId() + 1); } } Loading Loading @@ -157,7 +164,7 @@ public function limit($limit = 10) { */ public function element($element) { $this->element = $element; $this->connection->getPagerManager()->reservePagerElementId($this->element); $this->pagerManager->reservePagerElementId($this->element); return $this; } Loading core/lib/Drupal/Core/Database/Query/PagerSelectExtenderFactory.php 0 → 100644 +39 −0 Original line number Diff line number Diff line <?php namespace Drupal\Core\Database\Query; use Drupal\Core\Database\Connection; use Drupal\Core\Pager\PagerManagerInterface; /** * Select extender factory for pager queries. */ class PagerSelectExtenderFactory { /** * Constructs a PagerSelectExtenderFactory object. * * @param \Drupal\Core\Pager\PagerManagerInterface $pagerManager * The pager manager service. */ public function __construct( protected PagerManagerInterface $pagerManager ) { } /** * Returns a query extender for pager queries. * * @param \Drupal\Core\Database\Query\SelectInterface $query * Select query object. * @param \Drupal\Core\Database\Connection $connection * Database connection object. * * @return \Drupal\Core\Database\Query\PagerSelectExtender * A query extender for pager queries. */ public function get(SelectInterface $query, Connection $connection): PagerSelectExtender { return new PagerSelectExtender($query, $connection, $this->pagerManager); } } core/lib/Drupal/Core/Database/Query/Select.php +1 −7 Original line number Diff line number Diff line Loading @@ -320,13 +320,7 @@ public function havingCompile(Connection $connection) { * {@inheritdoc} */ public function extend($extender_name) { $parts = explode('\\', $extender_name); $class = end($parts); $driver_class = $this->connection->getDriverClass($class); if ($driver_class !== $class) { return new $driver_class($this, $this->connection); } return new $extender_name($this, $this->connection); return \Drupal::service('select_extender_factory.' . $extender_name)->get($this, $this->connection); } /** Loading Loading
core/core.services.yml +10 −0 Original line number Diff line number Diff line Loading @@ -1790,3 +1790,13 @@ services: pager.parameters: class: Drupal\Core\Pager\PagerParameters arguments: ['@request_stack'] select_extender_factory.pager: class: Drupal\Core\Database\Query\PagerSelectExtenderFactory arguments: ['@pager.manager'] tags: - { name: backend_overridable } select_extender_factory.table_sort: class: Drupal\Core\Database\Query\TableSortExtenderFactory arguments: ['@request_stack'] tags: - { name: backend_overridable }
core/lib/Drupal/Core/Database/Connection.php +0 −14 Original line number Diff line number Diff line Loading @@ -11,7 +11,6 @@ use Drupal\Core\Database\Query\Truncate; use Drupal\Core\Database\Query\Update; use Drupal\Core\Database\Query\Upsert; use Drupal\Core\Pager\PagerManagerInterface; /** * Base Database API class. Loading Loading @@ -1836,19 +1835,6 @@ public function getProvider(): string { return ($first === 'Drupal' && strtolower($second) === $second) ? $second : 'core'; } /** * Get the pager manager service, if available. * * @return \Drupal\Core\Pager\PagerManagerInterface * The pager manager service, if available. * * @throws \Drupal\Core\DependencyInjection\ContainerNotInitializedException * If the container has not been initialized yet. */ public function getPagerManager(): PagerManagerInterface { return \Drupal::service('pager.manager'); } /** * Runs a simple query to validate json datatype support. * Loading
core/lib/Drupal/Core/Database/Query/PagerSelectExtender.php +11 −4 Original line number Diff line number Diff line Loading @@ -3,6 +3,7 @@ namespace Drupal\Core\Database\Query; use Drupal\Core\Database\Connection; use Drupal\Core\Pager\PagerManagerInterface; /** * Query extender for pager queries. Loading Loading @@ -44,8 +45,14 @@ class PagerSelectExtender extends SelectExtender { * Select query object. * @param \Drupal\Core\Database\Connection $connection * Database connection object. * @param \Drupal\Core\Pager\PagerManagerInterface $pagerManager * The pager manager service. */ public function __construct(SelectInterface $query, Connection $connection) { public function __construct( SelectInterface $query, Connection $connection, protected PagerManagerInterface $pagerManager ) { parent::__construct($query, $connection); // Add pager tag. Do this here to ensure that it is always added before Loading Loading @@ -74,7 +81,7 @@ public function execute() { $this->ensureElement(); $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); // Now that we've added our pager-based range instructions, run the query normally. Loading @@ -89,7 +96,7 @@ public function execute() { */ protected function ensureElement() { if (!isset($this->element)) { $this->element($this->connection->getPagerManager()->getMaxPagerElementId() + 1); $this->element($this->pagerManager->getMaxPagerElementId() + 1); } } Loading Loading @@ -157,7 +164,7 @@ public function limit($limit = 10) { */ public function element($element) { $this->element = $element; $this->connection->getPagerManager()->reservePagerElementId($this->element); $this->pagerManager->reservePagerElementId($this->element); return $this; } Loading
core/lib/Drupal/Core/Database/Query/PagerSelectExtenderFactory.php 0 → 100644 +39 −0 Original line number Diff line number Diff line <?php namespace Drupal\Core\Database\Query; use Drupal\Core\Database\Connection; use Drupal\Core\Pager\PagerManagerInterface; /** * Select extender factory for pager queries. */ class PagerSelectExtenderFactory { /** * Constructs a PagerSelectExtenderFactory object. * * @param \Drupal\Core\Pager\PagerManagerInterface $pagerManager * The pager manager service. */ public function __construct( protected PagerManagerInterface $pagerManager ) { } /** * Returns a query extender for pager queries. * * @param \Drupal\Core\Database\Query\SelectInterface $query * Select query object. * @param \Drupal\Core\Database\Connection $connection * Database connection object. * * @return \Drupal\Core\Database\Query\PagerSelectExtender * A query extender for pager queries. */ public function get(SelectInterface $query, Connection $connection): PagerSelectExtender { return new PagerSelectExtender($query, $connection, $this->pagerManager); } }
core/lib/Drupal/Core/Database/Query/Select.php +1 −7 Original line number Diff line number Diff line Loading @@ -320,13 +320,7 @@ public function havingCompile(Connection $connection) { * {@inheritdoc} */ public function extend($extender_name) { $parts = explode('\\', $extender_name); $class = end($parts); $driver_class = $this->connection->getDriverClass($class); if ($driver_class !== $class) { return new $driver_class($this, $this->connection); } return new $extender_name($this, $this->connection); return \Drupal::service('select_extender_factory.' . $extender_name)->get($this, $this->connection); } /** Loading