/
githubmirror
/
framework
Обзор
Документация
Войти
/
githubmirror
/
framework
Код
Запросы
0
Пакеты
0
Релизы
0
Аналитика
Безопасность
13.x
src/Illuminate/Database/Connectors/SQLiteConnector.php
150 строк
4 KB
Mior Muhammad Zaki
Supports using URI-based connection for SQLite using `file:` prefix (#60261)
26 май 2026, 02:05
Не верифицирован
26 май 2026, 02:05
566f2c4
Код
Авторство
О чём код?
<?php namespace Illuminate\Database\Connectors; use Illuminate\Database\SQLiteDatabaseDoesNotExistException; class SQLiteConnector extends Connector implements ConnectorInterface { /** * Establish a database connection. * * @param array $config * @return \PDO */ public function connect(array $config) { $options = $this->getOptions($config); $path = $this->parseDatabasePath($config['database']); $connection = $this->createConnection("sqlite:{$path}", $config, $options); $this->configurePragmas($connection, $config); $this->configureForeignKeyConstraints($connection, $config); $this->configureBusyTimeout($connection, $config); $this->configureJournalMode($connection, $config); $this->configureSynchronous($connection, $config); return $connection; } /** * Get the absolute database path. * * @param string $path * @return string * * @throws \Illuminate\Database\SQLiteDatabaseDoesNotExistException */ protected function parseDatabasePath(string $path): string { $database = $path; // SQLite supports "in-memory" databases that only last as long as the owning // connection does. These are useful for tests or for short lifetime store // querying. In-memory databases shall be anonymous (:memory:) or named. if ($path === ':memory:' || str_contains($path, '?mode=memory') || str_contains($path, '&mode=memory') || str_starts_with($path, 'file:') ) { return $path; } $path = realpath($path) ?: (function_exists('base_path') ? realpath(base_path($path)) : false); // Here we'll verify that the SQLite database exists before going any further // as the developer probably wants to know if the database exists and this // SQLite driver will not throw any exception if it does not by default. if ($path === false) { throw new SQLiteDatabaseDoesNotExistException($database); } return $path; } /** * Set miscellaneous user-configured pragmas. * * @param \PDO $connection * @param array $config * @return void */ protected function configurePragmas($connection, array $config): void { if (! isset($config['pragmas'])) { return; } foreach ($config['pragmas'] as $pragma => $value) { $connection->prepare("pragma {$pragma} = {$value}")->execute(); } } /** * Enable or disable foreign key constraints if configured. * * @param \PDO $connection * @param array $config * @return void */ protected function configureForeignKeyConstraints($connection, array $config): void { if (! isset($config['foreign_key_constraints'])) { return; } $foreignKeys = $config['foreign_key_constraints'] ? 1 : 0; $connection->prepare("pragma foreign_keys = {$foreignKeys}")->execute(); } /** * Set the busy timeout if configured. * * @param \PDO $connection * @param array $config * @return void */ protected function configureBusyTimeout($connection, array $config): void { if (! isset($config['busy_timeout'])) { return; } $connection->prepare("pragma busy_timeout = {$config['busy_timeout']}")->execute(); } /** * Set the journal mode if configured. * * @param \PDO $connection * @param array $config * @return void */ protected function configureJournalMode($connection, array $config): void { if (! isset($config['journal_mode'])) { return; } $connection->prepare("pragma journal_mode = {$config['journal_mode']}")->execute(); } /** * Set the synchronous mode if configured. * * @param \PDO $connection * @param array $config * @return void */ protected function configureSynchronous($connection, array $config): void { if (! isset($config['synchronous'])) { return; } $connection->prepare("pragma synchronous = {$config['synchronous']}")->execute(); } }