Passed
Push — master ( cee3e6...16d2f0 )
by William
11:48 queued 12s
created

ParserLongExportsTest::exportFileProvider()   A

Complexity

Conditions 1
Paths 1

Size

Total Lines 4
Code Lines 2

Duplication

Lines 0
Ratio 0 %

Importance

Changes 1
Bugs 0 Features 0
Metric Value
cc 1
eloc 2
nc 1
nop 0
dl 0
loc 4
rs 10
c 1
b 0
f 0
1
<?php
2
3
declare(strict_types=1);
4
5
namespace PhpMyAdmin\SqlParser\Tests\Parser;
6
7
use PhpMyAdmin\SqlParser\Parser;
8
use PhpMyAdmin\SqlParser\Statements\SetStatement;
9
use PhpMyAdmin\SqlParser\Statements\TransactionStatement;
10
use PhpMyAdmin\SqlParser\Tests\TestCase;
11
12
class ParserLongExportsTest extends TestCase
13
{
14
    public function testMysqldump(): void
15
    {
16
        $sql = <<<SQL
0 ignored issues
show
introduced by
Use nowdoc syntax instead of heredoc.
Loading history...
17
-- MySQL dump 10.13  Distrib 5.7.24, for Linux (x86_64)ldump e-nocleg-2-dev 01-te
18
--
19
-- Host: localhost    Database: x
20
-- ------------------------------------------------------
21
-- Server version	5.7.24
22
23
/*!40101 SET @OLD_CHARACTER_SET_CLIENT=@@CHARACTER_SET_CLIENT */;
24
/*!40101 SET @OLD_CHARACTER_SET_RESULTS=@@CHARACTER_SET_RESULTS */;
25
/*!40101 SET @OLD_COLLATION_CONNECTION=@@COLLATION_CONNECTION */;
26
/*!40101 SET NAMES utf8 */;
27
/*!40103 SET @OLD_TIME_ZONE=@@TIME_ZONE */;
28
/*!40103 SET TIME_ZONE='+00:00' */;
29
/*!40014 SET @OLD_UNIQUE_CHECKS=@@UNIQUE_CHECKS, UNIQUE_CHECKS=0 */;
30
/*!40014 SET @OLD_FOREIGN_KEY_CHECKS=@@FOREIGN_KEY_CHECKS, FOREIGN_KEY_CHECKS=0 */;
31
/*!40101 SET @OLD_SQL_MODE=@@SQL_MODE, SQL_MODE='NO_AUTO_VALUE_ON_ZERO' */;
32
/*!40111 SET @OLD_SQL_NOTES=@@SQL_NOTES, SQL_NOTES=0 */;
33
SQL;
34
35
        $expectedSql = [
36
            'SET  @OLD_CHARACTER_SET_CLIENT = @@CHARACTER_SET_CLIENT',
37
            'SET  @OLD_CHARACTER_SET_RESULTS = @@CHARACTER_SET_RESULTS',
38
            'SET  @OLD_COLLATION_CONNECTION = @@COLLATION_CONNECTION',
39
            'SET NAMES utf8',
40
            'SET  @OLD_TIME_ZONE = @@TIME_ZONE',
41
            "SET  TIME_ZONE = '+00:00'",
42
            'SET  @OLD_UNIQUE_CHECKS = @@UNIQUE_CHECKS, UNIQUE_CHECKS = 0',
43
            'SET  @OLD_FOREIGN_KEY_CHECKS = @@FOREIGN_KEY_CHECKS, FOREIGN_KEY_CHECKS = 0',
44
            "SET  @OLD_SQL_MODE = @@SQL_MODE, SQL_MODE = 'NO_AUTO_VALUE_ON_ZERO'",
45
            'SET  @OLD_SQL_NOTES = @@SQL_NOTES, SQL_NOTES = 0',
46
        ];
47
48
        $parser = new Parser($sql, true);
49
        $parser->parse();
50
51
        $sql = [];
52
        foreach ($parser->statements as $stmt) {
53
            $sql[] = $stmt->__toString();
54
        }
55
56
        $this->assertEquals($expectedSql, $sql);
57
    }
58
59
    public function testParsephpMyAdminDump(): void
60
    {
61
        $data = $this->getData('parser/parsephpMyAdminExport1');
62
        $parser = new Parser($data['query']);
63
        $collectedSetStatements = [];
64
        foreach ($parser->statements as $statement) {
65
            if ($statement instanceof TransactionStatement) {
66
                foreach ($statement->statements as $transactionStatement) {
67
                    if (! $transactionStatement instanceof SetStatement) {
68
                        continue;
69
                    }
70
71
                    $collectedSetStatements[] = $transactionStatement->build();
72
                }
73
74
                continue;
75
            }
76
77
            if (! $statement instanceof SetStatement) {
78
                continue;
79
            }
80
81
            $collectedSetStatements[] = $statement->build();
82
        }
83
84
        $this->assertEquals([
85
            'SET  SQL_MODE = "NO_AUTO_VALUE_ON_ZERO"',
86
            'SET  AUTOCOMMIT = 0',
87
            'SET  time_zone = "+00:00"',
88
            'SET  @OLD_CHARACTER_SET_CLIENT = @@CHARACTER_SET_CLIENT',
89
            'SET  @OLD_CHARACTER_SET_RESULTS = @@CHARACTER_SET_RESULTS',
90
            'SET  @OLD_COLLATION_CONNECTION = @@COLLATION_CONNECTION',
91
            'SET NAMES utf8mb4',
92
        ], $collectedSetStatements);
93
94
        foreach ($parser->statements as $stmt) {
95
            // Check they all build
96
            $this->assertIsString($stmt->build());
97
        }
98
    }
99
100
    /**
101
     * @dataProvider exportFileProvider
102
     */
103
    public function testParseExport(string $test): void
104
    {
105
        $this->runParserTest($test);
106
    }
107
108
    /**
109
     * @return string[][]
110
     */
111
    public static function exportFileProvider(): array
112
    {
113
        return [
114
            ['parser/parsephpMyAdminExport1'],
115
        ];
116
    }
117
}
118