1 prefetch.inc public DatabaseStatementPrefetch::current()

File

core/includes/database/prefetch.inc, line 268
Database interface code for engines that need complete control over their result sets.

Class

DatabaseStatementPrefetch
An implementation of DatabaseStatementInterface that prefetches all data.

Code

public function current() {
  if (isset($this->currentRow)) {
    switch ($this->fetchStyle) {
      case PDO::FETCH_ASSOC:
        return $this->currentRow;
      case PDO::FETCH_BOTH:
        // PDO::FETCH_BOTH returns an array indexed by both the column name
        // and the column number.
        return $this->currentRow + array_values($this->currentRow);
      case PDO::FETCH_NUM:
        return array_values($this->currentRow);
      case PDO::FETCH_LAZY:
        // We do not do lazy as everything is fetched already. Fallback to
        // PDO::FETCH_OBJ.
      case PDO::FETCH_OBJ:
        return (object) $this->currentRow;
      case PDO::FETCH_CLASS:
        if (!isset($class_name)) {
          $class_name = $this->fetchOptions['class'];
        }
        if (count($this->fetchOptions['constructor_args'])) {
          // Verify the current db connection to avoid this code being called
          // in an inappropriate context.
          $db_connection_options = Database::getConnection()->getConnectionOptions();
          $valid_db_drivers = array('sqlite', 'oracle');
          if (!in_array($db_connection_options['driver'], $valid_db_drivers)) {
            throw new BadMethodCallException();
          }
          $reflector = new ReflectionClass($class_name);
          $result = $reflector->newInstanceArgs($this->fetchOptions['constructor_args']);
        }
        else {
          $result = new $class_name();
        }
        foreach ($this->currentRow as $k => $v) {
          $result->$k = $v;
        }
        return $result;
      case PDO::FETCH_INTO:
        foreach ($this->currentRow as $k => $v) {
          $this->fetchOptions['object']->$k = $v;
        }
        return $this->fetchOptions['object'];
      case PDO::FETCH_COLUMN:
        if (isset($this->columnNames[$this->fetchOptions['column']])) {
          return $this->currentRow[$this->columnNames[$this->fetchOptions['column']]];
        }
        else {
          return NULL;
        }
    }
  }
  return NULL;
}