class SelectQuery_pgsql

Hierarchy

Expanded class hierarchy of SelectQuery_pgsql

Related topics

File

includes/database/pgsql/select.inc, line 13

View source
class SelectQuery_pgsql extends SelectQuery {
    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 = db_select('node', 'n');
     *   $query->join('node_revision', 'nr', 'n.vid = nr.vid');
     *   $query
     *     ->distinct()
     *     ->fields('n')
     *     ->orderBy('timestamp');
     * @endcode
     *
     * In this query, it is not possible (without relying on the schema) to know
     * whether timestamp belongs to node_revisions 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') {
        // Call parent function to order on this.
        $return = parent::orderBy($field, $direction);
        // If there is a table alias specified, split it up.
        if (strpos($field, '.') !== FALSE) {
            list($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 $return;
                }
            }
            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 $return;
                }
            }
        }
        // Also check expression aliases.
        foreach ($this->expressions as $expression) {
            if ($expression['alias'] == $field) {
                return $return;
            }
        }
        // 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 $return;
            }
        }
        // If $field contains an 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 $return;
        }
        // This is a case that can be handled automatically, add the field.
        $this->addField(NULL, $field);
        return $return;
    }

}

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::nextPlaceholder public function Gets the next placeholder value for this query object. Overrides QueryPlaceholderInterface::nextPlaceholder
Query::uniqueIdentifier public function Returns a unique identifier for this object. Overrides QueryPlaceholderInterface::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.
SelectQuery::$alterMetaData public property The query metadata for alter purposes.
SelectQuery::$alterTags public property The query tags.
SelectQuery::$distinct protected property Whether or not this query should be DISTINCT
SelectQuery::$expressions protected property The expressions to SELECT as virtual fields.
SelectQuery::$fields protected property The fields to SELECT.
SelectQuery::$forUpdate protected property The FOR UPDATE status 1
SelectQuery::$group protected property The fields by which to group.
SelectQuery::$having protected property The conditional object for the HAVING clause.
SelectQuery::$order protected property The fields by which to order this query.
SelectQuery::$prepared protected property Indicates if preExecute() has already been called.
SelectQuery::$range protected property The range limiters for this query.
SelectQuery::$tables protected property The tables against which to JOIN.
SelectQuery::$union protected property An array whose elements specify a query to UNION, and the UNION type. The
'type' key may be '', 'ALL', or 'DISTINCT' to represent a 'UNION',
'UNION ALL', or 'UNION DISTINCT'…
SelectQuery::$where protected property The conditional object for the WHERE clause.
SelectQuery::addExpression public function Adds an expression to the list of "fields" to be SELECTed. Overrides SelectQueryInterface::addExpression
SelectQuery::addField public function Adds a field to the list to be SELECTed. Overrides SelectQueryInterface::addField
SelectQuery::addJoin public function Join against another table in the database. Overrides SelectQueryInterface::addJoin
SelectQuery::addMetaData public function Adds additional metadata to the query. Overrides QueryAlterableInterface::addMetaData
SelectQuery::addTag public function Adds a tag to a query. Overrides QueryAlterableInterface::addTag
SelectQuery::arguments public function Gets a complete list of all values to insert into the prepared statement. Overrides QueryConditionInterface::arguments
SelectQuery::compile public function Compiles the saved conditions for later retrieval. Overrides QueryConditionInterface::compile
SelectQuery::compiled public function Check whether a condition has been previously compiled. Overrides QueryConditionInterface::compiled
SelectQuery::condition public function Helper function: builds the most common conditional clauses. Overrides QueryConditionInterface::condition
SelectQuery::conditions public function Gets a complete list of all conditions in this conditional clause. Overrides QueryConditionInterface::conditions
SelectQuery::countQuery public function Get the equivalent COUNT query of this query as a new query object. Overrides SelectQueryInterface::countQuery
SelectQuery::distinct public function Sets this query to be DISTINCT. Overrides SelectQueryInterface::distinct
SelectQuery::execute public function Runs the query against the database. Overrides Query::execute
SelectQuery::exists public function Sets a condition that the specified subquery returns values. Overrides QueryConditionInterface::exists
SelectQuery::extend public function Enhance this object by wrapping it in an extender object. Overrides QueryExtendableInterface::extend
SelectQuery::fields public function Add multiple fields from the same table to be SELECTed. Overrides SelectQueryInterface::fields
SelectQuery::forUpdate public function Add FOR UPDATE to the query. Overrides SelectQueryInterface::forUpdate 1
SelectQuery::getArguments public function Compiles and returns an associative array of the arguments for this prepared statement. Overrides SelectQueryInterface::getArguments
SelectQuery::getExpressions public function Returns a reference to the expressions array for this query. Overrides SelectQueryInterface::getExpressions
SelectQuery::getFields public function Returns a reference to the fields array for this query. Overrides SelectQueryInterface::getFields
SelectQuery::getGroupBy public function Returns a reference to the group-by array for this query. Overrides SelectQueryInterface::getGroupBy
SelectQuery::getMetaData public function Retrieves a given piece of metadata. Overrides QueryAlterableInterface::getMetaData
SelectQuery::getOrderBy public function Returns a reference to the order by array for this query. Overrides SelectQueryInterface::getOrderBy
SelectQuery::getTables public function Returns a reference to the tables array for this query. Overrides SelectQueryInterface::getTables
SelectQuery::getUnion public function Returns a reference to the union queries for this query. This include
queries for UNION, UNION ALL, and UNION DISTINCT.
Overrides SelectQueryInterface::getUnion
SelectQuery::groupBy public function Groups the result set by the specified field. Overrides SelectQueryInterface::groupBy
SelectQuery::hasAllTags public function Determines if a given query has all specified tags. Overrides QueryAlterableInterface::hasAllTags
SelectQuery::hasAnyTag public function Determines if a given query has any specified tag. Overrides QueryAlterableInterface::hasAnyTag
SelectQuery::hasTag public function Determines if a given query has a given tag. Overrides QueryAlterableInterface::hasTag
SelectQuery::having public function
SelectQuery::havingArguments public function
SelectQuery::havingCompile public function
SelectQuery::havingCondition public function Helper function to build most common HAVING conditional clauses. Overrides SelectQueryInterface::havingCondition
SelectQuery::havingConditions public function
SelectQuery::havingExists public function
SelectQuery::havingIsNotNull public function
SelectQuery::havingIsNull public function
SelectQuery::havingNotExists public function
SelectQuery::innerJoin public function Inner Join against another table in the database. Overrides SelectQueryInterface::innerJoin
SelectQuery::isNotNull public function Sets a condition that the specified field be NOT NULL. Overrides QueryConditionInterface::isNotNull
SelectQuery::isNull public function Sets a condition that the specified field be NULL. Overrides QueryConditionInterface::isNull
SelectQuery::isPrepared public function Indicates if preExecute() has already been called on that object. Overrides SelectQueryInterface::isPrepared
SelectQuery::join public function Default Join against another table in the database. Overrides SelectQueryInterface::join
SelectQuery::leftJoin public function Left Outer Join against another table in the database. Overrides SelectQueryInterface::leftJoin
SelectQuery::notExists public function Sets a condition that the specified subquery returns no values. Overrides QueryConditionInterface::notExists
SelectQuery::preExecute public function Generic preparation and validation for a SELECT query. Overrides SelectQueryInterface::preExecute
SelectQuery::range public function Restricts a query to a given range in the result set. Overrides SelectQueryInterface::range
SelectQuery::rightJoin public function Right Outer Join against another table in the database. Overrides SelectQueryInterface::rightJoin
SelectQuery::union public function Add another Select query to UNION to this one. Overrides SelectQueryInterface::union
SelectQuery::where public function Adds an arbitrary WHERE clause to the query. Overrides QueryConditionInterface::where
SelectQuery::__clone public function Implements the magic __clone function. Overrides Query::__clone
SelectQuery::__construct public function Constructs a Query object. Overrides Query::__construct
SelectQuery::__toString public function Implements PHP magic __toString method to convert the query to a string. Overrides Query::__toString
SelectQuery_pgsql::orderBy public function Overrides SelectQuery::orderBy(). Overrides SelectQuery::orderBy
SelectQuery_pgsql::orderRandom public function Orders the result set by a random value. Overrides SelectQuery::orderRandom

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