You are here

public function DatabaseStatementPrefetch::execute in Drupal 7

Executes a prepared statement.

Parameters

$args: An array of values with as many elements as there are bound parameters in the SQL statement being executed.

$options: An array of options for this query.

Return value

TRUE on success, or FALSE on failure.

Overrides DatabaseStatementInterface::execute

1 call to DatabaseStatementPrefetch::execute()
DatabaseStatement_sqlite::execute in includes/database/sqlite/database.inc
Executes a prepared statement.
1 method overrides DatabaseStatementPrefetch::execute()
DatabaseStatement_sqlite::execute in includes/database/sqlite/database.inc
Executes a prepared statement.

File

includes/database/prefetch.inc, line 144
Database interface code for engines that need complete control over their result sets. For example, SQLite will prefix some column names by the name of the table. We post-process the data, by renaming the column names using the same convention as…

Class

DatabaseStatementPrefetch
An implementation of DatabaseStatementInterface that prefetches all data.

Code

public function execute($args = array(), $options = array()) {
  if (isset($options['fetch'])) {
    if (is_string($options['fetch'])) {

      // Default to an object. Note: db fields will be added to the object
      // before the constructor is run. If you need to assign fields after
      // the constructor is run, see http://drupal.org/node/315092.
      $this
        ->setFetchMode(PDO::FETCH_CLASS, $options['fetch']);
    }
    else {
      $this
        ->setFetchMode($options['fetch']);
    }
  }
  $logger = $this->dbh
    ->getLogger();
  if (!empty($logger)) {
    $query_start = microtime(TRUE);
  }

  // Prepare the query.
  $statement = $this
    ->getStatement($this->queryString, $args);
  if (!$statement) {
    $this
      ->throwPDOException();
  }
  $return = $statement
    ->execute($args);
  if (!$return) {
    $this
      ->throwPDOException();
  }

  // Fetch all the data from the reply, in order to release any lock
  // as soon as possible.
  $this->rowCount = $statement
    ->rowCount();
  $this->data = $statement
    ->fetchAll(PDO::FETCH_ASSOC);

  // Destroy the statement as soon as possible. See
  // DatabaseConnection_sqlite::PDOPrepare() for explanation.
  unset($statement);
  $this->resultRowCount = count($this->data);
  if ($this->resultRowCount) {
    $this->columnNames = array_keys($this->data[0]);
  }
  else {
    $this->columnNames = array();
  }
  if (!empty($logger)) {
    $query_end = microtime(TRUE);
    $logger
      ->log($this, $args, $query_end - $query_start);
  }

  // Initialize the first row in $this->currentRow.
  $this
    ->next();
  return $return;
}