File: ParserLongExportsTest.php

package info (click to toggle)
phpmyadmin-sql-parser 5.10.3-2
  • links: PTS, VCS
  • area: main
  • in suites: forky, sid, trixie
  • size: 17,244 kB
  • sloc: php: 52,958; makefile: 13; sh: 8
file content (119 lines) | stat: -rw-r--r-- 4,144 bytes parent folder | download
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
<?php

declare(strict_types=1);

namespace PhpMyAdmin\SqlParser\Tests\Parser;

use PhpMyAdmin\SqlParser\Parser;
use PhpMyAdmin\SqlParser\Statements\SetStatement;
use PhpMyAdmin\SqlParser\Statements\TransactionStatement;
use PhpMyAdmin\SqlParser\Tests\TestCase;
use PHPUnit\Framework\Attributes\DataProvider;

class ParserLongExportsTest extends TestCase
{
    public function testMysqldump(): void
    {
        $sql = <<<SQL
-- MySQL dump 10.13  Distrib 5.7.24, for Linux (x86_64)ldump e-nocleg-2-dev 01-te
--
-- Host: localhost    Database: x
-- ------------------------------------------------------
-- Server version	5.7.24

/*!40101 SET @OLD_CHARACTER_SET_CLIENT=@@CHARACTER_SET_CLIENT */;
/*!40101 SET @OLD_CHARACTER_SET_RESULTS=@@CHARACTER_SET_RESULTS */;
/*!40101 SET @OLD_COLLATION_CONNECTION=@@COLLATION_CONNECTION */;
/*!40101 SET NAMES utf8 */;
/*!40103 SET @OLD_TIME_ZONE=@@TIME_ZONE */;
/*!40103 SET TIME_ZONE='+00:00' */;
/*!40014 SET @OLD_UNIQUE_CHECKS=@@UNIQUE_CHECKS, UNIQUE_CHECKS=0 */;
/*!40014 SET @OLD_FOREIGN_KEY_CHECKS=@@FOREIGN_KEY_CHECKS, FOREIGN_KEY_CHECKS=0 */;
/*!40101 SET @OLD_SQL_MODE=@@SQL_MODE, SQL_MODE='NO_AUTO_VALUE_ON_ZERO' */;
/*!40111 SET @OLD_SQL_NOTES=@@SQL_NOTES, SQL_NOTES=0 */;
SQL;

        $expectedSql = [
            'SET  @OLD_CHARACTER_SET_CLIENT = @@CHARACTER_SET_CLIENT',
            'SET  @OLD_CHARACTER_SET_RESULTS = @@CHARACTER_SET_RESULTS',
            'SET  @OLD_COLLATION_CONNECTION = @@COLLATION_CONNECTION',
            'SET NAMES utf8',
            'SET  @OLD_TIME_ZONE = @@TIME_ZONE',
            "SET  TIME_ZONE = '+00:00'",
            'SET  @OLD_UNIQUE_CHECKS = @@UNIQUE_CHECKS, UNIQUE_CHECKS = 0',
            'SET  @OLD_FOREIGN_KEY_CHECKS = @@FOREIGN_KEY_CHECKS, FOREIGN_KEY_CHECKS = 0',
            "SET  @OLD_SQL_MODE = @@SQL_MODE, SQL_MODE = 'NO_AUTO_VALUE_ON_ZERO'",
            'SET  @OLD_SQL_NOTES = @@SQL_NOTES, SQL_NOTES = 0',
        ];

        $parser = new Parser($sql, true);
        $parser->parse();

        $sql = [];
        foreach ($parser->statements as $stmt) {
            $sql[] = $stmt->__toString();
        }

        $this->assertEquals($expectedSql, $sql);
    }

    public function testParsephpMyAdminDump(): void
    {
        $data = $this->getData('parser/parsephpMyAdminExport1');
        $parser = new Parser($data['query']);
        $collectedSetStatements = [];
        foreach ($parser->statements as $statement) {
            if ($statement instanceof TransactionStatement) {
                foreach ($statement->statements as $transactionStatement) {
                    if (! $transactionStatement instanceof SetStatement) {
                        continue;
                    }

                    $collectedSetStatements[] = $transactionStatement->build();
                }

                continue;
            }

            if (! $statement instanceof SetStatement) {
                continue;
            }

            $collectedSetStatements[] = $statement->build();
        }

        $this->assertEquals([
            'SET  SQL_MODE = "NO_AUTO_VALUE_ON_ZERO"',
            'SET  AUTOCOMMIT = 0',
            'SET  time_zone = "+00:00"',
            'SET  @OLD_CHARACTER_SET_CLIENT = @@CHARACTER_SET_CLIENT',
            'SET  @OLD_CHARACTER_SET_RESULTS = @@CHARACTER_SET_RESULTS',
            'SET  @OLD_COLLATION_CONNECTION = @@COLLATION_CONNECTION',
            'SET NAMES utf8mb4',
            'SET  CHARACTER_SET_CLIENT = @OLD_CHARACTER_SET_CLIENT',
            'SET  CHARACTER_SET_RESULTS = @OLD_CHARACTER_SET_RESULTS',
            'SET  COLLATION_CONNECTION = @OLD_COLLATION_CONNECTION',
        ], $collectedSetStatements);

        foreach ($parser->statements as $stmt) {
            // Check they all build
            $this->assertIsString($stmt->build());
        }
    }

    #[DataProvider('exportFileProvider')]
    public function testParseExport(string $test): void
    {
        $this->runParserTest($test);
    }

    /**
     * @return string[][]
     */
    public static function exportFileProvider(): array
    {
        return [
            ['parser/parsephpMyAdminExport1'],
        ];
    }
}