packages/ztd-query-mysql/tests/Unit/Rewrite/Transformer/Select/ExpressionAliaserTest.php
1<?php
2
3declare(strict_types=1);
4
5namespace Tests\Unit\Rewrite\Transformer\Select;
6
7use PHPUnit\Framework\Attributes\CoversClass;
8use PHPUnit\Framework\TestCase;
9use ZtdQuery\Platform\MySql\Rewrite\Transformer\Select\ExpressionAliaser;
10
11#[\PHPUnit\Framework\Attributes\UsesClass(\ZtdQuery\Platform\MySql\Sql\MySqlLexerProfile::class)]
12#[CoversClass(ExpressionAliaser::class)]
13final class ExpressionAliaserTest extends TestCase
14{
15 public function testEndsSelectList(): void
16 {
17 $tokens = \ZtdQuery\Sql\SqlTokenStream::tokenize('FROM id', \ZtdQuery\Platform\MySql\Sql\MySqlLexerProfile::create())->significantTokens();
18 self::assertTrue((new ExpressionAliaser())->endsSelectList($tokens[0]));
19 self::assertFalse((new ExpressionAliaser())->endsSelectList($tokens[1]));
20 }
21
22 public function testContainsWildcard(): void
23 {
24 $aliaser = new ExpressionAliaser();
25 self::assertTrue($aliaser->containsWildcard(['id', 't.*']));
26 self::assertTrue($aliaser->containsWildcard(['']));
27 self::assertFalse($aliaser->containsWildcard(['COUNT(*)', 'id * 2']));
28 }
29
30 public function testRemoveModifiers(): void
31 {
32 $aliaser = new ExpressionAliaser();
33 self::assertSame(['modifiers' => 'DISTINCT SQL_NO_CACHE ', 'expression' => 'id'], $aliaser->removeModifiers('DISTINCT SQL_NO_CACHE id'));
34 self::assertSame(['modifiers' => '', 'expression' => 'id'], $aliaser->removeModifiers('id'));
35 }
36
37 public function testIsModifier(): void
38 {
39 $tokens = \ZtdQuery\Sql\SqlTokenStream::tokenize('DISTINCT id', \ZtdQuery\Platform\MySql\Sql\MySqlLexerProfile::create())->significantTokens();
40 self::assertTrue((new ExpressionAliaser())->isModifier($tokens[0]));
41 self::assertFalse((new ExpressionAliaser())->isModifier($tokens[1]));
42 }
43
44 public function testWithoutExplicitAlias(): void
45 {
46 $aliaser = new ExpressionAliaser();
47 self::assertSame('CAST(id AS SIGNED)', $aliaser->withoutExplicitAlias('CAST(id AS SIGNED) AS x'));
48 self::assertSame('id implicit', $aliaser->withoutExplicitAlias('id implicit'));
49 }
50
51}
52