packages/ztd-query-postgres/tests/Unit/Sql/Partition/ClauseTokensTest.php
1<?php
2
3declare(strict_types=1);
4
5namespace Tests\Unit\Sql\Partition;
6
7use PHPUnit\Framework\Attributes\CoversClass;
8use PHPUnit\Framework\TestCase;
9
10#[CoversClass(\ZtdQuery\Platform\Postgres\Sql\Partition\ClauseTokens::class)]
11#[\PHPUnit\Framework\Attributes\UsesClass(\ZtdQuery\Platform\Postgres\Sql\PgSqlLexerProfile::class)]
12final class ClauseTokensTest extends TestCase
13{
14 public function testParenthesizedValues(): void
15 {
16 $sql = '(1, 2)';
17 $stream = \ZtdQuery\Sql\SqlTokenStream::tokenize($sql, \ZtdQuery\Platform\Postgres\Sql\PgSqlLexerProfile::create());
18 $tokens = $stream->significantTokens();
19
20 self::assertSame(['values' => ['1', '2'], 'next' => 5], (new \ZtdQuery\Platform\Postgres\Sql\Partition\ClauseTokens())->parenthesizedValues($sql, $tokens, 0));
21 }
22
23 public function testClosingParenthesisIndex(): void
24 {
25 $sql = '(1, 2)';
26 $stream = \ZtdQuery\Sql\SqlTokenStream::tokenize($sql, \ZtdQuery\Platform\Postgres\Sql\PgSqlLexerProfile::create());
27 $tokens = $stream->significantTokens();
28
29 self::assertSame(4, (new \ZtdQuery\Platform\Postgres\Sql\Partition\ClauseTokens())->closingParenthesisIndex($tokens, 0));
30 }
31
32 public function testIsSymbol(): void
33 {
34 $sql = '(1, 2)';
35 $stream = \ZtdQuery\Sql\SqlTokenStream::tokenize($sql, \ZtdQuery\Platform\Postgres\Sql\PgSqlLexerProfile::create());
36 $tokens = $stream->significantTokens();
37
38 self::assertSame(true, (new \ZtdQuery\Platform\Postgres\Sql\Partition\ClauseTokens())->isSymbol($tokens[0], '('));
39 }
40
41 public function testKeywordPairIndex(): void
42 {
43 $sql = 'PARTITION BY RANGE (id)';
44 $stream = \ZtdQuery\Sql\SqlTokenStream::tokenize($sql, \ZtdQuery\Platform\Postgres\Sql\PgSqlLexerProfile::create());
45 $tokens = $stream->significantTokens();
46
47 self::assertSame(0, (new \ZtdQuery\Platform\Postgres\Sql\Partition\ClauseTokens())->keywordPairIndex($tokens, 'PARTITION', 'BY'));
48 }
49
50 public function testKeywordIndex(): void
51 {
52 $sql = 'PARTITION BY RANGE (id)';
53 $stream = \ZtdQuery\Sql\SqlTokenStream::tokenize($sql, \ZtdQuery\Platform\Postgres\Sql\PgSqlLexerProfile::create());
54 $tokens = $stream->significantTokens();
55
56 self::assertSame(2, (new \ZtdQuery\Platform\Postgres\Sql\Partition\ClauseTokens())->keywordIndex($tokens, 'RANGE'));
57 }
58
59 public function testQualifiedIdentifierAt(): void
60 {
61 $sql = 'public."Users"';
62 $stream = \ZtdQuery\Sql\SqlTokenStream::tokenize($sql, \ZtdQuery\Platform\Postgres\Sql\PgSqlLexerProfile::create());
63 $tokens = $stream->significantTokens();
64
65 self::assertSame(['name' => 'Users', 'next' => 3], (new \ZtdQuery\Platform\Postgres\Sql\Partition\ClauseTokens())->qualifiedIdentifierAt($stream, $tokens, 0));
66 }
67}
68