| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778 |
- <?php
- namespace PhpDevCommunity\PaperORM\Driver;
- use PDO;
- use PhpDevCommunity\PaperORM\PaperConnection;
- use PhpDevCommunity\PaperORM\Pdo\PaperPDO;
- use PhpDevCommunity\PaperORM\Platform\MariaDBPlatform;
- use PhpDevCommunity\PaperORM\Platform\PlatformInterface;
- use PhpDevCommunity\PaperORM\Platform\SqlitePlatform;
- use PhpDevCommunity\PaperORM\Schema\MariaDBSchema;
- use PhpDevCommunity\PaperORM\Schema\SqliteSchema;
- final class MariaDBDriver implements DriverInterface
- {
- public function connect(
- #[SensitiveParameter]
- array $params
- ): PaperPDO
- {
- $driverOptions = $params['driverOptions'] ?? [
- PDO::ATTR_ERRMODE => PDO::ERRMODE_EXCEPTION
- ];
- if (!empty($params['persistent'])) {
- $driverOptions[PDO::ATTR_PERSISTENT] = true;
- }
- return new PaperPDO(
- $this->constructPdoDsn($params),
- $params['user'] ?? '',
- $params['password'] ?? '',
- $driverOptions,
- );
- }
- /**
- * Constructs the Sqlite PDO DSN.
- *
- * @param array<string, mixed> $params
- */
- private function constructPdoDsn(array $params): string
- {
- $dsn = 'mysql:';
- if (isset($params['host']) && $params['host'] !== '') {
- $dsn .= 'host=' . $params['host'] . ';';
- }
- if (isset($params['port'])) {
- $dsn .= 'port=' . $params['port'] . ';';
- }
- if (isset($params['dbname'])) {
- $dsn .= 'dbname=' . $params['dbname'] . ';';
- }elseif (isset($params['path'])) {
- $dsn .= 'dbname=' . $params['path'] . ';';
- }
- if (isset($params['unix_socket'])) {
- $dsn .= 'unix_socket=' . $params['unix_socket'] . ';';
- }
- if (isset($params['options']['charset'])) {
- $dsn .= sprintf('charset=%s;', $params['options']['charset']);
- }
- return $dsn;
- }
- public function createDatabasePlatform(PaperConnection $connection): PlatformInterface
- {
- return new MariaDBPlatform($connection, $this->createDatabaseSchema());
- }
- public function createDatabaseSchema(): MariaDBSchema
- {
- return new MariaDBSchema();
- }
- }
|