packages/ztd-query-pdo-adapter/tests/Integration/Sqlite/InMemoryAttachTest.php
1<?php
2
3declare(strict_types=1);
4
5namespace Tests\Integration\Sqlite;
6
7use PDO;
8use PHPUnit\Framework\Attributes\CoversNothing;
9use PHPUnit\Framework\Attributes\Large;
10use PHPUnit\Framework\TestCase;
11use RuntimeException;
12use ZtdQuery\Adapter\Pdo\ZtdPdo;
13
14/**
15 * @requires extension pdo_sqlite
16 */
17#[CoversNothing]
18#[Large]
19final class InMemoryAttachTest extends TestCase
20{
21 public function testInMemoryDatabaseIsAttachedToPhysicalConnection(): void
22 {
23 $rawPdo = new PDO('sqlite::memory:', null, null, [
24 PDO::ATTR_ERRMODE => PDO::ERRMODE_EXCEPTION,
25 PDO::ATTR_DEFAULT_FETCH_MODE => PDO::FETCH_ASSOC,
26 ]);
27 $ztdPdo = ZtdPdo::fromPdo($rawPdo);
28
29 $ztdPdo->exec("ATTACH DATABASE ':memory:' AS db2");
30 $statement = $rawPdo->query('PRAGMA database_list');
31
32 self::assertNotFalse($statement);
33 self::assertContains('db2', array_column($statement->fetchAll(), 'name'));
34 }
35
36 public function testPersistentDatabaseAttachIsRejected(): void
37 {
38 $rawPdo = new PDO('sqlite::memory:', null, null, [
39 PDO::ATTR_ERRMODE => PDO::ERRMODE_EXCEPTION,
40 ]);
41 $ztdPdo = ZtdPdo::fromPdo($rawPdo);
42
43 $this->expectException(RuntimeException::class);
44
45 $ztdPdo->exec("ATTACH 'test.sqlite' AS db2");
46 }
47}
48