packages/ztd-query-mysql/tests/Unit/Rewrite/LoadData/RowProjectorTest.php
1<?php
2
3declare(strict_types=1);
4
5namespace Tests\Unit\Rewrite\LoadData;
6
7use PHPUnit\Framework\Attributes\CoversClass;
8use PHPUnit\Framework\TestCase;
9use ZtdQuery\Platform\MySql\Rewrite\LoadData\RowProjector;
10
11#[\PHPUnit\Framework\Attributes\UsesClass(\ZtdQuery\Platform\MySql\Sql\Value\MySqlCastRenderer::class)]
12#[\PHPUnit\Framework\Attributes\UsesClass(\ZtdQuery\Platform\MySql\Sql\MySqlLexerProfile::class)]
13#[\PHPUnit\Framework\Attributes\UsesClass(\ZtdQuery\Platform\MySql\Sql\Value\MySqlValueRenderer::class)]
14#[\PHPUnit\Framework\Attributes\UsesClass(\ZtdQuery\Platform\MySql\Sql\Value\CastTypeResolver::class)]
15#[\PHPUnit\Framework\Attributes\UsesClass(\ZtdQuery\Platform\MySql\Sql\Value\ScalarExpression::class)]
16#[\PHPUnit\Framework\Attributes\UsesClass(\ZtdQuery\Platform\MySql\Sql\Value\StringCoercion::class)]
17#[CoversClass(RowProjector::class)]
18final class RowProjectorTest extends TestCase
19{
20 public function testProjectRow(): void
21 {
22 $projector = new RowProjector(new \ZtdQuery\Platform\MySql\Sql\Value\MySqlValueRenderer());
23 self::assertSame(['id' => "CAST('7' AS CHAR)", 'name' => "UPPER(CAST('hello' AS CHAR))", 'missing' => 'DEFAULT'], $projector->projectRow(['id', '@raw', 'name', 'missing'], ['name' => 'UPPER(@raw)'], ['7', 'hello', null]));
24 }
25
26 public function testSubstituteVariables(): void
27 {
28 $projector = new RowProjector(new \ZtdQuery\Platform\MySql\Sql\Value\MySqlValueRenderer());
29 self::assertSame("CONCAT(CAST('hello' AS CHAR), NULL, @missing, @@sql_mode, '@raw')", $projector->substituteVariables("CONCAT(@RAW, @empty, @missing, @@sql_mode, '@raw')", ['raw' => 'hello', 'empty' => null]));
30 }
31
32}
33