Passed
Pull Request — master (#334)
by Antoine
11:53 queued 01:54
created

WithStatementTest   A

Complexity

Total Complexity 1

Size/Duplication

Total Lines 29
Duplicated Lines 0 %

Importance

Changes 2
Bugs 0 Features 0
Metric Value
eloc 21
c 2
b 0
f 0
dl 0
loc 29
rs 10
wmc 1

1 Method

Rating   Name   Duplication   Size   Complexity  
A testWith() 0 27 1
1
<?php
2
3
declare(strict_types=1);
4
5
namespace PhpMyAdmin\SqlParser\Tests\Parser;
6
7
use PhpMyAdmin\SqlParser\Tests\TestCase;
8
use PhpMyAdmin\SqlParser\Lexer;
9
use PhpMyAdmin\SqlParser\Parser;
10
11
class WithStatementTest extends TestCase
12
{
13
    public function testWith()
14
    {
15
        $sql = <<<SQL
16
WITH categories(identifier, name, parent_id) AS (
17
    SELECT c.identifier, c.name, c.parent_id FROM category c WHERE c.identifier = 'a'
18
    UNION ALL
19
    SELECT c.identifier, c.name, c.parent_id FROM categories, category c WHERE c.identifier = categories.parent_id
20
), foo AS ( SELECT * FROM test )
21
SELECT * FROM categories
22
SQL;
23
24
        $lexer = new Lexer($sql);
25
26
        $lexerErrors = $this->getErrorsAsArray($lexer);
27
        $this->assertCount(0, $lexerErrors);
28
        $parser = new Parser($lexer->list);
29
        $parserErrors = $this->getErrorsAsArray($parser);
30
        $this->assertCount(0, $parserErrors);
31
        $this->assertCount(2, $parser->statements);
32
33
        // phpcs:disable Generic.Files.LineLength.TooLong
34
        $expected = <<<SQL
35
WITH categories(identifier, name, parent_id) AS (SELECT c.identifier, c.name, c.parent_id FROM category AS `c` WHERE c.identifier = 'a' UNION ALL SELECT c.identifier, c.name, c.parent_id FROM categories, category AS `c` WHERE c.identifier = categories.parent_id), foo AS (SELECT * FROM test)
36
SQL;
37
        // phpcs:enable
38
        $this->assertEquals($expected, $parser->statements[0]->build());
39
        $this->assertEquals('SELECT * FROM categories', $parser->statements[1]->build());
40
    }
41
}
42