Skip to main content
Drupal API
User account menu
  • Log in

Breadcrumb

  1. Drupal Core 11.1.x
  2. Select.php

class Select

Same name in this branch
  1. 11.1.x core/lib/Drupal/Core/Render/Element/Select.php \Drupal\Core\Render\Element\Select
  2. 11.1.x core/lib/Drupal/Core/Database/Query/Select.php \Drupal\Core\Database\Query\Select
  3. 11.1.x core/modules/sqlite/src/Driver/Database/sqlite/Select.php \Drupal\sqlite\Driver\Database\sqlite\Select
  4. 11.1.x core/modules/mysql/src/Driver/Database/mysql/Select.php \Drupal\mysql\Driver\Database\mysql\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

Expanded class hierarchy of Select

Related topics

Database abstraction layer
Allow the use of different database servers using the same code base.
57 string references to 'Select'
BooleanOperator::valueForm in core/modules/views/src/Plugin/views/filter/BooleanOperator.php
Options form subform for setting options.
BrowserKitDriver::getValue in vendor/behat/mink-browserkit-driver/src/BrowserKitDriver.php
Returns element's value by its XPath query.
BrowserKitDriver::isChecked in vendor/behat/mink-browserkit-driver/src/BrowserKitDriver.php
Checks whether checkbox or radio button located by its XPath query is checked.
BrowserKitDriver::setValue in vendor/behat/mink-browserkit-driver/src/BrowserKitDriver.php
Sets element's value by its XPath query.
ChoiceFormField::buildOptionValue in vendor/symfony/dom-crawler/Field/ChoiceFormField.php
Returns option value with associated disabled flag.

... See full list

File

core/modules/pgsql/src/Driver/Database/pgsql/Select.php, line 15

Namespace

Drupal\pgsql\Driver\Database\pgsql
View source
class Select extends QuerySelect {
    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 Query::__construct
Select::__toString public function Implements PHP magic __toString method to convert the query to a string. Overrides Query::__toString
RSS feed
Powered by Drupal