You are here

protected function SqliteProfilerStorage::initDb in Zircon Profile 8

Same name and namespace in other branches
  1. 8.0 vendor/symfony/http-kernel/Profiler/SqliteProfilerStorage.php \Symfony\Component\HttpKernel\Profiler\SqliteProfilerStorage::initDb()

Throws

\RuntimeException When neither of SQLite3 or PDO_SQLite extension is enabled

Overrides PdoProfilerStorage::initDb

File

vendor/symfony/http-kernel/Profiler/SqliteProfilerStorage.php, line 24

Class

SqliteProfilerStorage
SqliteProfilerStorage stores profiling information in a SQLite database.

Namespace

Symfony\Component\HttpKernel\Profiler

Code

protected function initDb() {
  if (null === $this->db || $this->db instanceof \SQLite3) {
    if (0 !== strpos($this->dsn, 'sqlite')) {
      throw new \RuntimeException(sprintf('Please check your configuration. You are trying to use Sqlite with an invalid dsn "%s". The expected format is "sqlite:/path/to/the/db/file".', $this->dsn));
    }
    if (class_exists('SQLite3')) {
      $db = new \SQLite3(substr($this->dsn, 7, strlen($this->dsn)), \SQLITE3_OPEN_READWRITE | \SQLITE3_OPEN_CREATE);
      if (method_exists($db, 'busyTimeout')) {

        // busyTimeout only exists for PHP >= 5.3.3
        $db
          ->busyTimeout(1000);
      }
    }
    elseif (class_exists('PDO') && in_array('sqlite', \PDO::getAvailableDrivers(), true)) {
      $db = new \PDO($this->dsn);
    }
    else {
      throw new \RuntimeException('You need to enable either the SQLite3 or PDO_SQLite extension for the profiler to run properly.');
    }
    $db
      ->exec('PRAGMA temp_store=MEMORY; PRAGMA journal_mode=MEMORY;');
    $db
      ->exec('CREATE TABLE IF NOT EXISTS sf_profiler_data (token STRING, data STRING, ip STRING, method STRING, url STRING, time INTEGER, parent STRING, created_at INTEGER, status_code INTEGER)');
    $db
      ->exec('CREATE INDEX IF NOT EXISTS data_created_at ON sf_profiler_data (created_at)');
    $db
      ->exec('CREATE INDEX IF NOT EXISTS data_ip ON sf_profiler_data (ip)');
    $db
      ->exec('CREATE INDEX IF NOT EXISTS data_method ON sf_profiler_data (method)');
    $db
      ->exec('CREATE INDEX IF NOT EXISTS data_url ON sf_profiler_data (url)');
    $db
      ->exec('CREATE INDEX IF NOT EXISTS data_parent ON sf_profiler_data (parent)');
    $db
      ->exec('CREATE UNIQUE INDEX IF NOT EXISTS data_token ON sf_profiler_data (token)');
    $this->db = $db;
  }
  return $this->db;
}