packages/sql-semantics/tests/Unit/Core/Analysis/AnalyzerTest.php
1<?php
2
3declare(strict_types=1);
4
5namespace Tests\Unit\Core\Analysis;
6
7use PHPUnit\Framework\Attributes\CoversClass;
8use PHPUnit\Framework\Attributes\Medium;
9use PHPUnit\Framework\Attributes\UsesClass;
10use PHPUnit\Framework\TestCase;
11use SqlSemantics\Platform\Sqlite\Dialect as SqliteDialect;
12
13#[CoversClass(\SqlSemantics\Core\Analysis\Analyzer::class)]
14#[UsesClass(\SqlSemantics\Core\Analysis\ValueReader::class)]
15#[UsesClass(\SqlSemantics\Core\AnalysisException::class)]
16#[UsesClass(\SqlSemantics\Facade\Semantics::class)]
17#[UsesClass(\SqlSemantics\Statement\Element::class)]
18#[UsesClass(\SqlSemantics\Statement\Statement::class)]
19#[UsesClass(\SqlSemantics\Statement\Writer::class)]
20#[UsesClass(\SqlSemantics\Statement\Assertion::class)]
21#[UsesClass(\SqlSemantics\Statement\ImmutableGraph::class)]
22#[UsesClass(\SqlSemantics\Core\Ast\DialectParser::class)]
23#[UsesClass(\SqlSemantics\Platform\MySql\Platform::class)]
24#[UsesClass(\SqlSemantics\Platform\PostgreSql\Platform::class)]
25#[UsesClass(\SqlSemantics\Platform\Sqlite\Platform::class)]
26#[Medium]
27final class AnalyzerTest extends TestCase
28{
29 public function testAnalyzeDoesNotNeedTableDeclarations(): void
30 {
31 $analyzer = new \SqlSemantics\Core\Analysis\Analyzer(SqliteDialect::Sqlite);
32 $statement = $analyzer->analyze('DROP TABLE no_such_table');
33 self::assertSame('DROP TABLE no_such_table', $statement->toString());
34 self::assertNotSame($statement, $analyzer->analyze('DROP TABLE no_such_table'));
35 }
36
37 public function testAnalyzeRejectsInvalidSqlWithoutAnIncompleteStatement(): void
38 {
39 $this->expectException(\SqlSemantics\Core\AnalysisException::class);
40 (new \SqlSemantics\Core\Analysis\Analyzer(SqliteDialect::Sqlite))->analyze('SELECT FROM');
41 }
42}
43