packages/ztd-query-postgres/tests/Unit/Sql/Statement/TableDefinitionClausesTest.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\TableDefinitionClauses::class)]
11#[\PHPUnit\Framework\Attributes\UsesClass(\ZtdQuery\Platform\Postgres\Sql\Lexing\IdentifierDecoder::class)]
12#[\PHPUnit\Framework\Attributes\UsesClass(\ZtdQuery\Platform\Postgres\Sql\Statement\TargetTableParser::class)]
13#[\PHPUnit\Framework\Attributes\UsesClass(\ZtdQuery\Platform\Postgres\Sql\Dml\Update\UpdateClauseParser::class)]
14#[\PHPUnit\Framework\Attributes\UsesClass(\ZtdQuery\Platform\Postgres\Sql\Dml\Delete\DeleteClauseParser::class)]
15#[\PHPUnit\Framework\Attributes\UsesClass(\ZtdQuery\Platform\Postgres\Sql\Dml\Insert\InsertClauseParser::class)]
16#[\PHPUnit\Framework\Attributes\UsesClass(\ZtdQuery\Platform\Postgres\Sql\PgSqlLexerProfile::class)]
17#[\PHPUnit\Framework\Attributes\UsesClass(\ZtdQuery\Platform\Postgres\Sql\PostgreSqlLexicalMasker::class)]
18#[\PHPUnit\Framework\Attributes\UsesClass(\ZtdQuery\Platform\Postgres\Sql\Lexing\CommentSpan::class)]
19#[\PHPUnit\Framework\Attributes\UsesClass(\ZtdQuery\Platform\Postgres\Sql\Lexing\QuotedSpan::class)]
20final class TableDefinitionClausesTest extends TestCase
21{
22    public function testExtractTruncateTables(): void
23    {
24        self::assertSame(['users', 'orders'], (new \ZtdQuery\Platform\Postgres\Sql\Statement\TableDefinitionClauses())->extractTruncateTables('TRUNCATE TABLE ONLY public.users, orders RESTART IDENTITY CASCADE'));
25    }
26
27    public function testExtractCreateTableName(): void
28    {
29        self::assertSame('users', (new \ZtdQuery\Platform\Postgres\Sql\Statement\TableDefinitionClauses())->extractCreateTableName('CREATE TABLE "users" (id INT)'));
30    }
31
32    public function testHasIfNotExists(): void
33    {
34        self::assertSame(true, (new \ZtdQuery\Platform\Postgres\Sql\Statement\TableDefinitionClauses())->hasIfNotExists('CREATE TABLE IF NOT EXISTS users (id INT)'));
35    }
36
37    public function testHasCreateTableAsSelect(): void
38    {
39        self::assertSame(true, (new \ZtdQuery\Platform\Postgres\Sql\Statement\TableDefinitionClauses())->hasCreateTableAsSelect('CREATE TABLE users AS SELECT 1 AS id'));
40    }
41
42    public function testExtractCreateTableSelectSql(): void
43    {
44        self::assertSame('SELECT 1 AS id', (new \ZtdQuery\Platform\Postgres\Sql\Statement\TableDefinitionClauses())->extractCreateTableSelectSql('CREATE TABLE users AS SELECT 1 AS id'));
45    }
46
47    public function testHasCreateTableLike(): void
48    {
49        self::assertSame(true, (new \ZtdQuery\Platform\Postgres\Sql\Statement\TableDefinitionClauses())->hasCreateTableLike('CREATE TABLE users (LIKE source INCLUDING ALL)'));
50    }
51
52    public function testExtractCreateTableLikeSource(): void
53    {
54        self::assertSame('source', (new \ZtdQuery\Platform\Postgres\Sql\Statement\TableDefinitionClauses())->extractCreateTableLikeSource('CREATE TABLE users (LIKE source INCLUDING ALL)'));
55    }
56
57    public function testExtractDropTableName(): void
58    {
59        self::assertSame('users', (new \ZtdQuery\Platform\Postgres\Sql\Statement\TableDefinitionClauses())->extractDropTableName('DROP TABLE IF EXISTS users'));
60    }
61
62    public function testHasDropTableIfExists(): void
63    {
64        self::assertSame(true, (new \ZtdQuery\Platform\Postgres\Sql\Statement\TableDefinitionClauses())->hasDropTableIfExists('DROP TABLE IF EXISTS users'));
65    }
66
67    public function testExtractAlterTableName(): void
68    {
69        self::assertSame('users', (new \ZtdQuery\Platform\Postgres\Sql\Statement\TableDefinitionClauses())->extractAlterTableName('ALTER TABLE users ADD COLUMN name TEXT'));
70    }
71}
72