mirror of
https://gitlab.com/signalytic/client-external/streamline/streamline-emr.git
synced 2026-09-12 03:01:32 +00:00
resolved conflicts
This commit is contained in:
+114
@@ -0,0 +1,114 @@
|
||||
<?php
|
||||
|
||||
declare(strict_types=1);
|
||||
|
||||
namespace PhpMyAdmin\SqlParser\Tests\Parser;
|
||||
|
||||
use PhpMyAdmin\SqlParser\Tests\TestCase;
|
||||
|
||||
class AlterStatementTest extends TestCase
|
||||
{
|
||||
/**
|
||||
* @dataProvider alterProvider
|
||||
*/
|
||||
public function testAlter(string $test): void
|
||||
{
|
||||
$this->runParserTest($test);
|
||||
}
|
||||
|
||||
/**
|
||||
* @return string[][]
|
||||
*/
|
||||
public static function alterProvider(): array
|
||||
{
|
||||
return [
|
||||
['parser/parseAlter'],
|
||||
['parser/parseAlter2'],
|
||||
['parser/parseAlter3'],
|
||||
['parser/parseAlter4'],
|
||||
['parser/parseAlter5'],
|
||||
['parser/parseAlter6'],
|
||||
['parser/parseAlter7'],
|
||||
['parser/parseAlter8'],
|
||||
['parser/parseAlter9'],
|
||||
['parser/parseAlter10'],
|
||||
['parser/parseAlter11'],
|
||||
['parser/parseAlter12'],
|
||||
['parser/parseAlter13'],
|
||||
['parser/parseAlter14'],
|
||||
['parser/parseAlterErr'],
|
||||
['parser/parseAlterErr2'],
|
||||
['parser/parseAlterErr3'],
|
||||
['parser/parseAlterErr4'],
|
||||
['parser/parseAlterTableRenameIndex1'],
|
||||
['parser/parseAlterTableRenameIndex2'],
|
||||
['parser/parseAlterTableRenameKey1'],
|
||||
['parser/parseAlterTableRenameKey2'],
|
||||
['parser/parseAlterTablePartitionByRange1'],
|
||||
['parser/parseAlterTablePartitionByRange2'],
|
||||
['parser/parseAlterTableCoalescePartition'],
|
||||
['parser/parseAlterTableAddColumnWithCheck'],
|
||||
['parser/parseAlterTableAddSpatialIndex1'],
|
||||
['parser/parseAlterTableDropAddIndex1'],
|
||||
['parser/parseAlterTableDropColumn1'],
|
||||
['parser/parseAlterTableModifyColumn'],
|
||||
['parser/parseAlterTableModifyColumnEnum1'],
|
||||
['parser/parseAlterTableModifyColumnEnum2'],
|
||||
['parser/parseAlterTableModifyColumnEnum3'],
|
||||
['parser/parseAlterWithInvisible'],
|
||||
['parser/parseAlterTableCharacterSet1'],
|
||||
['parser/parseAlterTableCharacterSet2'],
|
||||
['parser/parseAlterTableCharacterSet3'],
|
||||
['parser/parseAlterTableCharacterSet4'],
|
||||
['parser/parseAlterTableCharacterSet5'],
|
||||
['parser/parseAlterTableCharacterSet6'],
|
||||
['parser/parseAlterTableCharacterSet7'],
|
||||
['parser/parseAlterUser'],
|
||||
['parser/parseAlterUser1'],
|
||||
['parser/parseAlterUser2'],
|
||||
['parser/parseAlterUser3'],
|
||||
['parser/parseAlterUser4'],
|
||||
['parser/parseAlterUser5'],
|
||||
['parser/parseAlterUser6'],
|
||||
['parser/parseAlterUser7'],
|
||||
['parser/parseAlterUser8'],
|
||||
['parser/parseAlterUser9'],
|
||||
['parser/parseAlterUser10'],
|
||||
['parser/parseAlterEvent'],
|
||||
['parser/parseAlterEvent2'],
|
||||
['parser/parseAlterEvent3'],
|
||||
['parser/parseAlterEvent4'],
|
||||
['parser/parseAlterEvent5'],
|
||||
['parser/parseAlterEvent6'],
|
||||
['parser/parseAlterEvent7'],
|
||||
['parser/parseAlterEvent8'],
|
||||
['parser/parseAlterEvent9'],
|
||||
['parser/parseAlterEventComplete'],
|
||||
['parser/parseAlterEventErr'],
|
||||
['parser/parseAlterEventOnScheduleAt'],
|
||||
['parser/parseAlterEventOnScheduleAt2'],
|
||||
['parser/parseAlterEventOnScheduleEvery'],
|
||||
['parser/parseAlterEventOnScheduleEvery2'],
|
||||
['parser/parseAlterEventOnScheduleEvery3'],
|
||||
['parser/parseAlterEventOnScheduleEvery4'],
|
||||
['parser/parseAlterEventOnScheduleEvery5'],
|
||||
['parser/parseAlterEventOnScheduleEvery6'],
|
||||
['parser/parseAlterEventWithDefiner'],
|
||||
['parser/parseAlterEventWithOtherDefiners'],
|
||||
['parser/parseAlterRenameColumn'],
|
||||
['parser/parseAlterRenameColumns'],
|
||||
['parser/parseAlterFunction1'],
|
||||
['parser/parseAlterFunction2'],
|
||||
['parser/parseAlterFunction3'],
|
||||
['parser/parseAlterFunction4'],
|
||||
['parser/parseAlterFunction5'],
|
||||
['parser/parseAlterFunction6'],
|
||||
['parser/parseAlterProcedure1'],
|
||||
['parser/parseAlterProcedure2'],
|
||||
['parser/parseAlterProcedure3'],
|
||||
['parser/parseAlterProcedure4'],
|
||||
['parser/parseAlterProcedure5'],
|
||||
['parser/parseAlterProcedure6'],
|
||||
];
|
||||
}
|
||||
}
|
||||
+31
@@ -0,0 +1,31 @@
|
||||
<?php
|
||||
|
||||
declare(strict_types=1);
|
||||
|
||||
namespace PhpMyAdmin\SqlParser\Tests\Parser;
|
||||
|
||||
use PhpMyAdmin\SqlParser\Tests\TestCase;
|
||||
|
||||
class AnalyzeStatementTest extends TestCase
|
||||
{
|
||||
/**
|
||||
* @dataProvider analyzeProvider
|
||||
*/
|
||||
public function testAnalyze(string $test): void
|
||||
{
|
||||
$this->runParserTest($test);
|
||||
}
|
||||
|
||||
/**
|
||||
* @return string[][]
|
||||
*/
|
||||
public static function analyzeProvider(): array
|
||||
{
|
||||
return [
|
||||
['parser/parseAnalyzeTable'],
|
||||
['parser/parseAnalyzeTable1'],
|
||||
['parser/parseAnalyzeErr1'],
|
||||
['parser/parseAnalyzeErr2'],
|
||||
];
|
||||
}
|
||||
}
|
||||
+32
@@ -0,0 +1,32 @@
|
||||
<?php
|
||||
|
||||
declare(strict_types=1);
|
||||
|
||||
namespace PhpMyAdmin\SqlParser\Tests\Parser;
|
||||
|
||||
use PhpMyAdmin\SqlParser\Tests\TestCase;
|
||||
|
||||
class CallStatementTest extends TestCase
|
||||
{
|
||||
/**
|
||||
* @dataProvider callProvider
|
||||
*/
|
||||
public function testCall(string $test): void
|
||||
{
|
||||
$this->runParserTest($test);
|
||||
}
|
||||
|
||||
/**
|
||||
* @return string[][]
|
||||
*/
|
||||
public static function callProvider(): array
|
||||
{
|
||||
return [
|
||||
['parser/parseCall'],
|
||||
['parser/parseCall2'],
|
||||
['parser/parseCall3'],
|
||||
['parser/parseCall4'],
|
||||
['parser/parseCall5'],
|
||||
];
|
||||
}
|
||||
}
|
||||
+88
@@ -0,0 +1,88 @@
|
||||
<?php
|
||||
|
||||
declare(strict_types=1);
|
||||
|
||||
namespace PhpMyAdmin\SqlParser\Tests\Parser;
|
||||
|
||||
use PhpMyAdmin\SqlParser\Tests\TestCase;
|
||||
|
||||
class CreateStatementTest extends TestCase
|
||||
{
|
||||
/**
|
||||
* @dataProvider createProvider
|
||||
*/
|
||||
public function testCreate(string $test): void
|
||||
{
|
||||
$this->runParserTest($test);
|
||||
}
|
||||
|
||||
/**
|
||||
* @return string[][]
|
||||
*/
|
||||
public static function createProvider(): array
|
||||
{
|
||||
return [
|
||||
['parser/parseCreateDatabase'],
|
||||
['parser/parseCreateDatabaseErr'],
|
||||
['parser/parseCreateFunction'],
|
||||
['parser/parseCreateFunctionErr1'],
|
||||
['parser/parseCreateFunctionErr2'],
|
||||
['parser/parseCreateFunctionErr3'],
|
||||
['parser/parseCreateProcedure'],
|
||||
['parser/parseCreateProcedure1'],
|
||||
['parser/parseCreateProcedure2'],
|
||||
['parser/parseCreateProcedure3'],
|
||||
['parser/parseCreateProcedure4'],
|
||||
['parser/parseCreateSchema'],
|
||||
['parser/parseCreateSchemaErr'],
|
||||
['parser/parseCreateTable'],
|
||||
['parser/parseCreateTable2'],
|
||||
['parser/parseCreateTable3'],
|
||||
['parser/parseCreateTable4'],
|
||||
['parser/parseCreateTable5'],
|
||||
['parser/parseCreateTable6'],
|
||||
['parser/parseCreateTable7'],
|
||||
['parser/parseCreateTable8'],
|
||||
['parser/parseCreateTable9'],
|
||||
['parser/parseCreateTable10'],
|
||||
['parser/parseCreateTable11'],
|
||||
['parser/parseCreateTable12'],
|
||||
['parser/parseCreateTable13'],
|
||||
['parser/parseCreateTable14'],
|
||||
['parser/parseCreateTable15'],
|
||||
['parser/parseCreateTable16'],
|
||||
['parser/parseCreateTable17'],
|
||||
['parser/parseCreateTable18'],
|
||||
['parser/parseCreateTableErr1'],
|
||||
['parser/parseCreateTableErr2'],
|
||||
['parser/parseCreateTableErr3'],
|
||||
['parser/parseCreateTableErr4'],
|
||||
['parser/parseCreateTableErr5'],
|
||||
['parser/parseCreateTableSelect'],
|
||||
['parser/parseCreateTableAsSelect'],
|
||||
['parser/parseCreateTableLike'],
|
||||
['parser/parseCreateTableSpatial'],
|
||||
['parser/parseCreateTableSRID'],
|
||||
['parser/parseCreateTableTimestampWithPrecision'],
|
||||
['parser/parseCreateTableEnforcedCheck'],
|
||||
['parser/parseCreateTableNotEnforcedCheck'],
|
||||
['parser/parseCreateTableWithInvisibleKey'],
|
||||
['parser/parseCreateTableWithParser'],
|
||||
['parser/parseCreateTrigger'],
|
||||
['parser/parseCreateUser1'],
|
||||
['parser/parseCreateUser2'],
|
||||
['parser/parseCreateView'],
|
||||
['parser/parseCreateView2'],
|
||||
['parser/parseCreateView3'],
|
||||
['parser/parseCreateView4'],
|
||||
['parser/parseCreateView5'],
|
||||
['parser/parseCreateViewMultiple'],
|
||||
['parser/parseCreateViewWithoutQuotes'],
|
||||
['parser/parseCreateViewWithQuotes'],
|
||||
['parser/parseCreateViewWithWrongSyntax'],
|
||||
['parser/parseCreateViewWithUnion'],
|
||||
['parser/parseCreateViewAsWithAs'],
|
||||
['parser/parseCreateOrReplaceView1'],
|
||||
];
|
||||
}
|
||||
}
|
||||
+52
@@ -0,0 +1,52 @@
|
||||
<?php
|
||||
|
||||
declare(strict_types=1);
|
||||
|
||||
namespace PhpMyAdmin\SqlParser\Tests\Parser;
|
||||
|
||||
use PhpMyAdmin\SqlParser\Tests\TestCase;
|
||||
|
||||
class DeleteStatementTest extends TestCase
|
||||
{
|
||||
/**
|
||||
* @dataProvider deleteProvider
|
||||
*/
|
||||
public function testDelete(string $test): void
|
||||
{
|
||||
$this->runParserTest($test);
|
||||
}
|
||||
|
||||
/**
|
||||
* @return string[][]
|
||||
*/
|
||||
public static function deleteProvider(): array
|
||||
{
|
||||
return [
|
||||
['parser/parseDelete'],
|
||||
['parser/parseDelete2'],
|
||||
['parser/parseDelete3'],
|
||||
['parser/parseDelete4'],
|
||||
['parser/parseDelete5'],
|
||||
['parser/parseDelete6'],
|
||||
['parser/parseDelete7'],
|
||||
['parser/parseDelete8'],
|
||||
['parser/parseDelete9'],
|
||||
['parser/parseDelete10'],
|
||||
['parser/parseDelete11'],
|
||||
['parser/parseDelete12'],
|
||||
['parser/parseDeleteErr1'],
|
||||
['parser/parseDeleteErr2'],
|
||||
['parser/parseDeleteErr3'],
|
||||
['parser/parseDeleteErr4'],
|
||||
['parser/parseDeleteErr5'],
|
||||
['parser/parseDeleteErr6'],
|
||||
['parser/parseDeleteErr7'],
|
||||
['parser/parseDeleteErr8'],
|
||||
['parser/parseDeleteErr9'],
|
||||
['parser/parseDeleteErr10'],
|
||||
['parser/parseDeleteErr11'],
|
||||
['parser/parseDeleteErr12'],
|
||||
['parser/parseDeleteJoin'],
|
||||
];
|
||||
}
|
||||
}
|
||||
+29
@@ -0,0 +1,29 @@
|
||||
<?php
|
||||
|
||||
declare(strict_types=1);
|
||||
|
||||
namespace PhpMyAdmin\SqlParser\Tests\Parser;
|
||||
|
||||
use PhpMyAdmin\SqlParser\Tests\TestCase;
|
||||
|
||||
class DropStatementTest extends TestCase
|
||||
{
|
||||
/**
|
||||
* @dataProvider dropProvider
|
||||
*/
|
||||
public function testDrop(string $test): void
|
||||
{
|
||||
$this->runParserTest($test);
|
||||
}
|
||||
|
||||
/**
|
||||
* @return string[][]
|
||||
*/
|
||||
public static function dropProvider(): array
|
||||
{
|
||||
return [
|
||||
['parser/parseDrop'],
|
||||
['parser/parseDrop2'],
|
||||
];
|
||||
}
|
||||
}
|
||||
+46
@@ -0,0 +1,46 @@
|
||||
<?php
|
||||
|
||||
declare(strict_types=1);
|
||||
|
||||
namespace PhpMyAdmin\SqlParser\Tests\Parser;
|
||||
|
||||
use PhpMyAdmin\SqlParser\Tests\TestCase;
|
||||
|
||||
class ExplainStatementTest extends TestCase
|
||||
{
|
||||
/**
|
||||
* @dataProvider explainProvider
|
||||
*/
|
||||
public function testExplain(string $test): void
|
||||
{
|
||||
$this->runParserTest($test);
|
||||
}
|
||||
|
||||
/**
|
||||
* @return string[][]
|
||||
*/
|
||||
public static function explainProvider(): array
|
||||
{
|
||||
return [
|
||||
['parser/parseExplain'],
|
||||
['parser/parseExplain1'],
|
||||
['parser/parseExplain2'],
|
||||
['parser/parseExplain3'],
|
||||
['parser/parseExplain4'],
|
||||
['parser/parseExplain5'],
|
||||
['parser/parseExplain6'],
|
||||
['parser/parseExplain7'],
|
||||
['parser/parseExplain8'],
|
||||
['parser/parseExplain9'],
|
||||
['parser/parseExplain10'],
|
||||
['parser/parseExplain11'],
|
||||
['parser/parseExplain12'],
|
||||
['parser/parseExplain13'],
|
||||
['parser/parseExplain14'],
|
||||
['parser/parseExplainErr'],
|
||||
['parser/parseExplainErr1'],
|
||||
['parser/parseExplainErr2'],
|
||||
['parser/parseExplainErr3'],
|
||||
];
|
||||
}
|
||||
}
|
||||
+37
@@ -0,0 +1,37 @@
|
||||
<?php
|
||||
|
||||
declare(strict_types=1);
|
||||
|
||||
namespace PhpMyAdmin\SqlParser\Tests\Parser;
|
||||
|
||||
use PhpMyAdmin\SqlParser\Tests\TestCase;
|
||||
|
||||
class InsertStatementTest extends TestCase
|
||||
{
|
||||
/**
|
||||
* @dataProvider insertProvider
|
||||
*/
|
||||
public function testInsert(string $test): void
|
||||
{
|
||||
$this->runParserTest($test);
|
||||
}
|
||||
|
||||
/**
|
||||
* @return string[][]
|
||||
*/
|
||||
public static function insertProvider(): array
|
||||
{
|
||||
return [
|
||||
['parser/parseInsert'],
|
||||
['parser/parseInsertFunction'],
|
||||
['parser/parseInsertSelect'],
|
||||
['parser/parseInsertOnDuplicateKey'],
|
||||
['parser/parseInsertSetOnDuplicateKey'],
|
||||
['parser/parseInsertSelectOnDuplicateKey'],
|
||||
['parser/parseInsertOnDuplicateKeyErr'],
|
||||
['parser/parseInsertErr'],
|
||||
['parser/parseInsertErr2'],
|
||||
['parser/parseInsertIntoErr'],
|
||||
];
|
||||
}
|
||||
}
|
||||
+69
@@ -0,0 +1,69 @@
|
||||
<?php
|
||||
|
||||
declare(strict_types=1);
|
||||
|
||||
namespace PhpMyAdmin\SqlParser\Tests\Parser;
|
||||
|
||||
use PhpMyAdmin\SqlParser\Parser;
|
||||
use PhpMyAdmin\SqlParser\Statements\KillStatement;
|
||||
use PhpMyAdmin\SqlParser\Tests\TestCase;
|
||||
|
||||
class KillStatementTest extends TestCase
|
||||
{
|
||||
/** @dataProvider killProvider */
|
||||
public function testKill(string $test): void
|
||||
{
|
||||
$this->runParserTest($test);
|
||||
}
|
||||
|
||||
/**
|
||||
* @return string[][]
|
||||
*/
|
||||
public static function killProvider(): array
|
||||
{
|
||||
return [
|
||||
['parser/parseKill'],
|
||||
['parser/parseKill2'],
|
||||
['parser/parseKill3'],
|
||||
['parser/parseKillConnection'],
|
||||
['parser/parseKillQuery'],
|
||||
['parser/parseKillErr1'],
|
||||
['parser/parseKillErr2'],
|
||||
['parser/parseKillErr3'],
|
||||
['parser/parseKillErr4'],
|
||||
];
|
||||
}
|
||||
|
||||
/** @dataProvider buildKillProvider */
|
||||
public function testBuildKill(string $sql): void
|
||||
{
|
||||
$parser = new Parser($sql);
|
||||
$this->assertCount(1, $parser->statements);
|
||||
$statement = $parser->statements[0];
|
||||
$this->assertInstanceOf(KillStatement::class, $statement);
|
||||
$builtSql = $statement->build();
|
||||
$this->assertEquals($sql, $builtSql);
|
||||
}
|
||||
|
||||
/**
|
||||
* @return array<int, array<int, string>>
|
||||
* @psalm-return list<list<string>>
|
||||
*/
|
||||
public static function buildKillProvider(): array
|
||||
{
|
||||
return [
|
||||
['KILL (SELECT 3 + 4)'],
|
||||
['KILL QUERY 4'],
|
||||
['KILL CONNECTION 5'],
|
||||
['KILL 6'],
|
||||
['KILL QUERY (SELECT 7)'],
|
||||
['KILL SOFT QUERY (SELECT 8)'],
|
||||
['KILL HARD 9'],
|
||||
['KILL USER 10'],
|
||||
['KILL SOFT (SELECT 1)'],
|
||||
['KILL (2)'],
|
||||
['KILL QUERY ID (2)'],
|
||||
['KILL QUERY ID (SELECT ID FROM INFORMATION_SCHEMA.PROCESSLIST LIMIT 0, 1)'],
|
||||
];
|
||||
}
|
||||
}
|
||||
+50
@@ -0,0 +1,50 @@
|
||||
<?php
|
||||
|
||||
declare(strict_types=1);
|
||||
|
||||
namespace PhpMyAdmin\SqlParser\Tests\Parser;
|
||||
|
||||
use PhpMyAdmin\SqlParser\Parser;
|
||||
use PhpMyAdmin\SqlParser\Tests\TestCase;
|
||||
|
||||
class LoadStatementTest extends TestCase
|
||||
{
|
||||
public function testLoadOptions(): void
|
||||
{
|
||||
$data = $this->getData('parser/parseLoad1');
|
||||
$parser = new Parser($data['query']);
|
||||
$stmt = $parser->statements[0];
|
||||
$this->assertEquals(10, $stmt->options->has('CONCURRENT'));
|
||||
}
|
||||
|
||||
/**
|
||||
* @dataProvider loadProvider
|
||||
*/
|
||||
public function testLoad(string $test): void
|
||||
{
|
||||
$this->runParserTest($test);
|
||||
}
|
||||
|
||||
/**
|
||||
* @return string[][]
|
||||
*/
|
||||
public static function loadProvider(): array
|
||||
{
|
||||
return [
|
||||
['parser/parseLoad1'],
|
||||
['parser/parseLoad2'],
|
||||
['parser/parseLoad3'],
|
||||
['parser/parseLoad4'],
|
||||
['parser/parseLoad5'],
|
||||
['parser/parseLoad6'],
|
||||
['parser/parseLoad7'],
|
||||
['parser/parseLoad8'],
|
||||
['parser/parseLoadErr1'],
|
||||
['parser/parseLoadErr2'],
|
||||
['parser/parseLoadErr3'],
|
||||
['parser/parseLoadErr4'],
|
||||
['parser/parseLoadErr5'],
|
||||
['parser/parseLoadErr6'],
|
||||
];
|
||||
}
|
||||
}
|
||||
+44
@@ -0,0 +1,44 @@
|
||||
<?php
|
||||
|
||||
declare(strict_types=1);
|
||||
|
||||
namespace PhpMyAdmin\SqlParser\Tests\Parser;
|
||||
|
||||
use PhpMyAdmin\SqlParser\Tests\TestCase;
|
||||
|
||||
class LockStatementTest extends TestCase
|
||||
{
|
||||
/**
|
||||
* @dataProvider lockProvider
|
||||
*/
|
||||
public function testLock(string $test): void
|
||||
{
|
||||
$this->runParserTest($test);
|
||||
}
|
||||
|
||||
/**
|
||||
* @return string[][]
|
||||
*/
|
||||
public static function lockProvider(): array
|
||||
{
|
||||
return [
|
||||
['parser/parseLock1'],
|
||||
['parser/parseLock2'],
|
||||
['parser/parseLock3'],
|
||||
['parser/parseLock4'],
|
||||
['parser/parseLock5'],
|
||||
['parser/parseLockErr1'],
|
||||
['parser/parseLockErr2'],
|
||||
['parser/parseLockErr3'],
|
||||
['parser/parseLockErr4'],
|
||||
['parser/parseLockErr5'],
|
||||
['parser/parseLockErr6'],
|
||||
['parser/parseLockErr7'],
|
||||
['parser/parseLockErr8'],
|
||||
['parser/parseLockErr9'],
|
||||
['parser/parseLockErr10'],
|
||||
['parser/parseUnlock1'],
|
||||
['parser/parseUnlockErr1'],
|
||||
];
|
||||
}
|
||||
}
|
||||
+120
@@ -0,0 +1,120 @@
|
||||
<?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;
|
||||
|
||||
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'],
|
||||
];
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,85 @@
|
||||
<?php
|
||||
|
||||
declare(strict_types=1);
|
||||
|
||||
namespace PhpMyAdmin\SqlParser\Tests\Parser;
|
||||
|
||||
use PhpMyAdmin\SqlParser\Exceptions\ParserException;
|
||||
use PhpMyAdmin\SqlParser\Parser;
|
||||
use PhpMyAdmin\SqlParser\Tests\TestCase;
|
||||
use PhpMyAdmin\SqlParser\Token;
|
||||
use PhpMyAdmin\SqlParser\TokensList;
|
||||
|
||||
use function sprintf;
|
||||
|
||||
class ParserTest extends TestCase
|
||||
{
|
||||
/**
|
||||
* @dataProvider parseProvider
|
||||
*/
|
||||
public function testParse(string $test): void
|
||||
{
|
||||
$this->runParserTest($test);
|
||||
}
|
||||
|
||||
/**
|
||||
* @return string[][]
|
||||
*/
|
||||
public static function parseProvider(): array
|
||||
{
|
||||
return [
|
||||
['parser/parse'],
|
||||
['parser/parse2'],
|
||||
['parser/parseDelimiter'],
|
||||
];
|
||||
}
|
||||
|
||||
public function testUnrecognizedStatement(): void
|
||||
{
|
||||
$parser = new Parser('SELECT 1; FROM');
|
||||
$this->assertEquals(
|
||||
'Unrecognized statement type.',
|
||||
$parser->errors[0]->getMessage()
|
||||
);
|
||||
}
|
||||
|
||||
public function testUnrecognizedKeyword(): void
|
||||
{
|
||||
$parser = new Parser('SELECT 1 FROM foo PARTITION(bar, baz) AS');
|
||||
$this->assertEquals(
|
||||
'Unrecognized keyword.',
|
||||
$parser->errors[0]->getMessage()
|
||||
);
|
||||
}
|
||||
|
||||
/**
|
||||
* @runInSeparateProcess
|
||||
* @preserveGlobalState disabled
|
||||
*/
|
||||
public function testError(): void
|
||||
{
|
||||
$parser = new Parser(new TokensList());
|
||||
|
||||
$parser->error('error #1', new Token('foo'), 1);
|
||||
$parser->error(sprintf('%2$s #%1$d', 2, 'error'), new Token('bar'), 2);
|
||||
|
||||
$this->assertEquals(
|
||||
$parser->errors,
|
||||
[
|
||||
new ParserException('error #1', new Token('foo'), 1),
|
||||
new ParserException('error #2', new Token('bar'), 2),
|
||||
]
|
||||
);
|
||||
}
|
||||
|
||||
public function testErrorStrict(): void
|
||||
{
|
||||
$this->expectExceptionCode(3);
|
||||
$this->expectExceptionMessage('strict error');
|
||||
$this->expectException(ParserException::class);
|
||||
$parser = new Parser(new TokensList());
|
||||
$parser->strict = true;
|
||||
|
||||
$parser->error('strict error', new Token('foo'), 3);
|
||||
}
|
||||
}
|
||||
+34
@@ -0,0 +1,34 @@
|
||||
<?php
|
||||
|
||||
declare(strict_types=1);
|
||||
|
||||
namespace PhpMyAdmin\SqlParser\Tests\Parser;
|
||||
|
||||
use PhpMyAdmin\SqlParser\Tests\TestCase;
|
||||
|
||||
class PurgeStatementTest extends TestCase
|
||||
{
|
||||
/**
|
||||
* @dataProvider purgeProvider
|
||||
*/
|
||||
public function testPurge(string $test): void
|
||||
{
|
||||
$this->runParserTest($test);
|
||||
}
|
||||
|
||||
/**
|
||||
* @return string[][]
|
||||
*/
|
||||
public static function purgeProvider(): array
|
||||
{
|
||||
return [
|
||||
['parser/parsePurge'],
|
||||
['parser/parsePurge2'],
|
||||
['parser/parsePurge3'],
|
||||
['parser/parsePurge4'],
|
||||
['parser/parsePurgeErr'],
|
||||
['parser/parsePurgeErr2'],
|
||||
['parser/parsePurgeErr3'],
|
||||
];
|
||||
}
|
||||
}
|
||||
+34
@@ -0,0 +1,34 @@
|
||||
<?php
|
||||
|
||||
declare(strict_types=1);
|
||||
|
||||
namespace PhpMyAdmin\SqlParser\Tests\Parser;
|
||||
|
||||
use PhpMyAdmin\SqlParser\Tests\TestCase;
|
||||
|
||||
class RenameStatementTest extends TestCase
|
||||
{
|
||||
/**
|
||||
* @dataProvider renameProvider
|
||||
*/
|
||||
public function testRename(string $test): void
|
||||
{
|
||||
$this->runParserTest($test);
|
||||
}
|
||||
|
||||
/**
|
||||
* @return string[][]
|
||||
*/
|
||||
public static function renameProvider(): array
|
||||
{
|
||||
return [
|
||||
['parser/parseRename'],
|
||||
['parser/parseRename2'],
|
||||
['parser/parseRenameErr1'],
|
||||
['parser/parseRenameErr2'],
|
||||
['parser/parseRenameErr3'],
|
||||
['parser/parseRenameErr4'],
|
||||
['parser/parseRenameErr5'],
|
||||
];
|
||||
}
|
||||
}
|
||||
+36
@@ -0,0 +1,36 @@
|
||||
<?php
|
||||
|
||||
declare(strict_types=1);
|
||||
|
||||
namespace PhpMyAdmin\SqlParser\Tests\Parser;
|
||||
|
||||
use PhpMyAdmin\SqlParser\Tests\TestCase;
|
||||
|
||||
class ReplaceStatementTest extends TestCase
|
||||
{
|
||||
/**
|
||||
* @dataProvider replaceProvider
|
||||
*/
|
||||
public function testReplace(string $test): void
|
||||
{
|
||||
$this->runParserTest($test);
|
||||
}
|
||||
|
||||
/**
|
||||
* @return string[][]
|
||||
*/
|
||||
public static function replaceProvider(): array
|
||||
{
|
||||
return [
|
||||
['parser/parseReplace'],
|
||||
['parser/parseReplace2'],
|
||||
['parser/parseReplaceValues'],
|
||||
['parser/parseReplaceSet'],
|
||||
['parser/parseReplaceSelect'],
|
||||
['parser/parseReplaceErr'],
|
||||
['parser/parseReplaceErr2'],
|
||||
['parser/parseReplaceErr3'],
|
||||
['parser/parseReplaceIntoErr'],
|
||||
];
|
||||
}
|
||||
}
|
||||
+28
@@ -0,0 +1,28 @@
|
||||
<?php
|
||||
|
||||
declare(strict_types=1);
|
||||
|
||||
namespace PhpMyAdmin\SqlParser\Tests\Parser;
|
||||
|
||||
use PhpMyAdmin\SqlParser\Tests\TestCase;
|
||||
|
||||
class RestoreStatementTest extends TestCase
|
||||
{
|
||||
/**
|
||||
* @dataProvider restoreProvider
|
||||
*/
|
||||
public function testRestore(string $test): void
|
||||
{
|
||||
$this->runParserTest($test);
|
||||
}
|
||||
|
||||
/**
|
||||
* @return string[][]
|
||||
*/
|
||||
public static function restoreProvider(): array
|
||||
{
|
||||
return [
|
||||
['parser/parseRestore'],
|
||||
];
|
||||
}
|
||||
}
|
||||
+110
@@ -0,0 +1,110 @@
|
||||
<?php
|
||||
|
||||
declare(strict_types=1);
|
||||
|
||||
namespace PhpMyAdmin\SqlParser\Tests\Parser;
|
||||
|
||||
use PhpMyAdmin\SqlParser\Parser;
|
||||
use PhpMyAdmin\SqlParser\Tests\TestCase;
|
||||
|
||||
class SelectStatementTest extends TestCase
|
||||
{
|
||||
public function testSelectOptions(): void
|
||||
{
|
||||
$data = $this->getData('parser/parseSelect');
|
||||
$parser = new Parser($data['query']);
|
||||
$stmt = $parser->statements[0];
|
||||
$this->assertEquals(10, $stmt->options->has('MAX_STATEMENT_TIME'));
|
||||
}
|
||||
|
||||
/**
|
||||
* @dataProvider selectProvider
|
||||
*/
|
||||
public function testSelect(string $test): void
|
||||
{
|
||||
$this->runParserTest($test);
|
||||
}
|
||||
|
||||
/**
|
||||
* @return string[][]
|
||||
*/
|
||||
public static function selectProvider(): array
|
||||
{
|
||||
return [
|
||||
['parser/parseSelect2'],
|
||||
['parser/parseSelect3'],
|
||||
['parser/parseSelect4'],
|
||||
['parser/parseSelect5'],
|
||||
['parser/parseSelect6'],
|
||||
['parser/parseSelect7'],
|
||||
['parser/parseSelect8'],
|
||||
['parser/parseSelect9'],
|
||||
['parser/parseSelect10'],
|
||||
['parser/parseSelect11'],
|
||||
['parser/parseSelect12'],
|
||||
['parser/parseSelect13'],
|
||||
['parser/parseSelect14'],
|
||||
['parser/parseSelect15'],
|
||||
['parser/parseSelect16'],
|
||||
['parser/parseSelectAggregateWithPartitionAndAlias'],
|
||||
['parser/parseSelectErr1'],
|
||||
['parser/parseSelectErr2'],
|
||||
['parser/parseSelectNested'],
|
||||
['parser/parseSelectCase1'],
|
||||
['parser/parseSelectCase2'],
|
||||
['parser/parseSelectCase3'],
|
||||
['parser/parseSelectCase4'],
|
||||
['parser/parseSelectCase5'],
|
||||
['parser/parseSelectCaseErr1'],
|
||||
['parser/parseSelectCaseErr2'],
|
||||
['parser/parseSelectCaseErr3'],
|
||||
['parser/parseSelectCaseErr4'],
|
||||
['parser/parseSelectCaseErr5'],
|
||||
['parser/parseSelectCaseAlias1'],
|
||||
['parser/parseSelectCaseAlias2'],
|
||||
['parser/parseSelectCaseAlias3'],
|
||||
['parser/parseSelectCaseAlias4'],
|
||||
['parser/parseSelectCaseAlias5'],
|
||||
['parser/parseSelectCaseAlias6'],
|
||||
['parser/parseSelectCaseAliasErr1'],
|
||||
['parser/parseSelectCaseAliasErr2'],
|
||||
['parser/parseSelectCaseAliasErr3'],
|
||||
['parser/parseSelectCaseAliasErr4'],
|
||||
['parser/parseSelectExists'],
|
||||
['parser/parseSelectIntoOptions1'],
|
||||
['parser/parseSelectIntoOptions2'],
|
||||
['parser/parseSelectIntoOptions3'],
|
||||
['parser/parseSelectJoinCross'],
|
||||
['parser/parseSelectJoinNatural'],
|
||||
['parser/parseSelectJoinNaturalLeft'],
|
||||
['parser/parseSelectJoinNaturalRight'],
|
||||
['parser/parseSelectJoinNaturalLeftOuter'],
|
||||
['parser/parseSelectJoinNaturalRightOuter'],
|
||||
['parser/parseSelectJoinMultiple'],
|
||||
['parser/parseSelectJoinMultiple2'],
|
||||
['parser/parseSelectWrongOrder'],
|
||||
['parser/parseSelectWrongOrder2'],
|
||||
['parser/parseSelectEndOptions1'],
|
||||
['parser/parseSelectEndOptions2'],
|
||||
['parser/parseSelectEndOptionsErr'],
|
||||
['parser/parseSelectUnion'],
|
||||
['parser/parseSelectUnion2'],
|
||||
['parser/parseSelectWhere'],
|
||||
['parser/parseSelectWhereCollate'],
|
||||
['parser/parseSelectIndexHint1'],
|
||||
['parser/parseSelectIndexHint2'],
|
||||
['parser/parseSelectOrderByIsNull'],
|
||||
['parser/parseSelectIndexHintErr1'],
|
||||
['parser/parseSelectIndexHintErr2'],
|
||||
['parser/parseSelectIndexHintErr3'],
|
||||
['parser/parseSelectIndexHintErr4'],
|
||||
['parser/parseSelectWithParenthesis'],
|
||||
['parser/parseSelectOrderByComment'],
|
||||
['parser/parseSelectOverAlias_mariadb_100600'],
|
||||
['parser/parseSelectGroupBy'],
|
||||
['parser/parseSelectGroupByErr'],
|
||||
['parser/parseSelectGroupByWithComments'],
|
||||
['parser/parseTable1'],
|
||||
];
|
||||
}
|
||||
}
|
||||
+39
@@ -0,0 +1,39 @@
|
||||
<?php
|
||||
|
||||
declare(strict_types=1);
|
||||
|
||||
namespace PhpMyAdmin\SqlParser\Tests\Parser;
|
||||
|
||||
use PhpMyAdmin\SqlParser\Tests\TestCase;
|
||||
|
||||
class SetStatementTest extends TestCase
|
||||
{
|
||||
/**
|
||||
* @dataProvider setProvider
|
||||
*/
|
||||
public function testSet(string $test): void
|
||||
{
|
||||
$this->runParserTest($test);
|
||||
}
|
||||
|
||||
/**
|
||||
* @return string[][]
|
||||
*/
|
||||
public static function setProvider(): array
|
||||
{
|
||||
return [
|
||||
['parser/parseSetCharset'],
|
||||
['parser/parseSetCharsetError'],
|
||||
['parser/parseSetCharacterSet'],
|
||||
['parser/parseSetCharacterSetError'],
|
||||
['parser/parseAlterTableSetAutoIncrementError'],
|
||||
['parser/parseSetNames'],
|
||||
['parser/parseSetNamesError'],
|
||||
['parser/parseSetError1'],
|
||||
['parser/parseInsertIntoSet'],
|
||||
['parser/parseSetVariable'],
|
||||
['parser/parseSetVariable2'],
|
||||
['parser/parseSetGlobalVariable'],
|
||||
];
|
||||
}
|
||||
}
|
||||
+47
@@ -0,0 +1,47 @@
|
||||
<?php
|
||||
|
||||
declare(strict_types=1);
|
||||
|
||||
namespace PhpMyAdmin\SqlParser\Tests\Parser;
|
||||
|
||||
use PhpMyAdmin\SqlParser\Parser;
|
||||
use PhpMyAdmin\SqlParser\Tests\TestCase;
|
||||
|
||||
class TransactionStatementTest extends TestCase
|
||||
{
|
||||
public function testBuildWithoutEnd(): void
|
||||
{
|
||||
$data = $this->getData('parser/parseTransaction4');
|
||||
$parser = new Parser($data['query']);
|
||||
$stmt = $parser->statements[0];
|
||||
$this->assertEquals(
|
||||
'START TRANSACTION;SET time_zone = "+00:00";',
|
||||
$stmt->build()
|
||||
);
|
||||
}
|
||||
|
||||
/**
|
||||
* @dataProvider transactionProvider
|
||||
*/
|
||||
public function testTransaction(string $test): void
|
||||
{
|
||||
$this->runParserTest($test);
|
||||
}
|
||||
|
||||
/**
|
||||
* @return string[][]
|
||||
*/
|
||||
public static function transactionProvider(): array
|
||||
{
|
||||
return [
|
||||
['parser/parseTransaction'],
|
||||
['parser/parseTransaction2'],
|
||||
['parser/parseTransaction3'],
|
||||
['parser/parseTransaction4'],
|
||||
['parser/parseTransaction5'],
|
||||
['parser/parseTransaction6'],
|
||||
['parser/parseTransaction7'],
|
||||
['parser/parseTransactionErr1'],
|
||||
];
|
||||
}
|
||||
}
|
||||
+36
@@ -0,0 +1,36 @@
|
||||
<?php
|
||||
|
||||
declare(strict_types=1);
|
||||
|
||||
namespace PhpMyAdmin\SqlParser\Tests\Parser;
|
||||
|
||||
use PhpMyAdmin\SqlParser\Tests\TestCase;
|
||||
|
||||
class UpdateStatementTest extends TestCase
|
||||
{
|
||||
/**
|
||||
* @dataProvider updateProvider
|
||||
*/
|
||||
public function testUpdate(string $test): void
|
||||
{
|
||||
$this->runParserTest($test);
|
||||
}
|
||||
|
||||
/**
|
||||
* @return string[][]
|
||||
*/
|
||||
public static function updateProvider(): array
|
||||
{
|
||||
return [
|
||||
['parser/parseUpdate1'],
|
||||
['parser/parseUpdate2'],
|
||||
['parser/parseUpdate3'],
|
||||
['parser/parseUpdate4'],
|
||||
['parser/parseUpdate5'],
|
||||
['parser/parseUpdate6'],
|
||||
['parser/parseUpdate7'],
|
||||
['parser/parseUpdateErr'],
|
||||
['parser/parseUpdateEmptySet'],
|
||||
];
|
||||
}
|
||||
}
|
||||
+148
@@ -0,0 +1,148 @@
|
||||
<?php
|
||||
|
||||
declare(strict_types=1);
|
||||
|
||||
namespace PhpMyAdmin\SqlParser\Tests\Parser;
|
||||
|
||||
use PhpMyAdmin\SqlParser\Components\WithKeyword;
|
||||
use PhpMyAdmin\SqlParser\Lexer;
|
||||
use PhpMyAdmin\SqlParser\Parser;
|
||||
use PhpMyAdmin\SqlParser\Tests\TestCase;
|
||||
use stdClass;
|
||||
|
||||
class WithStatementTest extends TestCase
|
||||
{
|
||||
/**
|
||||
* @dataProvider parseWith
|
||||
*/
|
||||
public function testParse(string $test): void
|
||||
{
|
||||
$this->runParserTest($test);
|
||||
}
|
||||
|
||||
/**
|
||||
* @return string[][]
|
||||
*/
|
||||
public static function parseWith(): array
|
||||
{
|
||||
return [
|
||||
['parser/parseWithStatement'],
|
||||
['parser/parseWithStatement1'],
|
||||
['parser/parseWithStatement2'],
|
||||
['parser/parseWithStatement3'],
|
||||
['parser/parseWithStatement4'],
|
||||
['parser/parseWithStatement5'],
|
||||
['parser/parseWithStatement6'],
|
||||
['parser/parseWithStatement7'],
|
||||
['parser/parseWithStatementErr'],
|
||||
['parser/parseWithStatementErr1'],
|
||||
['parser/parseWithStatementErr2'],
|
||||
['parser/parseWithStatementErr3'],
|
||||
['parser/parseWithStatementErr4'],
|
||||
['parser/parseWithStatementErr5'],
|
||||
['parser/parseWithStatementErr6'],
|
||||
['parser/parseWithStatementErr7'],
|
||||
['parser/parseWithStatementErr8'],
|
||||
];
|
||||
}
|
||||
|
||||
public function testWith(): void
|
||||
{
|
||||
$sql = <<<SQL
|
||||
WITH categories(identifier, name, parent_id) AS (
|
||||
SELECT c.identifier, c.name, c.parent_id FROM category c WHERE c.identifier = 'a'
|
||||
UNION ALL
|
||||
SELECT c.identifier, c.name, c.parent_id FROM categories, category c WHERE c.identifier = categories.parent_id
|
||||
), foo AS ( SELECT * FROM test )
|
||||
SELECT * FROM categories
|
||||
SQL;
|
||||
|
||||
$lexer = new Lexer($sql);
|
||||
|
||||
$lexerErrors = $this->getErrorsAsArray($lexer);
|
||||
$this->assertCount(0, $lexerErrors);
|
||||
$parser = new Parser($lexer->list);
|
||||
$parserErrors = $this->getErrorsAsArray($parser);
|
||||
$this->assertCount(0, $parserErrors);
|
||||
$this->assertCount(1, $parser->statements);
|
||||
|
||||
// phpcs:disable Generic.Files.LineLength.TooLong
|
||||
$expected = <<<SQL
|
||||
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) SELECT * FROM categories
|
||||
SQL;
|
||||
// phpcs:enable
|
||||
$this->assertEquals($expected, $parser->statements[0]->build());
|
||||
}
|
||||
|
||||
public function testWithHasErrors(): void
|
||||
{
|
||||
$sql = <<<SQL
|
||||
WITH categories(identifier, name, parent_id) AS (
|
||||
SOMETHING * FROM foo
|
||||
)
|
||||
SELECT * FROM categories
|
||||
SQL;
|
||||
|
||||
$lexer = new Lexer($sql);
|
||||
|
||||
$lexerErrors = $this->getErrorsAsArray($lexer);
|
||||
$this->assertCount(0, $lexerErrors);
|
||||
$parser = new Parser($lexer->list);
|
||||
$parserErrors = $this->getErrorsAsArray($parser);
|
||||
$this->assertCount(4, $parserErrors);
|
||||
}
|
||||
|
||||
public function testWithEmbedParenthesis(): void
|
||||
{
|
||||
$sql = <<<SQL
|
||||
WITH categories AS (
|
||||
SELECT * FROM (SELECT * FROM foo)
|
||||
)
|
||||
SELECT * FROM categories
|
||||
SQL;
|
||||
|
||||
$lexer = new Lexer($sql);
|
||||
$lexerErrors = $this->getErrorsAsArray($lexer);
|
||||
$this->assertCount(0, $lexerErrors);
|
||||
$parser = new Parser($lexer->list);
|
||||
$parserErrors = $this->getErrorsAsArray($parser);
|
||||
$this->assertCount(0, $parserErrors);
|
||||
|
||||
// phpcs:disable Generic.Files.LineLength.TooLong
|
||||
$expected = <<<SQL
|
||||
WITH categories AS (SELECT * FROM (SELECT * FROM foo)) SELECT * FROM categories
|
||||
SQL;
|
||||
// phpcs:enable
|
||||
$this->assertEquals($expected, $parser->statements[0]->build());
|
||||
}
|
||||
|
||||
public function testWithHasUnclosedParenthesis(): void
|
||||
{
|
||||
$sql = <<<SQL
|
||||
WITH categories(identifier, name, parent_id) AS (
|
||||
SELECT * FROM (SELECT * FROM foo
|
||||
)
|
||||
SELECT * FROM categories
|
||||
SQL;
|
||||
|
||||
$lexer = new Lexer($sql);
|
||||
|
||||
$lexerErrors = $this->getErrorsAsArray($lexer);
|
||||
$this->assertCount(0, $lexerErrors);
|
||||
$parser = new Parser($lexer->list);
|
||||
$parserErrors = $this->getErrorsAsArray($parser);
|
||||
$this->assertEquals($parserErrors[0][0], 'A closing bracket was expected.');
|
||||
}
|
||||
|
||||
public function testBuildWrongWithKeyword(): void
|
||||
{
|
||||
$this->expectExceptionMessage('Can not build a component that is not a WithKeyword');
|
||||
WithKeyword::build(new stdClass());
|
||||
}
|
||||
|
||||
public function testBuildBadWithKeyword(): void
|
||||
{
|
||||
$this->expectExceptionMessage('No statement inside WITH');
|
||||
WithKeyword::build(new WithKeyword('test'));
|
||||
}
|
||||
}
|
||||
Reference in New Issue
Block a user