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)); } /**