From 939dcd10fe7f33d567e4bf327b284dcb8a9bdd63 Mon Sep 17 00:00:00 2001 From: flashwave Date: Tue, 11 Jul 2023 22:42:57 +0000 Subject: [PATCH] Exposed more steps of the DbTools::create process. --- VERSION | 2 +- src/Data/DbTools.php | 30 +++++++++++++++++++++++------- 2 files changed, 24 insertions(+), 8 deletions(-) diff --git a/VERSION b/VERSION index 402900e..0044f78 100644 --- a/VERSION +++ b/VERSION @@ -1 +1 @@ -0.2307.112211 +0.2307.112242 diff --git a/src/Data/DbTools.php b/src/Data/DbTools.php index 5b0e98a..82996ae 100644 --- a/src/Data/DbTools.php +++ b/src/Data/DbTools.php @@ -1,7 +1,7 @@ SQLite\SQLiteBackend::class, ]; - public static function create(string $dsn): IDbConnection { - static $backends = []; - + private static function parseDsnUri(string $dsn): array { $uri = parse_url($dsn); if($uri === false) throw new InvalidArgumentException('$dsn is not a valid uri.'); + return $uri; + } + + private static function resolveBackend(array $uri): IDbBackend { + static $backends = []; $scheme = $uri['scheme']; @@ -52,9 +55,22 @@ final class DbTools { $backends[$name] = $backend; } - return $backend->createConnection( - $backend->parseDsn($uri) - ); + return $backend; + } + + public static function backend(string $dsn): IDbBackend { + return self::resolveBackend(self::parseDsnUri($dsn)); + } + + public static function parse(string $dsn): IDbConnectionInfo { + $uri = self::parseDsnUri($dsn); + return self::resolveBackend($uri)->parseDsn($uri); + } + + public static function create(string $dsn): IDbConnection { + $uri = self::parseDsnUri($dsn); + $backend = self::resolveBackend($uri); + return $backend->createConnection($backend->parseDsn($uri)); } /**