class SelectQuery_pgsql
Hierarchy
- class \Query implements \QueryPlaceholderInterface
- class \SelectQuery implements \SelectQueryInterface extends \Query
- class \SelectQuery_pgsql extends \SelectQuery
 
 
 - class \SelectQuery implements \SelectQueryInterface extends \Query
 
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.