packages/ztd-query-postgres/tests/Unit/Sql/Statement/SelectColumnsTest.php

1<?php
2
3declare(strict_types=1);
4
5namespace Tests\Unit\Sql\Statement;
6
7use PHPUnit\Framework\Attributes\CoversClass;
8use PHPUnit\Framework\TestCase;
9
10#[CoversClass(\ZtdQuery\Platform\Postgres\Sql\Statement\SelectColumns::class)]
11#[\PHPUnit\Framework\Attributes\UsesClass(\ZtdQuery\Platform\Postgres\Sql\Lexing\QuotedSpan::class)]
12final class SelectColumnsTest extends TestCase
13{
14    public function testExtractSelectColumnNames(): void
15    {
16        self::assertSame(['id', 'title'], (new \ZtdQuery\Platform\Postgres\Sql\Statement\SelectColumns())->extractSelectColumnNames('SELECT id, name AS title FROM users'));
17
18        self::assertSame(['one', 'label'], (new \ZtdQuery\Platform\Postgres\Sql\Statement\SelectColumns())->extractSelectColumnNames('SELECT 1 AS one, coalesce(name, \'x\') AS label'));
19
20        self::assertSame([], (new \ZtdQuery\Platform\Postgres\Sql\Statement\SelectColumns())->extractSelectColumnNames('SELECT * FROM users'));
21    }
22
23    public function testSplitByTopLevelComma(): void
24    {
25        self::assertSame(['id', 'coalesce(name, \'a,b\')', '"c,d"'], (new \ZtdQuery\Platform\Postgres\Sql\Statement\SelectColumns())->splitByTopLevelComma('id, coalesce(name, \'a,b\'), "c,d"'));
26    }
27}
28