false, 'username' => null, 'password' => null, 'database' => ':memory:', 'encoding' => 'utf8', 'mask' => 0644, 'flags' => [], 'init' => [], ]; /** * Establishes a connection to the database server * * @return bool true on success */ public function connect() { if ($this->_connection) { return true; } $config = $this->_config; $config['flags'] += [ PDO::ATTR_PERSISTENT => $config['persistent'], PDO::ATTR_EMULATE_PREPARES => false, PDO::ATTR_ERRMODE => PDO::ERRMODE_EXCEPTION ]; $databaseExists = file_exists($config['database']); $dsn = "sqlite:{$config['database']}"; $this->_connect($dsn, $config); if (!$databaseExists && $config['database'] != ':memory:') { //@codingStandardsIgnoreStart @chmod($config['database'], $config['mask']); //@codingStandardsIgnoreEnd } if (!empty($config['init'])) { foreach ((array)$config['init'] as $command) { $this->getConnection()->exec($command); } } return true; } /** * Returns whether php is able to use this driver for connecting to database * * @return bool true if it is valid to use this driver */ public function enabled() { return in_array('sqlite', PDO::getAvailableDrivers()); } /** * Prepares a sql statement to be executed * * @param string|\Cake\Database\Query $query The query to prepare. * @return \Cake\Database\StatementInterface */ public function prepare($query) { $this->connect(); $isObject = $query instanceof Query; $statement = $this->_connection->prepare($isObject ? $query->sql() : $query); $result = new SqliteStatement(new PDOStatement($statement, $this), $this); if ($isObject && $query->isBufferedResultsEnabled() === false) { $result->bufferResults(false); } return $result; } /** * {@inheritDoc} */ public function supportsDynamicConstraints() { return false; } }