class Select
Same name in this branch
- 10 core/modules/sqlite/src/Driver/Database/sqlite/Select.php \Drupal\sqlite\Driver\Database\sqlite\Select
- 10 core/modules/mysql/src/Driver/Database/mysql/Select.php \Drupal\mysql\Driver\Database\mysql\Select
- 10 core/tests/Drupal/Tests/Core/Database/Stub/Select.php \Drupal\Tests\Core\Database\Stub\Select
- 10 core/tests/fixtures/database_drivers/module/core_fake/src/Driver/Database/CoreFakeWithAllCustomClasses/Select.php \Drupal\core_fake\Driver\Database\CoreFakeWithAllCustomClasses\Select
- 10 core/lib/Drupal/Core/Render/Element/Select.php \Drupal\Core\Render\Element\Select
- 10 core/lib/Drupal/Core/Database/Driver/sqlite/Select.php \Drupal\Core\Database\Driver\sqlite\Select
- 10 core/lib/Drupal/Core/Database/Driver/pgsql/Select.php \Drupal\Core\Database\Driver\pgsql\Select
- 10 core/lib/Drupal/Core/Database/Query/Select.php \Drupal\Core\Database\Query\Select
Same name in other branches
- 9 core/modules/sqlite/src/Driver/Database/sqlite/Select.php \Drupal\sqlite\Driver\Database\sqlite\Select
- 9 core/modules/mysql/src/Driver/Database/mysql/Select.php \Drupal\mysql\Driver\Database\mysql\Select
- 9 core/modules/system/tests/modules/driver_test/src/Driver/Database/DrivertestMysql/Select.php \Drupal\driver_test\Driver\Database\DrivertestMysql\Select
- 9 core/modules/system/tests/modules/driver_test/src/Driver/Database/DrivertestMysqlDeprecatedVersion/Select.php \Drupal\driver_test\Driver\Database\DrivertestMysqlDeprecatedVersion\Select
- 9 core/modules/system/tests/modules/driver_test/src/Driver/Database/DrivertestPgsql/Select.php \Drupal\driver_test\Driver\Database\DrivertestPgsql\Select
- 9 core/modules/pgsql/src/Driver/Database/pgsql/Select.php \Drupal\pgsql\Driver\Database\pgsql\Select
- 9 core/tests/Drupal/Tests/Core/Database/Stub/Select.php \Drupal\Tests\Core\Database\Stub\Select
- 9 core/tests/fixtures/database_drivers/module/corefake/src/Driver/Database/corefakeWithAllCustomClasses/Select.php \Drupal\corefake\Driver\Database\corefakeWithAllCustomClasses\Select
- 9 core/lib/Drupal/Core/Render/Element/Select.php \Drupal\Core\Render\Element\Select
- 9 core/lib/Drupal/Core/Database/Driver/sqlite/Select.php \Drupal\Core\Database\Driver\sqlite\Select
- 9 core/lib/Drupal/Core/Database/Driver/pgsql/Select.php \Drupal\Core\Database\Driver\pgsql\Select
- 9 core/lib/Drupal/Core/Database/Query/Select.php \Drupal\Core\Database\Query\Select
- 8.9.x core/modules/system/tests/modules/driver_test/src/Driver/Database/DrivertestMysql/Select.php \Drupal\driver_test\Driver\Database\DrivertestMysql\Select
- 8.9.x core/modules/system/tests/modules/driver_test/src/Driver/Database/DrivertestPgsql/Select.php \Drupal\driver_test\Driver\Database\DrivertestPgsql\Select
- 8.9.x core/tests/Drupal/Tests/Core/Database/Stub/Select.php \Drupal\Tests\Core\Database\Stub\Select
- 8.9.x core/lib/Drupal/Core/Render/Element/Select.php \Drupal\Core\Render\Element\Select
- 8.9.x core/lib/Drupal/Core/Database/Driver/sqlite/Select.php \Drupal\Core\Database\Driver\sqlite\Select
- 8.9.x core/lib/Drupal/Core/Database/Driver/mysql/Select.php \Drupal\Core\Database\Driver\mysql\Select
- 8.9.x core/lib/Drupal/Core/Database/Driver/pgsql/Select.php \Drupal\Core\Database\Driver\pgsql\Select
- 8.9.x core/lib/Drupal/Core/Database/Query/Select.php \Drupal\Core\Database\Query\Select
- 11.x core/modules/sqlite/src/Driver/Database/sqlite/Select.php \Drupal\sqlite\Driver\Database\sqlite\Select
- 11.x core/modules/mysql/src/Driver/Database/mysql/Select.php \Drupal\mysql\Driver\Database\mysql\Select
- 11.x core/modules/pgsql/src/Driver/Database/pgsql/Select.php \Drupal\pgsql\Driver\Database\pgsql\Select
- 11.x core/tests/Drupal/Tests/Core/Database/Stub/Select.php \Drupal\Tests\Core\Database\Stub\Select
- 11.x core/tests/fixtures/database_drivers/module/core_fake/src/Driver/Database/CoreFakeWithAllCustomClasses/Select.php \Drupal\core_fake\Driver\Database\CoreFakeWithAllCustomClasses\Select
- 11.x core/lib/Drupal/Core/Render/Element/Select.php \Drupal\Core\Render\Element\Select
- 11.x core/lib/Drupal/Core/Database/Query/Select.php \Drupal\Core\Database\Query\Select
PostgreSQL implementation of \Drupal\Core\Database\Query\Select.
Hierarchy
- class \Drupal\Core\Database\Query\Query implements \Drupal\Core\Database\Query\PlaceholderInterface
- class \Drupal\Core\Database\Query\Select extends \Drupal\Core\Database\Query\Query implements \Drupal\Core\Database\Query\SelectInterface uses \Drupal\Core\Database\Query\QueryConditionTrait
- class \Drupal\pgsql\Driver\Database\pgsql\Select extends \Drupal\Core\Database\Query\Select
- class \Drupal\Core\Database\Query\Select extends \Drupal\Core\Database\Query\Query implements \Drupal\Core\Database\Query\SelectInterface uses \Drupal\Core\Database\Query\QueryConditionTrait
Expanded class hierarchy of Select
Related topics
1 file declares its use of Select
- Select.php in core/
lib/ Drupal/ Core/ Database/ Driver/ pgsql/ Select.php
129 string references to 'Select'
- AjaxFormPageCacheTest::testSimpleAJAXFormValue in core/
tests/ Drupal/ FunctionalJavascriptTests/ Ajax/ AjaxFormPageCacheTest.php - Create a simple form, then submit the form via AJAX to change to it.
- BooleanOperator::valueForm in core/
modules/ views/ src/ Plugin/ views/ filter/ BooleanOperator.php - Options form subform for setting options.
- Callbacks::selectCallback in core/
modules/ system/ tests/ modules/ ajax_forms_test/ src/ Callbacks.php - Ajax callback triggered by select.
- ckeditor5_form_filter_format_form_alter in core/
modules/ ckeditor5/ ckeditor5.module - Implements hook_form_FORM_ID_alter().
- Connection::getDriverClass in core/
lib/ Drupal/ Core/ Database/ Connection.php - Gets the driver-specific override class if any for the specified class.
File
-
core/
modules/ pgsql/ src/ Driver/ Database/ pgsql/ Select.php, line 15
Namespace
Drupal\pgsql\Driver\Database\pgsqlView source
class Select extends QuerySelect {
/**
* {@inheritdoc}
*/
public function __construct(Connection $connection, $table, $alias = NULL, array $options = []) {
// @todo Remove the __construct in Drupal 11.
// @see https://www.drupal.org/project/drupal/issues/3256524
parent::__construct($connection, $table, $alias, $options);
unset($this->queryOptions['return']);
}
public function orderRandom() {
$alias = $this->addExpression('RANDOM()', 'random_field');
$this->orderBy($alias);
return $this;
}
/**
* Overrides SelectQuery::orderBy().
*
* PostgreSQL adheres strictly to the SQL-92 standard and requires that when
* using DISTINCT or GROUP BY conditions, fields and expressions that are
* ordered on also need to be selected. This is a best effort implementation
* to handle the cases that can be automated by adding the field if it is not
* yet selected.
*
* @code
* $query = \Drupal::database()->select('example', 'e');
* $query->join('example_revision', 'er', '[e].[vid] = [er].[vid]');
* $query
* ->distinct()
* ->fields('e')
* ->orderBy('timestamp');
* @endcode
*
* In this query, it is not possible (without relying on the schema) to know
* whether timestamp belongs to example_revision and needs to be added or
* belongs to node and is already selected. Queries like this will need to be
* corrected in the original query by adding an explicit call to
* SelectQuery::addField() or SelectQuery::fields().
*
* Since this has a small performance impact, both by the additional
* processing in this function and in the database that needs to return the
* additional fields, this is done as an override instead of implementing it
* directly in SelectQuery::orderBy().
*/
public function orderBy($field, $direction = 'ASC') {
// Only allow ASC and DESC, default to ASC.
// Emulate MySQL default behavior to sort NULL values first for ascending,
// and last for descending.
// @see http://www.postgresql.org/docs/9.3/static/queries-order.html
$direction = strtoupper($direction) == 'DESC' ? 'DESC NULLS LAST' : 'ASC NULLS FIRST';
$this->order[$field] = $direction;
if ($this->hasTag('entity_query')) {
return $this;
}
// If there is a table alias specified, split it up.
if (str_contains($field, '.')) {
[
$table,
$table_field,
] = explode('.', $field);
}
// Figure out if the field has already been added.
foreach ($this->fields as $existing_field) {
if (!empty($table)) {
// If table alias is given, check if field and table exists.
if ($existing_field['table'] == $table && $existing_field['field'] == $table_field) {
return $this;
}
}
else {
// If there is no table, simply check if the field exists as a field or
// an aliased field.
if ($existing_field['alias'] == $field) {
return $this;
}
}
}
// Also check expression aliases.
foreach ($this->expressions as $expression) {
if ($expression['alias'] == $this->connection
->escapeAlias($field)) {
return $this;
}
}
// If a table loads all fields, it can not be added again. It would
// result in an ambiguous alias error because that field would be loaded
// twice: Once through table_alias.* and once directly. If the field
// actually belongs to a different table, it must be added manually.
foreach ($this->tables as $table) {
if (!empty($table['all_fields'])) {
return $this;
}
}
// If $field contains characters which are not allowed in a field name
// it is considered an expression, these can't be handled automatically
// either.
if ($this->connection
->escapeField($field) != $field) {
return $this;
}
// This is a case that can be handled automatically, add the field.
$this->addField(NULL, $field);
return $this;
}
/**
* {@inheritdoc}
*/
public function addExpression($expression, $alias = NULL, $arguments = []) {
if (empty($alias)) {
$alias = 'expression';
}
// This implements counting in the same manner as the parent method.
$alias_candidate = $alias;
$count = 2;
while (!empty($this->expressions[$alias_candidate])) {
$alias_candidate = $alias . '_' . $count++;
}
$alias = $alias_candidate;
$this->expressions[$alias] = [
'expression' => $expression,
'alias' => $this->connection
->escapeAlias($alias_candidate),
'arguments' => $arguments,
];
return $alias;
}
/**
* {@inheritdoc}
*/
public function execute() {
$this->connection
->addSavepoint();
try {
$result = parent::execute();
} catch (\Exception $e) {
$this->connection
->rollbackSavepoint();
throw $e;
}
$this->connection
->releaseSavepoint();
return $result;
}
}
Members
Title Sort descending | Modifiers | Object type | Summary | Overriden Title | Overrides |
---|---|---|---|---|---|
Query::$comments | protected | property | An array of comments that can be prepended to a query. | ||
Query::$connection | protected | property | The connection object on which to run this query. | ||
Query::$connectionKey | protected | property | The key of the connection object. | ||
Query::$connectionTarget | protected | property | The target of the connection object. | ||
Query::$nextPlaceholder | protected | property | The placeholder counter. | ||
Query::$queryOptions | protected | property | The query options to pass on to the connection object. | ||
Query::$uniqueIdentifier | protected | property | A unique identifier for this query object. | ||
Query::comment | public | function | Adds a comment to the query. | ||
Query::getComments | public | function | Returns a reference to the comments array for the query. | ||
Query::getConnection | public | function | Gets the database connection to be used for the query. | ||
Query::nextPlaceholder | public | function | Gets the next placeholder value for this query object. | Overrides PlaceholderInterface::nextPlaceholder | |
Query::uniqueIdentifier | public | function | Returns a unique identifier for this object. | Overrides PlaceholderInterface::uniqueIdentifier | |
Query::__sleep | public | function | Implements the magic __sleep function to disconnect from the database. | ||
Query::__wakeup | public | function | Implements the magic __wakeup function to reconnect to the database. | ||
QueryConditionTrait::$condition | protected | property | The condition object for this query. | ||
QueryConditionTrait::alwaysFalse | public | function | |||
QueryConditionTrait::andConditionGroup | public | function | |||
QueryConditionTrait::condition | public | function | |||
QueryConditionTrait::conditionGroupFactory | public | function | |||
QueryConditionTrait::conditions | public | function | |||
QueryConditionTrait::exists | public | function | |||
QueryConditionTrait::isNotNull | public | function | |||
QueryConditionTrait::isNull | public | function | |||
QueryConditionTrait::notExists | public | function | |||
QueryConditionTrait::orConditionGroup | public | function | |||
QueryConditionTrait::where | public | function | |||
Select::$alterMetaData | public | property | The query metadata for alter purposes. | ||
Select::$alterTags | public | property | The query tags. | ||
Select::$distinct | protected | property | Whether or not this query should be DISTINCT. | ||
Select::$expressions | protected | property | The expressions to SELECT as virtual fields. | ||
Select::$fields | protected | property | The fields to SELECT. | ||
Select::$forUpdate | protected | property | The FOR UPDATE status. | 1 | |
Select::$group | protected | property | The fields by which to group. | ||
Select::$having | protected | property | The conditional object for the HAVING clause. | ||
Select::$order | protected | property | The fields by which to order this query. | ||
Select::$prepared | protected | property | Indicates if preExecute() has already been called. | ||
Select::$range | protected | property | The range limiters for this query. | ||
Select::$tables | protected | property | The tables against which to JOIN. | ||
Select::$union | protected | property | An array whose elements specify a query to UNION, and the UNION type. | ||
Select::addExpression | public | function | Adds an expression to the list of "fields" to be SELECTed. | Overrides Select::addExpression | |
Select::addField | public | function | Adds a field to the list to be SELECTed. | Overrides SelectInterface::addField | |
Select::addJoin | public | function | Join against another table in the database. | Overrides SelectInterface::addJoin | |
Select::addMetaData | public | function | Adds additional metadata to the query. | Overrides AlterableInterface::addMetaData | |
Select::addTag | public | function | Adds a tag to a query. | Overrides AlterableInterface::addTag | |
Select::arguments | public | function | Gets a complete list of all values to insert into the prepared statement. | Overrides QueryConditionTrait::arguments | |
Select::compile | public | function | Compiles the saved conditions for later retrieval. | Overrides QueryConditionTrait::compile | |
Select::compiled | public | function | Check whether a condition has been previously compiled. | Overrides QueryConditionTrait::compiled | |
Select::countQuery | public | function | Get the equivalent COUNT query of this query as a new query object. | Overrides SelectInterface::countQuery | |
Select::distinct | public | function | Sets this query to be DISTINCT. | Overrides SelectInterface::distinct | |
Select::escapeField | public | function | Escapes a field name string. | Overrides SelectInterface::escapeField | |
Select::escapeLike | public | function | Escapes characters that work as wildcard characters in a LIKE pattern. | Overrides SelectInterface::escapeLike | |
Select::execute | public | function | Runs the query against the database. | Overrides Select::execute | |
Select::extend | public | function | Enhance this object by wrapping it in an extender object. | Overrides ExtendableInterface::extend | |
Select::fields | public | function | Add multiple fields from the same table to be SELECTed. | Overrides SelectInterface::fields | |
Select::forUpdate | public | function | Add FOR UPDATE to the query. | Overrides SelectInterface::forUpdate | 1 |
Select::getArguments | public | function | Compiles and returns an associative array of the arguments for this prepared statement. | Overrides SelectInterface::getArguments | |
Select::getExpressions | public | function | Returns a reference to the expressions array for this query. | Overrides SelectInterface::getExpressions | |
Select::getFields | public | function | Returns a reference to the fields array for this query. | Overrides SelectInterface::getFields | |
Select::getGroupBy | public | function | Returns a reference to the group-by array for this query. | Overrides SelectInterface::getGroupBy | |
Select::getMetaData | public | function | Retrieves a given piece of metadata. | Overrides AlterableInterface::getMetaData | |
Select::getOrderBy | public | function | Returns a reference to the order by array for this query. | Overrides SelectInterface::getOrderBy | |
Select::getTables | public | function | Returns a reference to the tables array for this query. | Overrides SelectInterface::getTables | |
Select::getUnion | public | function | Returns a reference to the union queries for this query. | Overrides SelectInterface::getUnion | |
Select::groupBy | public | function | Groups the result set by the specified field. | Overrides SelectInterface::groupBy | |
Select::hasAllTags | public | function | Determines if a given query has all specified tags. | Overrides AlterableInterface::hasAllTags | |
Select::hasAnyTag | public | function | Determines if a given query has any specified tag. | Overrides AlterableInterface::hasAnyTag | |
Select::hasTag | public | function | Determines if a given query has a given tag. | Overrides AlterableInterface::hasTag | |
Select::having | public | function | Adds an arbitrary HAVING clause to the query. | Overrides SelectInterface::having | |
Select::havingArguments | public | function | Gets a list of all values to insert into the HAVING clause. | Overrides SelectInterface::havingArguments | |
Select::havingCompile | public | function | Compiles the HAVING clause for later retrieval. | Overrides SelectInterface::havingCompile | |
Select::havingCondition | public | function | Helper function to build most common HAVING conditional clauses. | Overrides SelectInterface::havingCondition | |
Select::havingConditions | public | function | Gets a list of all conditions in the HAVING clause. | Overrides SelectInterface::havingConditions | |
Select::havingExists | public | function | Sets a HAVING condition that the specified subquery returns values. | Overrides SelectInterface::havingExists | |
Select::havingIsNotNull | public | function | Sets a condition in the HAVING clause that the specified field be NOT NULL. | Overrides SelectInterface::havingIsNotNull | |
Select::havingIsNull | public | function | Sets a condition in the HAVING clause that the specified field be NULL. | Overrides SelectInterface::havingIsNull | |
Select::havingNotExists | public | function | Sets a HAVING condition that the specified subquery returns no values. | Overrides SelectInterface::havingNotExists | |
Select::innerJoin | public | function | Inner Join against another table in the database. | Overrides SelectInterface::innerJoin | |
Select::isPrepared | public | function | Indicates if preExecute() has already been called on that object. | Overrides SelectInterface::isPrepared | |
Select::join | public | function | Default Join against another table in the database. | Overrides SelectInterface::join | |
Select::leftJoin | public | function | Left Outer Join against another table in the database. | Overrides SelectInterface::leftJoin | |
Select::orderBy | public | function | Overrides SelectQuery::orderBy(). | Overrides Select::orderBy | |
Select::orderRandom | public | function | Orders the result set by a random value. | Overrides Select::orderRandom | |
Select::preExecute | public | function | Generic preparation and validation for a SELECT query. | Overrides SelectInterface::preExecute | |
Select::prepareCountQuery | protected | function | Prepares a count query from the current query object. | ||
Select::range | public | function | Restricts a query to a given range in the result set. | Overrides SelectInterface::range | |
Select::union | public | function | Add another Select query to UNION to this one. | Overrides SelectInterface::union | |
Select::__clone | public | function | Implements the magic __clone function. | Overrides Query::__clone | |
Select::__construct | public | function | Constructs a Select object. | Overrides Select::__construct | |
Select::__toString | public | function | Implements PHP magic __toString method to convert the query to a string. | Overrides Query::__toString |
Buggy or inaccurate documentation? Please file an issue. Need support? Need help programming? Connect with the Drupal community.