packages/ztd-query-pdo-adapter/tests/Integration/Sqlite/SelectDistinctTest.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 ZtdQuery\Adapter\Pdo\ZtdPdo;
12
13/**
14 * @requires extension pdo_sqlite
15 *
16 * @phpstan-type Row array<string, mixed>
17 */
18#[CoversNothing]
19#[Large]
20final class SelectDistinctTest extends TestCase
21{
22 public function testSelectDistinct(): void
23 {
24 $rawPdo = new PDO('sqlite::memory:', null, null, [
25 PDO::ATTR_ERRMODE => PDO::ERRMODE_EXCEPTION,
26 PDO::ATTR_DEFAULT_FETCH_MODE => PDO::FETCH_ASSOC,
27 ]);
28 $rawPdo->exec('CREATE TABLE items (id INTEGER PRIMARY KEY, category TEXT NOT NULL, name TEXT NOT NULL)');
29 $rawPdo->exec("INSERT INTO items (id, category, name) VALUES (1, 'A', 'x'), (2, 'B', 'y'), (3, 'A', 'z'), (4, 'B', 'w')");
30
31 $ztdPdo = ZtdPdo::fromPdo($rawPdo);
32 $ztdPdo->exec("INSERT INTO items (id, category, name) VALUES (1, 'A', 'x'), (2, 'B', 'y'), (3, 'A', 'z'), (4, 'B', 'w')");
33
34 $stmt = $rawPdo->query('SELECT DISTINCT category FROM items ORDER BY category');
35 self::assertNotFalse($stmt);
36 /** @var list<Row> $rawRows */
37 $rawRows = $stmt->fetchAll();
38 $stmt = $ztdPdo->query('SELECT DISTINCT category FROM items ORDER BY category');
39 self::assertNotFalse($stmt);
40 /** @var list<Row> $ztdRows */
41 $ztdRows = $stmt->fetchAll();
42
43 self::assertSame($rawRows, $ztdRows);
44 }
45}
46