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