packages/ztd-query-postgres/tests/Unit/Sql/Statement/TargetTableParserTest.php

1<?php
2
3declare(strict_types=1);
4
5namespace Tests\Unit\Sql\Statement;
6
7use PHPUnit\Framework\Attributes\CoversClass;
8use PHPUnit\Framework\TestCase;
9
10#[CoversClass(\ZtdQuery\Platform\Postgres\Sql\Statement\TargetTableParser::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 TargetTableParserTest extends TestCase
17{
18    public function testExtractInsertTableResolvesSchemaQualifiedTarget(): void
19    {
20        $parser = new \ZtdQuery\Platform\Postgres\Sql\Statement\TargetTableParser();
21        self::assertSame('users', $parser->extractInsertTable('INSERT /* lead */ INTO public.users (id) VALUES (1)'));
22        self::assertSame(null, $parser->extractInsertTable('SELECT 1'));
23    }
24
25    public function testExtractUpdateTableResolvesSchemaQualifiedTarget(): void
26    {
27        $parser = new \ZtdQuery\Platform\Postgres\Sql\Statement\TargetTableParser();
28        self::assertSame('users', $parser->extractUpdateTable('UPDATE public.users SET id = 1'));
29        self::assertSame(null, $parser->extractUpdateTable('SELECT 1'));
30    }
31
32    public function testExtractDeleteTableResolvesSchemaQualifiedTarget(): void
33    {
34        $parser = new \ZtdQuery\Platform\Postgres\Sql\Statement\TargetTableParser();
35        self::assertSame('users', $parser->extractDeleteTable('DELETE FROM public.users WHERE id = 1'));
36        self::assertSame(null, $parser->extractDeleteTable('SELECT 1'));
37    }
38}
39