packages/ztd-query-postgres/tests/Unit/Sql/Relation/RelationReferenceTest.php
1<?php
2
3declare(strict_types=1);
4
5namespace Tests\Unit\Sql\Relation;
6
7use PHPUnit\Framework\Attributes\CoversClass;
8use PHPUnit\Framework\TestCase;
9
10#[CoversClass(\ZtdQuery\Platform\Postgres\Sql\Relation\RelationReference::class)]
11#[\PHPUnit\Framework\Attributes\UsesClass(\ZtdQuery\Platform\Postgres\Sql\PgSqlLexerProfile::class)]
12final class RelationReferenceTest extends TestCase
13{
14 public function testClosingToken(): void
15 {
16 $sql = '(SELECT 1)';
17 $stream = \ZtdQuery\Sql\SqlTokenStream::tokenize($sql, \ZtdQuery\Platform\Postgres\Sql\PgSqlLexerProfile::create());
18 $tokens = $stream->significantTokens();
19
20 self::assertEquals(new \ZtdQuery\Sql\SqlToken(kind: \ZtdQuery\Sql\SqlTokenKind::Symbol, text: ')', offset: 9, depth: 0, bracketDepth: 0), (new \ZtdQuery\Platform\Postgres\Sql\Relation\RelationReference())->closingToken($tokens, 0));
21 }
22
23 public function testReferenceAt(): void
24 {
25 $sql = 'public."Users" u';
26 $stream = \ZtdQuery\Sql\SqlTokenStream::tokenize($sql, \ZtdQuery\Platform\Postgres\Sql\PgSqlLexerProfile::create());
27 $tokens = $stream->significantTokens();
28
29 self::assertSame(['name' => 'Users', 'start' => 0, 'unqualifiedStart' => 7, 'end' => 14], (new \ZtdQuery\Platform\Postgres\Sql\Relation\RelationReference())->referenceAt($sql, $tokens, 0));
30 }
31
32 public function testIdentifierComponentAt(): void
33 {
34 $sql = 'public."Users" u';
35 $stream = \ZtdQuery\Sql\SqlTokenStream::tokenize($sql, \ZtdQuery\Platform\Postgres\Sql\PgSqlLexerProfile::create());
36 $tokens = $stream->significantTokens();
37
38 self::assertSame(['Users', 3, 7, 7, 14], (new \ZtdQuery\Platform\Postgres\Sql\Relation\RelationReference())->identifierComponentAt($tokens, 2));
39 }
40
41 public function testTokens(): void
42 {
43 self::assertEquals([new \ZtdQuery\Sql\SqlToken(kind: \ZtdQuery\Sql\SqlTokenKind::Word, text: 'SELECT', offset: 0, depth: 0, bracketDepth: 0), new \ZtdQuery\Sql\SqlToken(kind: \ZtdQuery\Sql\SqlTokenKind::Word, text: 'id', offset: 21, depth: 0, bracketDepth: 0), new \ZtdQuery\Sql\SqlToken(kind: \ZtdQuery\Sql\SqlTokenKind::Word, text: 'FROM', offset: 24, depth: 0, bracketDepth: 0), new \ZtdQuery\Sql\SqlToken(kind: \ZtdQuery\Sql\SqlTokenKind::Word, text: 'users', offset: 29, depth: 0, bracketDepth: 0)], (new \ZtdQuery\Platform\Postgres\Sql\Relation\RelationReference())->tokens('SELECT /* comment */ id FROM users'));
44 }
45}
46