packages/ztd-query-postgres/tests/Unit/Sql/Dml/Update/UpdateClauseParserTest.php
1<?php
2
3declare(strict_types=1);
4
5namespace Tests\Unit\Sql\Dml\Update;
6
7use PHPUnit\Framework\Attributes\CoversClass;
8use PHPUnit\Framework\TestCase;
9
10#[CoversClass(\ZtdQuery\Platform\Postgres\Sql\Dml\Update\UpdateClauseParser::class)]
11#[\PHPUnit\Framework\Attributes\UsesClass(\ZtdQuery\Platform\Postgres\Sql\PgSqlLexerProfile::class)]
12#[\PHPUnit\Framework\Attributes\UsesClass(\ZtdQuery\Platform\Postgres\Sql\PostgreSqlLexicalMasker::class)]
13#[\PHPUnit\Framework\Attributes\UsesClass(\ZtdQuery\Platform\Postgres\Sql\Lexing\CommentSpan::class)]
14#[\PHPUnit\Framework\Attributes\UsesClass(\ZtdQuery\Platform\Postgres\Sql\Lexing\QuotedSpan::class)]
15#[\PHPUnit\Framework\Attributes\UsesClass(\ZtdQuery\Platform\Postgres\Sql\Lexing\IdentifierDecoder::class)]
16final class UpdateClauseParserTest extends TestCase
17{
18 public function testExtractUpdateAliasReturnsExplicitAlias(): void
19 {
20 $parser = new \ZtdQuery\Platform\Postgres\Sql\Dml\Update\UpdateClauseParser();
21 self::assertSame('u', $parser->extractUpdateAlias('UPDATE users AS u SET id = 1'));
22 self::assertSame(null, $parser->extractUpdateAlias('UPDATE users SET id = 1'));
23 }
24
25 public function testExtractUpdateSetsKeepsNestedExpressionsTogether(): void
26 {
27 $parser = new \ZtdQuery\Platform\Postgres\Sql\Dml\Update\UpdateClauseParser();
28 self::assertSame(['id' => 'COALESCE(1, 2)', 'name' => 'NULL'], $parser->extractUpdateSets('UPDATE users SET id = COALESCE(1, 2), name = NULL WHERE id = 3'));
29 self::assertSame([], $parser->extractUpdateSets('SELECT 1'));
30 }
31}
32