packages/ztd-query-postgres/tests/Unit/Sql/Merge/RelationTargetTest.php
1<?php
2
3declare(strict_types=1);
4
5namespace Tests\Unit\Sql\Merge;
6
7use PHPUnit\Framework\Attributes\CoversClass;
8use PHPUnit\Framework\TestCase;
9
10#[CoversClass(\ZtdQuery\Platform\Postgres\Sql\Merge\RelationTarget::class)]
11#[\PHPUnit\Framework\Attributes\UsesClass(\ZtdQuery\Platform\Postgres\Sql\PgSqlLexerProfile::class)]
12final class RelationTargetTest extends TestCase
13{
14 public function testRelationAt(): void
15 {
16 $sql = 'public."Users" u';
17 $tokens = \ZtdQuery\Sql\SqlTokenStream::tokenize($sql, \ZtdQuery\Platform\Postgres\Sql\PgSqlLexerProfile::create())->significantTokens();
18
19 self::assertEquals(['name' => 'Users', 'sql' => 'public."Users"', 'next' => 3, 'last' => new \ZtdQuery\Sql\SqlToken(kind: \ZtdQuery\Sql\SqlTokenKind::QuotedIdentifier, text: '"Users"', offset: 7, depth: 0, bracketDepth: 0)], (new \ZtdQuery\Platform\Postgres\Sql\Merge\RelationTarget())->relationAt($sql, $tokens, 0));
20
21 $sql = 'ONLY users';
22 $tokens = \ZtdQuery\Sql\SqlTokenStream::tokenize($sql, \ZtdQuery\Platform\Postgres\Sql\PgSqlLexerProfile::create())->significantTokens();
23
24 self::assertEquals(['name' => 'users', 'sql' => 'users', 'next' => 2, 'last' => new \ZtdQuery\Sql\SqlToken(kind: \ZtdQuery\Sql\SqlTokenKind::Word, text: 'users', offset: 5, depth: 0, bracketDepth: 0)], (new \ZtdQuery\Platform\Postgres\Sql\Merge\RelationTarget())->relationAt($sql, $tokens, 1));
25
26 $sql = '()';
27 $tokens = \ZtdQuery\Sql\SqlTokenStream::tokenize($sql, \ZtdQuery\Platform\Postgres\Sql\PgSqlLexerProfile::create())->significantTokens();
28
29 self::assertSame(null, (new \ZtdQuery\Platform\Postgres\Sql\Merge\RelationTarget())->relationAt($sql, $tokens, 0));
30 }
31
32 public function testTargetAlias(): void
33 {
34 $sql = 'AS u';
35 $tokens = \ZtdQuery\Sql\SqlTokenStream::tokenize($sql, \ZtdQuery\Platform\Postgres\Sql\PgSqlLexerProfile::create())->significantTokens();
36
37 self::assertSame('u', (new \ZtdQuery\Platform\Postgres\Sql\Merge\RelationTarget())->targetAlias($sql, $tokens, 0, 2, 'users'));
38
39 $sql = '';
40 $tokens = \ZtdQuery\Sql\SqlTokenStream::tokenize($sql, \ZtdQuery\Platform\Postgres\Sql\PgSqlLexerProfile::create())->significantTokens();
41
42 self::assertSame('users', (new \ZtdQuery\Platform\Postgres\Sql\Merge\RelationTarget())->targetAlias($sql, $tokens, 0, 0, 'users'));
43 }
44
45 public function testIdentifierName(): void
46 {
47 $sql = '"a""b"';
48 $tokens = \ZtdQuery\Sql\SqlTokenStream::tokenize($sql, \ZtdQuery\Platform\Postgres\Sql\PgSqlLexerProfile::create())->significantTokens();
49
50 self::assertSame('a"b', (new \ZtdQuery\Platform\Postgres\Sql\Merge\RelationTarget())->identifierName($tokens[0]));
51
52 $sql = 'users';
53 $tokens = \ZtdQuery\Sql\SqlTokenStream::tokenize($sql, \ZtdQuery\Platform\Postgres\Sql\PgSqlLexerProfile::create())->significantTokens();
54
55 self::assertSame('users', (new \ZtdQuery\Platform\Postgres\Sql\Merge\RelationTarget())->identifierName($tokens[0]));
56
57 $sql = '(';
58 $tokens = \ZtdQuery\Sql\SqlTokenStream::tokenize($sql, \ZtdQuery\Platform\Postgres\Sql\PgSqlLexerProfile::create())->significantTokens();
59
60 self::assertSame(null, (new \ZtdQuery\Platform\Postgres\Sql\Merge\RelationTarget())->identifierName($tokens[0]));
61 }
62
63 public function testIsSymbol(): void
64 {
65 $sql = '(';
66 $tokens = \ZtdQuery\Sql\SqlTokenStream::tokenize($sql, \ZtdQuery\Platform\Postgres\Sql\PgSqlLexerProfile::create())->significantTokens();
67
68 self::assertSame(true, (new \ZtdQuery\Platform\Postgres\Sql\Merge\RelationTarget())->isSymbol($tokens[0], '('));
69
70 $sql = 'word';
71 $tokens = \ZtdQuery\Sql\SqlTokenStream::tokenize($sql, \ZtdQuery\Platform\Postgres\Sql\PgSqlLexerProfile::create())->significantTokens();
72
73 self::assertSame(false, (new \ZtdQuery\Platform\Postgres\Sql\Merge\RelationTarget())->isSymbol($tokens[0], '('));
74 }
75}
76