Skip to content
Closed
Show file tree
Hide file tree
Changes from 4 commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
6 changes: 5 additions & 1 deletion src/Parsers/AlterOperations.php
Original file line number Diff line number Diff line change
Expand Up @@ -370,7 +370,11 @@ public static function parse(Parser $parser, TokensList $list, array $options =
break;
}
} elseif (! self::checkIfTokenQuotedSymbol($token) && $token->type !== TokenType::String) {
if (isset(Parser::STATEMENT_PARSERS[$arrayKey]) && Parser::STATEMENT_PARSERS[$arrayKey] !== '') {
if (
isset(Parser::STATEMENT_PARSERS[$arrayKey])
&& Parser::STATEMENT_PARSERS[$arrayKey] !== ''
&& ! in_array($arrayKey, ['ASC', 'DESC'], true)
) {
$list->idx++; // Ignore the current token
$nextToken = $list->getNext();

Expand Down
1 change: 1 addition & 0 deletions tests/Parser/AlterStatementTest.php
Original file line number Diff line number Diff line change
Expand Up @@ -48,6 +48,7 @@ public static function alterProvider(): array
['parser/parseAlterTableAddSpatialIndex1'],
['parser/parseAlterTableAddUniqueKey1'],
['parser/parseAlterTableAddUniqueKey2'],
['parser/parseAlterTableAddUniqueKeyDesc'],
Comment thread
williamdes marked this conversation as resolved.
['parser/parseAlterTableDropAddIndex1'],
['parser/parseAlterTableDropColumn1'],
['parser/parseAlterTableModifyColumn'],
Expand Down
1 change: 1 addition & 0 deletions tests/data/parser/parseAlterTableAddUniqueKeyAsc.in
Original file line number Diff line number Diff line change
@@ -0,0 +1 @@
ALTER TABLE `bad_table_is_bad` ADD UNIQUE KEY `column1` (`column1`, `column2` ASC);
357 changes: 357 additions & 0 deletions tests/data/parser/parseAlterTableAddUniqueKeyAsc.out
Original file line number Diff line number Diff line change
@@ -0,0 +1,357 @@
{
"query": "ALTER TABLE `bad_table_is_bad` ADD UNIQUE KEY `column1` (`column1`, `column2` ASC);",
"lexer": {
"@type": "PhpMyAdmin\\SqlParser\\Lexer",
"strict": false,
"errors": [],
"str": "ALTER TABLE `bad_table_is_bad` ADD UNIQUE KEY `column1` (`column1`, `column2` ASC);",
"len": 83,
"last": 83,
"list": {
"@type": "PhpMyAdmin\\SqlParser\\TokensList",
"count": 22,
"idx": 22,
"tokens": [
{
"@type": "PhpMyAdmin\\SqlParser\\Token",
"token": "ALTER",
"value": "ALTER",
"keyword": "ALTER",
"type": {
"@type": "PhpMyAdmin\\SqlParser\\TokenType",
"name": "Keyword",
"value": 1
},
"flags": 3,
"position": 0
},
{
"@type": "PhpMyAdmin\\SqlParser\\Token",
"token": " ",
"value": " ",
"keyword": null,
"type": {
"@type": "PhpMyAdmin\\SqlParser\\TokenType",
"name": "Whitespace",
"value": 3
},
"flags": 0,
"position": 5
},
{
"@type": "PhpMyAdmin\\SqlParser\\Token",
"token": "TABLE",
"value": "TABLE",
"keyword": "TABLE",
"type": {
"@type": "@3"
},
"flags": 3,
"position": 6
},
{
"@type": "PhpMyAdmin\\SqlParser\\Token",
"token": " ",
"value": " ",
"keyword": null,
"type": {
"@type": "@5"
},
"flags": 0,
"position": 11
},
{
"@type": "PhpMyAdmin\\SqlParser\\Token",
"token": "`bad_table_is_bad`",
"value": "bad_table_is_bad",
"keyword": null,
"type": {
"@type": "PhpMyAdmin\\SqlParser\\TokenType",
"name": "Symbol",
"value": 8
},
"flags": 2,
"position": 12
},
{
"@type": "PhpMyAdmin\\SqlParser\\Token",
"token": " ",
"value": " ",
"keyword": null,
"type": {
"@type": "@5"
},
"flags": 0,
"position": 30
},
{
"@type": "PhpMyAdmin\\SqlParser\\Token",
"token": "ADD",
"value": "ADD",
"keyword": "ADD",
"type": {
"@type": "@3"
},
"flags": 3,
"position": 31
},
{
"@type": "PhpMyAdmin\\SqlParser\\Token",
"token": " ",
"value": " ",
"keyword": null,
"type": {
"@type": "@5"
},
"flags": 0,
"position": 34
},
{
"@type": "PhpMyAdmin\\SqlParser\\Token",
"token": "UNIQUE KEY",
"value": "UNIQUE KEY",
"keyword": "UNIQUE KEY",
"type": {
"@type": "@3"
},
"flags": 23,
"position": 35
},
{
"@type": "PhpMyAdmin\\SqlParser\\Token",
"token": " ",
"value": " ",
"keyword": null,
"type": {
"@type": "@5"
},
"flags": 0,
"position": 45
},
{
"@type": "PhpMyAdmin\\SqlParser\\Token",
"token": "`column1`",
"value": "column1",
"keyword": null,
"type": {
"@type": "@9"
},
"flags": 2,
"position": 46
},
{
"@type": "PhpMyAdmin\\SqlParser\\Token",
"token": " ",
"value": " ",
"keyword": null,
"type": {
"@type": "@5"
},
"flags": 0,
"position": 55
},
{
"@type": "PhpMyAdmin\\SqlParser\\Token",
"token": "(",
"value": "(",
"keyword": null,
"type": {
"@type": "PhpMyAdmin\\SqlParser\\TokenType",
"name": "Operator",
"value": 2
},
"flags": 16,
"position": 56
},
{
"@type": "PhpMyAdmin\\SqlParser\\Token",
"token": "`column1`",
"value": "column1",
"keyword": null,
"type": {
"@type": "@9"
},
"flags": 2,
"position": 57
},
{
"@type": "PhpMyAdmin\\SqlParser\\Token",
"token": ",",
"value": ",",
"keyword": null,
"type": {
"@type": "@18"
},
"flags": 16,
"position": 66
},
{
"@type": "PhpMyAdmin\\SqlParser\\Token",
"token": " ",
"value": " ",
"keyword": null,
"type": {
"@type": "@5"
},
"flags": 0,
"position": 67
},
{
"@type": "PhpMyAdmin\\SqlParser\\Token",
"token": "`column2`",
"value": "column2",
"keyword": null,
"type": {
"@type": "@9"
},
"flags": 2,
"position": 68
},
{
"@type": "PhpMyAdmin\\SqlParser\\Token",
"token": " ",
"value": " ",
"keyword": null,
"type": {
"@type": "@5"
},
"flags": 0,
"position": 77
},
{
"@type": "PhpMyAdmin\\SqlParser\\Token",
"token": "ASC",
"value": "ASC",
"keyword": "ASC",
"type": {
"@type": "@3"
},
"flags": 3,
"position": 78
},
{
"@type": "PhpMyAdmin\\SqlParser\\Token",
"token": ")",
"value": ")",
"keyword": null,
"type": {
"@type": "@18"
},
"flags": 16,
"position": 81
},
{
"@type": "PhpMyAdmin\\SqlParser\\Token",
"token": ";",
"value": ";",
"keyword": null,
"type": {
"@type": "PhpMyAdmin\\SqlParser\\TokenType",
"name": "Delimiter",
"value": 9
},
"flags": 0,
"position": 82
},
{
"@type": "PhpMyAdmin\\SqlParser\\Token",
"token": "",
"value": "",
"keyword": null,
"type": {
"@type": "@27"
},
"flags": 0,
"position": null
}
]
},
"delimiter": ";",
"delimiterLen": 1
},
"parser": {
"@type": "PhpMyAdmin\\SqlParser\\Parser",
"strict": false,
"errors": [],
"list": {
"@type": "@1"
},
"statements": [
{
"@type": "PhpMyAdmin\\SqlParser\\Statements\\AlterStatement",
"table": {
"@type": "PhpMyAdmin\\SqlParser\\Components\\Expression",
"database": null,
"table": "bad_table_is_bad",
"column": null,
"expr": "`bad_table_is_bad`",
"alias": null,
"function": null,
"subquery": null
},
"altered": [
{
"@type": "PhpMyAdmin\\SqlParser\\Components\\AlterOperation",
"options": {
"@type": "PhpMyAdmin\\SqlParser\\Components\\OptionsArray",
"options": {
"1": "ADD",
"2": "UNIQUE KEY"
}
},
"field": {
"@type": "PhpMyAdmin\\SqlParser\\Components\\Expression",
"database": null,
"table": null,
"column": "column1",
"expr": "`column1`",
"alias": null,
"function": null,
"subquery": null
},
"partitions": null,
"unknown": [
{
"@type": "@17"
},
{
"@type": "@19"
},
{
"@type": "@20"
},
{
"@type": "@21"
},
{
"@type": "@22"
},
{
"@type": "@23"
},
{
"@type": "@24"
},
{
"@type": "@25"
}
]
}
],
"options": {
"@type": "PhpMyAdmin\\SqlParser\\Components\\OptionsArray",
"options": {
"3": "TABLE"
}
},
"first": 0,
"last": 20
}
],
"brackets": 0
},
"errors": {
"lexer": [],
"parser": []
}
}
1 change: 1 addition & 0 deletions tests/data/parser/parseAlterTableAddUniqueKeyDesc.in
Original file line number Diff line number Diff line change
@@ -0,0 +1 @@
ALTER TABLE `bad_table_is_bad` ADD UNIQUE KEY `column1` (`column1`,`column2` DESC);
Loading