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