diff --git a/src/LitebasePDO.php b/src/LitebasePDO.php index 4148903..5b7706e 100644 --- a/src/LitebasePDO.php +++ b/src/LitebasePDO.php @@ -4,6 +4,7 @@ namespace Litebase; +use Composer\InstalledVersions; use PDO; use PDO\Sqlite; use PDOStatement; @@ -68,8 +69,8 @@ public function exec(string $statement): int|false public function getAttribute(int $attribute): mixed { return match ($attribute) { - PDO::ATTR_SERVER_VERSION => '0.0.0', - PDO::ATTR_CLIENT_VERSION => '0.0.0', + PDO::ATTR_SERVER_VERSION => $this->getClientVersion(), + PDO::ATTR_CLIENT_VERSION => $this->getClientVersion(), default => null, }; } @@ -82,6 +83,14 @@ public function getClient(): LitebaseClient return $this->client; } + /** + * Return the client version. + */ + protected function getClientVersion(): string + { + return InstalledVersions::getPrettyVersion('litebase/litebase-php') ?? '0.0.0'; + } + /** * Determie if the connection has an error. */ diff --git a/tests/Unit/LitebasePDOTest.php b/tests/Unit/LitebasePDOTest.php index de3a50b..16d86d9 100644 --- a/tests/Unit/LitebasePDOTest.php +++ b/tests/Unit/LitebasePDOTest.php @@ -13,6 +13,7 @@ use Litebase\LitebaseStatement; use Litebase\QueryResult; use Mockery; +use PDO; test('it can be created', function () { $pdo = new LitebasePDO( @@ -136,6 +137,18 @@ expect($pdo->getClient())->toBeInstanceOf(LitebaseClient::class); }); +test('it returns the client version from composer', function () { + $client = Mockery::mock(LitebaseClient::class); + $pdo = createPDO($client); + + $clientVersion = $pdo->getAttribute(PDO::ATTR_CLIENT_VERSION); + $serverVersion = $pdo->getAttribute(PDO::ATTR_SERVER_VERSION); + + expect($clientVersion)->toBeString(); + expect($clientVersion)->not->toBeEmpty(); + expect($serverVersion)->toEqual($clientVersion); +}); + function createPDO(LitebaseClient $client): LitebasePDO { return new LitebasePDO($client);