packages/ztd-query-mysql/tests/Unit/Rewrite/Classification/CteStatementKindTest.php
1<?php
2
3declare(strict_types=1);
4
5namespace Tests\Unit\Rewrite\Classification;
6
7use PHPUnit\Framework\Attributes\CoversClass;
8use PHPUnit\Framework\TestCase;
9use ZtdQuery\Platform\MySql\Rewrite\Classification\CteStatementKind;
10
11#[\PHPUnit\Framework\Attributes\UsesClass(\ZtdQuery\Platform\MySql\Sql\MySqlLexerProfile::class)]
12#[CoversClass(CteStatementKind::class)]
13final class CteStatementKindTest extends TestCase
14{
15 public function testClassifyWithFallbackCase1(): void
16 {
17 $classifier = new CteStatementKind();
18 $keyword = 'SELECT';
19 $expected = \ZtdQuery\Rewrite\QueryKind::READ;
20 self::assertSame($expected, $classifier->classifyWithFallback('WITH c AS (SELECT "DELETE") /* UPDATE */ ' . $keyword . ' t'));
21 self::assertNull($classifier->classifyWithFallback('WITH c AS (SELECT 1)'));
22 self::assertNull($classifier->classifyWithFallback('SELECT 1'));
23 }
24
25 public function testClassifyWithFallbackCase2(): void
26 {
27 $classifier = new CteStatementKind();
28 $keyword = 'UPDATE';
29 $expected = \ZtdQuery\Rewrite\QueryKind::WRITE_SIMULATED;
30 self::assertSame($expected, $classifier->classifyWithFallback('WITH c AS (SELECT "DELETE") /* UPDATE */ ' . $keyword . ' t'));
31 self::assertNull($classifier->classifyWithFallback('WITH c AS (SELECT 1)'));
32 self::assertNull($classifier->classifyWithFallback('SELECT 1'));
33 }
34
35 public function testClassifyWithFallbackCase3(): void
36 {
37 $classifier = new CteStatementKind();
38 $keyword = 'DELETE';
39 $expected = \ZtdQuery\Rewrite\QueryKind::WRITE_SIMULATED;
40 self::assertSame($expected, $classifier->classifyWithFallback('WITH c AS (SELECT "DELETE") /* UPDATE */ ' . $keyword . ' t'));
41 self::assertNull($classifier->classifyWithFallback('WITH c AS (SELECT 1)'));
42 self::assertNull($classifier->classifyWithFallback('SELECT 1'));
43 }
44
45 public function testClassifyWithFallbackCase4(): void
46 {
47 $classifier = new CteStatementKind();
48 $keyword = 'INSERT';
49 $expected = \ZtdQuery\Rewrite\QueryKind::WRITE_SIMULATED;
50 self::assertSame($expected, $classifier->classifyWithFallback('WITH c AS (SELECT "DELETE") /* UPDATE */ ' . $keyword . ' t'));
51 self::assertNull($classifier->classifyWithFallback('WITH c AS (SELECT 1)'));
52 self::assertNull($classifier->classifyWithFallback('SELECT 1'));
53 }
54
55 public function testClassifyWithFallbackCase5(): void
56 {
57 $classifier = new CteStatementKind();
58 $keyword = 'REPLACE';
59 $expected = \ZtdQuery\Rewrite\QueryKind::WRITE_SIMULATED;
60 self::assertSame($expected, $classifier->classifyWithFallback('WITH c AS (SELECT "DELETE") /* UPDATE */ ' . $keyword . ' t'));
61 self::assertNull($classifier->classifyWithFallback('WITH c AS (SELECT 1)'));
62 self::assertNull($classifier->classifyWithFallback('SELECT 1'));
63 }
64
65 public function testClassifyWithFallbackCase6(): void
66 {
67 $classifier = new CteStatementKind();
68 $keyword = 'TRUNCATE';
69 $expected = \ZtdQuery\Rewrite\QueryKind::WRITE_SIMULATED;
70 self::assertSame($expected, $classifier->classifyWithFallback('WITH c AS (SELECT "DELETE") /* UPDATE */ ' . $keyword . ' t'));
71 self::assertNull($classifier->classifyWithFallback('WITH c AS (SELECT 1)'));
72 self::assertNull($classifier->classifyWithFallback('SELECT 1'));
73 }
74
75 public function testClassifyWithFallbackCase7(): void
76 {
77 $classifier = new CteStatementKind();
78 $keyword = 'CREATE';
79 $expected = \ZtdQuery\Rewrite\QueryKind::DDL_SIMULATED;
80 self::assertSame($expected, $classifier->classifyWithFallback('WITH c AS (SELECT "DELETE") /* UPDATE */ ' . $keyword . ' t'));
81 self::assertNull($classifier->classifyWithFallback('WITH c AS (SELECT 1)'));
82 self::assertNull($classifier->classifyWithFallback('SELECT 1'));
83 }
84
85 public function testClassifyWithFallbackCase8(): void
86 {
87 $classifier = new CteStatementKind();
88 $keyword = 'DROP';
89 $expected = \ZtdQuery\Rewrite\QueryKind::DDL_SIMULATED;
90 self::assertSame($expected, $classifier->classifyWithFallback('WITH c AS (SELECT "DELETE") /* UPDATE */ ' . $keyword . ' t'));
91 self::assertNull($classifier->classifyWithFallback('WITH c AS (SELECT 1)'));
92 self::assertNull($classifier->classifyWithFallback('SELECT 1'));
93 }
94
95 public function testClassifyWithFallbackCase9(): void
96 {
97 $classifier = new CteStatementKind();
98 $keyword = 'ALTER';
99 $expected = \ZtdQuery\Rewrite\QueryKind::DDL_SIMULATED;
100 self::assertSame($expected, $classifier->classifyWithFallback('WITH c AS (SELECT "DELETE") /* UPDATE */ ' . $keyword . ' t'));
101 self::assertNull($classifier->classifyWithFallback('WITH c AS (SELECT 1)'));
102 self::assertNull($classifier->classifyWithFallback('SELECT 1'));
103 }
104
105}
106