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