Skip to content

Commit 9ed9cc3

Browse files
committed
Merge branch 'QA'
Signed-off-by: William Desportes <[email protected]>
2 parents de9009d + 365f758 commit 9ed9cc3

File tree

9 files changed

+48
-1
lines changed

9 files changed

+48
-1
lines changed

CHANGELOG.md

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -6,6 +6,8 @@
66
* Prevent overwrite of offset in Limit clause by parenthesis (#275)
77
* Allow SCHEMA to be used in CREATE Database statement (#231)
88
* Add missing options in SET statement (#255)
9+
* Add support for DROP USER statement (#259)
10+
* Fix php error "undefined index" when replacing a non existing clause (#249)
911

1012
## [5.1.0] - 2019-11-12
1113

src/Statements/DropStatement.php

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -32,6 +32,7 @@ class DropStatement extends Statement
3232
'VIEW' => 1,
3333
'TABLESPACE' => 1,
3434
'TRIGGER' => 1,
35+
'USER' => 1,
3536

3637
'TEMPORARY' => 2,
3738
'IF EXISTS' => 3,

src/Utils/Query.php

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -587,7 +587,7 @@ public static function getClause($statement, $list, $clause, $type = 0, $skipFir
587587
*
588588
* @var int
589589
*/
590-
$clauseIdx = $clauses[$clauseType];
590+
$clauseIdx = isset($clauses[$clauseType]) ? $clauses[$clauseType] : -1;
591591

592592
$firstClauseIdx = $clauseIdx;
593593
$lastClauseIdx = $clauseIdx;

tests/Parser/DropStatementTest.php

Lines changed: 26 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,26 @@
1+
<?php
2+
3+
namespace PhpMyAdmin\SqlParser\Tests\Parser;
4+
5+
use PhpMyAdmin\SqlParser\Tests\TestCase;
6+
7+
class DropStatementTest extends TestCase
8+
{
9+
/**
10+
* @dataProvider dropProvider
11+
*
12+
* @param mixed $test
13+
*/
14+
public function testDrop($test)
15+
{
16+
$this->runParserTest($test);
17+
}
18+
19+
public function dropProvider()
20+
{
21+
return [
22+
['parser/parseDrop'],
23+
['parser/parseDrop2'],
24+
];
25+
}
26+
}

tests/Utils/QueryTest.php

Lines changed: 14 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -599,6 +599,20 @@ public function testReplaceClauseOnlyKeyword()
599599
);
600600
}
601601

602+
public function testReplaceNonExistingPart()
603+
{
604+
$parser = new Parser('ALTER TABLE `sale_mast` OPTIMIZE PARTITION p3');
605+
$this->assertEquals(
606+
' ALTER TABLE `sale_mast` OPTIMIZE PARTITION p3',
607+
Query::replaceClause(
608+
$parser->statements[0],
609+
$parser->list,
610+
'ORDER BY',
611+
''
612+
)
613+
);
614+
}
615+
602616
public function testReplaceClauses()
603617
{
604618
$this->assertEquals('', Query::replaceClauses(null, null, []));

tests/data/parser/parseDrop.in

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1 @@
1+
DROP USER IF EXISTS 'testtest'@'%';

tests/data/parser/parseDrop.out

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1 @@
1+
a:4:{s:5:"query";s:35:"DROP USER IF EXISTS 'testtest'@'%';";s:5:"lexer";O:26:"PhpMyAdmin\SqlParser\Lexer":8:{s:3:"str";s:35:"DROP USER IF EXISTS 'testtest'@'%';";s:3:"len";i:35;s:4:"last";i:35;s:4:"list";O:31:"PhpMyAdmin\SqlParser\TokensList":3:{s:6:"tokens";a:9:{i:0;O:26:"PhpMyAdmin\SqlParser\Token":6:{s:5:"token";s:4:"DROP";s:5:"value";s:4:"DROP";s:7:"keyword";s:4:"DROP";s:4:"type";i:1;s:5:"flags";i:3;s:8:"position";i:0;}i:1;O:26:"PhpMyAdmin\SqlParser\Token":6:{s:5:"token";s:1:" ";s:5:"value";s:1:" ";s:7:"keyword";N;s:4:"type";i:3;s:5:"flags";i:0;s:8:"position";i:4;}i:2;O:26:"PhpMyAdmin\SqlParser\Token":6:{s:5:"token";s:4:"USER";s:5:"value";s:4:"USER";s:7:"keyword";s:4:"USER";s:4:"type";i:1;s:5:"flags";i:33;s:8:"position";i:5;}i:3;O:26:"PhpMyAdmin\SqlParser\Token":6:{s:5:"token";s:1:" ";s:5:"value";s:1:" ";s:7:"keyword";N;s:4:"type";i:3;s:5:"flags";i:0;s:8:"position";i:9;}i:4;O:26:"PhpMyAdmin\SqlParser\Token":6:{s:5:"token";s:9:"IF EXISTS";s:5:"value";s:9:"IF EXISTS";s:7:"keyword";s:9:"IF EXISTS";s:4:"type";i:1;s:5:"flags";i:7;s:8:"position";i:10;}i:5;O:26:"PhpMyAdmin\SqlParser\Token":6:{s:5:"token";s:1:" ";s:5:"value";s:1:" ";s:7:"keyword";N;s:4:"type";i:3;s:5:"flags";i:0;s:8:"position";i:19;}i:6;O:26:"PhpMyAdmin\SqlParser\Token":6:{s:5:"token";s:14:"'testtest'@'%'";s:5:"value";s:10:"testtest@%";s:7:"keyword";N;s:4:"type";i:8;s:5:"flags";i:4;s:8:"position";i:20;}i:7;O:26:"PhpMyAdmin\SqlParser\Token":6:{s:5:"token";s:1:";";s:5:"value";s:1:";";s:7:"keyword";N;s:4:"type";i:9;s:5:"flags";i:0;s:8:"position";i:34;}i:8;O:26:"PhpMyAdmin\SqlParser\Token":6:{s:5:"token";N;s:5:"value";N;s:7:"keyword";N;s:4:"type";i:9;s:5:"flags";i:0;s:8:"position";N;}}s:5:"count";i:9;s:3:"idx";i:9;}s:9:"delimiter";s:1:";";s:12:"delimiterLen";i:1;s:6:"strict";b:0;s:6:"errors";a:0:{}}s:6:"parser";O:27:"PhpMyAdmin\SqlParser\Parser":5:{s:4:"list";r:7;s:10:"statements";a:1:{i:0;O:45:"PhpMyAdmin\SqlParser\Statements\DropStatement":5:{s:6:"fields";a:1:{i:0;O:42:"PhpMyAdmin\SqlParser\Components\Expression":7:{s:8:"database";N;s:5:"table";s:10:"testtest@%";s:6:"column";N;s:4:"expr";s:14:"'testtest'@'%'";s:5:"alias";N;s:8:"function";N;s:8:"subquery";N;}}s:5:"table";N;s:7:"options";O:44:"PhpMyAdmin\SqlParser\Components\OptionsArray":1:{s:7:"options";a:2:{i:1;s:4:"USER";i:3;s:9:"IF EXISTS";}}s:5:"first";i:0;s:4:"last";i:6;}}s:8:"brackets";i:0;s:6:"strict";b:0;s:6:"errors";a:0:{}}s:6:"errors";a:2:{s:5:"lexer";a:0:{}s:6:"parser";a:0:{}}}

tests/data/parser/parseDrop2.in

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1 @@
1+
DROP USER 'testtest'@'%';

tests/data/parser/parseDrop2.out

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1 @@
1+
a:4:{s:5:"query";s:25:"DROP USER 'testtest'@'%';";s:5:"lexer";O:26:"PhpMyAdmin\SqlParser\Lexer":8:{s:3:"str";s:25:"DROP USER 'testtest'@'%';";s:3:"len";i:25;s:4:"last";i:25;s:4:"list";O:31:"PhpMyAdmin\SqlParser\TokensList":3:{s:6:"tokens";a:7:{i:0;O:26:"PhpMyAdmin\SqlParser\Token":6:{s:5:"token";s:4:"DROP";s:5:"value";s:4:"DROP";s:7:"keyword";s:4:"DROP";s:4:"type";i:1;s:5:"flags";i:3;s:8:"position";i:0;}i:1;O:26:"PhpMyAdmin\SqlParser\Token":6:{s:5:"token";s:1:" ";s:5:"value";s:1:" ";s:7:"keyword";N;s:4:"type";i:3;s:5:"flags";i:0;s:8:"position";i:4;}i:2;O:26:"PhpMyAdmin\SqlParser\Token":6:{s:5:"token";s:4:"USER";s:5:"value";s:4:"USER";s:7:"keyword";s:4:"USER";s:4:"type";i:1;s:5:"flags";i:33;s:8:"position";i:5;}i:3;O:26:"PhpMyAdmin\SqlParser\Token":6:{s:5:"token";s:1:" ";s:5:"value";s:1:" ";s:7:"keyword";N;s:4:"type";i:3;s:5:"flags";i:0;s:8:"position";i:9;}i:4;O:26:"PhpMyAdmin\SqlParser\Token":6:{s:5:"token";s:14:"'testtest'@'%'";s:5:"value";s:10:"testtest@%";s:7:"keyword";N;s:4:"type";i:8;s:5:"flags";i:4;s:8:"position";i:10;}i:5;O:26:"PhpMyAdmin\SqlParser\Token":6:{s:5:"token";s:1:";";s:5:"value";s:1:";";s:7:"keyword";N;s:4:"type";i:9;s:5:"flags";i:0;s:8:"position";i:24;}i:6;O:26:"PhpMyAdmin\SqlParser\Token":6:{s:5:"token";N;s:5:"value";N;s:7:"keyword";N;s:4:"type";i:9;s:5:"flags";i:0;s:8:"position";N;}}s:5:"count";i:7;s:3:"idx";i:7;}s:9:"delimiter";s:1:";";s:12:"delimiterLen";i:1;s:6:"strict";b:0;s:6:"errors";a:0:{}}s:6:"parser";O:27:"PhpMyAdmin\SqlParser\Parser":5:{s:4:"list";r:7;s:10:"statements";a:1:{i:0;O:45:"PhpMyAdmin\SqlParser\Statements\DropStatement":5:{s:6:"fields";a:1:{i:0;O:42:"PhpMyAdmin\SqlParser\Components\Expression":7:{s:8:"database";N;s:5:"table";s:10:"testtest@%";s:6:"column";N;s:4:"expr";s:14:"'testtest'@'%'";s:5:"alias";N;s:8:"function";N;s:8:"subquery";N;}}s:5:"table";N;s:7:"options";O:44:"PhpMyAdmin\SqlParser\Components\OptionsArray":1:{s:7:"options";a:1:{i:1;s:4:"USER";}}s:5:"first";i:0;s:4:"last";i:4;}}s:8:"brackets";i:0;s:6:"strict";b:0;s:6:"errors";a:0:{}}s:6:"errors";a:2:{s:5:"lexer";a:0:{}s:6:"parser";a:0:{}}}

0 commit comments

Comments
 (0)