packages/ztd-query-mysql/tests/Unit/Sql/Upsert/AssignmentReaderTest.php
1<?php
2
3declare(strict_types=1);
4
5namespace Tests\Unit\Sql\Upsert;
6
7use PHPUnit\Framework\Attributes\CoversClass;
8use PHPUnit\Framework\TestCase;
9use ZtdQuery\Platform\MySql\Sql\Upsert\AssignmentReader;
10
11#[\PHPUnit\Framework\Attributes\UsesClass(\ZtdQuery\Platform\MySql\Sql\MySqlLexerProfile::class)]
12#[CoversClass(AssignmentReader::class)]
13final class AssignmentReaderTest extends TestCase
14{
15 public function testAssignmentExtractsTheLastQualifiedIdentifier(): void
16 {
17 $reader = new AssignmentReader();
18 self::assertSame(['column' => 'score', 'value' => 'VALUES(score) + 1'], $reader->assignment('`users`.`score` = VALUES(score) + 1'));
19 self::assertNull($reader->assignment('score = '));
20 self::assertNull($reader->assignment('score'));
21 }
22
23 public function testLastIdentifierDecodesEscapedNames(): void
24 {
25 self::assertSame('a`b', (new AssignmentReader())->lastIdentifier(\ZtdQuery\Sql\SqlTokenStream::tokenize('users.`a``b`', \ZtdQuery\Platform\MySql\Sql\MySqlLexerProfile::create())->significantTokens()));
26 self::assertNull((new AssignmentReader())->lastIdentifier([]));
27 }
28
29}
30