From 5eff78128f67061bb84f77788c7087e54924685e Mon Sep 17 00:00:00 2001 From: Hugues Peccatte Date: Tue, 28 Mar 2023 10:11:24 +0200 Subject: [PATCH] Support IDENTIFIED VIA in CREATE/ALTER USER statements --- src/Components/AlterOperation.php | 4 + src/Contexts/ContextMariaDb100400.php | 2 +- src/Contexts/ContextMariaDb100500.php | 2 +- src/Contexts/ContextMariaDb100600.php | 2 +- tests/Lexer/LexerTest.php | 2 + .../lexer/lexSymbolUser4_mariadb_100400.in | 1 + .../lexer/lexSymbolUser4_mariadb_100400.out | 183 ++++++++++++++++++ .../lexer/lexSymbolUser5_mariadb_100400.in | 1 + .../lexer/lexSymbolUser5_mariadb_100400.out | 183 ++++++++++++++++++ tools/contexts/MariaDb100400.txt | 1 + tools/contexts/MariaDb100500.txt | 1 + tools/contexts/MariaDb100600.txt | 1 + 12 files changed, 380 insertions(+), 3 deletions(-) create mode 100644 tests/data/lexer/lexSymbolUser4_mariadb_100400.in create mode 100644 tests/data/lexer/lexSymbolUser4_mariadb_100400.out create mode 100644 tests/data/lexer/lexSymbolUser5_mariadb_100400.in create mode 100644 tests/data/lexer/lexSymbolUser5_mariadb_100400.out diff --git a/src/Components/AlterOperation.php b/src/Components/AlterOperation.php index 354738226..07e9dba0c 100644 --- a/src/Components/AlterOperation.php +++ b/src/Components/AlterOperation.php @@ -160,6 +160,10 @@ class AlterOperation extends Component 'var', ], + 'IDENTIFIED VIA' => [ + 2, + 'var', + ], 'IDENTIFIED WITH' => [ 2, 'var', diff --git a/src/Contexts/ContextMariaDb100400.php b/src/Contexts/ContextMariaDb100400.php index c3a12baa7..e9506a8b2 100644 --- a/src/Contexts/ContextMariaDb100400.php +++ b/src/Contexts/ContextMariaDb100400.php @@ -215,7 +215,7 @@ class ContextMariaDb100400 extends Context 'FOREIGN KEY' => 23, 'PRIMARY KEY' => 23, 'SPATIAL KEY' => 23, 'FULLTEXT KEY' => 23, 'UNIQUE INDEX' => 23, 'SPATIAL INDEX' => 23, - 'FULLTEXT INDEX' => 23, + 'FULLTEXT INDEX' => 23, 'IDENTIFIED VIA' => 23, 'IDENTIFIED WITH' => 23, 'X' => 33, 'Y' => 33, diff --git a/src/Contexts/ContextMariaDb100500.php b/src/Contexts/ContextMariaDb100500.php index 5c4f22701..759d20450 100644 --- a/src/Contexts/ContextMariaDb100500.php +++ b/src/Contexts/ContextMariaDb100500.php @@ -215,7 +215,7 @@ class ContextMariaDb100500 extends Context 'FOREIGN KEY' => 23, 'PRIMARY KEY' => 23, 'SPATIAL KEY' => 23, 'FULLTEXT KEY' => 23, 'UNIQUE INDEX' => 23, 'SPATIAL INDEX' => 23, - 'FULLTEXT INDEX' => 23, + 'FULLTEXT INDEX' => 23, 'IDENTIFIED VIA' => 23, 'IDENTIFIED WITH' => 23, 'X' => 33, 'Y' => 33, diff --git a/src/Contexts/ContextMariaDb100600.php b/src/Contexts/ContextMariaDb100600.php index 02d85a77b..54fb6a248 100644 --- a/src/Contexts/ContextMariaDb100600.php +++ b/src/Contexts/ContextMariaDb100600.php @@ -215,7 +215,7 @@ class ContextMariaDb100600 extends Context 'FOREIGN KEY' => 23, 'PRIMARY KEY' => 23, 'SPATIAL KEY' => 23, 'FULLTEXT KEY' => 23, 'UNIQUE INDEX' => 23, 'SPATIAL INDEX' => 23, - 'FULLTEXT INDEX' => 23, + 'FULLTEXT INDEX' => 23, 'IDENTIFIED VIA' => 23, 'IDENTIFIED WITH' => 23, 'X' => 33, 'Y' => 33, diff --git a/tests/Lexer/LexerTest.php b/tests/Lexer/LexerTest.php index 6c43904ba..18bdb81f4 100644 --- a/tests/Lexer/LexerTest.php +++ b/tests/Lexer/LexerTest.php @@ -88,6 +88,8 @@ public function lexProvider(): array ['lexer/lexSymbolUser1'], ['lexer/lexSymbolUser2'], ['lexer/lexSymbolUser3'], + ['lexer/lexSymbolUser4_mariadb_100400'], + ['lexer/lexSymbolUser5_mariadb_100400'], ['lexer/lexWhitespace'], ['lexer/lexLabel1'], ['lexer/lexLabel2'], diff --git a/tests/data/lexer/lexSymbolUser4_mariadb_100400.in b/tests/data/lexer/lexSymbolUser4_mariadb_100400.in new file mode 100644 index 000000000..4357161a2 --- /dev/null +++ b/tests/data/lexer/lexSymbolUser4_mariadb_100400.in @@ -0,0 +1 @@ +ALTER USER 'user'@'hostname' IDENTIFIED VIA mysql_native_password BY 'password'; \ No newline at end of file diff --git a/tests/data/lexer/lexSymbolUser4_mariadb_100400.out b/tests/data/lexer/lexSymbolUser4_mariadb_100400.out new file mode 100644 index 000000000..dc3038d13 --- /dev/null +++ b/tests/data/lexer/lexSymbolUser4_mariadb_100400.out @@ -0,0 +1,183 @@ +{ + "query": "ALTER USER 'user'@'hostname' IDENTIFIED VIA mysql_native_password BY 'password';", + "lexer": { + "@type": "PhpMyAdmin\\SqlParser\\Lexer", + "PARSER_METHODS": [ + "parseDelimiter", + "parseWhitespace", + "parseNumber", + "parseComment", + "parseOperator", + "parseBool", + "parseString", + "parseSymbol", + "parseKeyword", + "parseLabel", + "parseUnknown" + ], + "KEYWORD_NAME_INDICATORS": [ + "FROM", + "SET", + "WHERE" + ], + "OPERATOR_NAME_INDICATORS": [ + ",", + "." + ], + "str": "ALTER USER 'user'@'hostname' IDENTIFIED VIA mysql_native_password BY 'password';", + "len": 80, + "last": 80, + "list": { + "@type": "PhpMyAdmin\\SqlParser\\TokensList", + "tokens": [ + { + "@type": "PhpMyAdmin\\SqlParser\\Token", + "token": "ALTER", + "value": "ALTER", + "keyword": "ALTER", + "type": 1, + "flags": 3, + "position": 0 + }, + { + "@type": "PhpMyAdmin\\SqlParser\\Token", + "token": " ", + "value": " ", + "keyword": null, + "type": 3, + "flags": 0, + "position": 5 + }, + { + "@type": "PhpMyAdmin\\SqlParser\\Token", + "token": "USER", + "value": "USER", + "keyword": "USER", + "type": 1, + "flags": 33, + "position": 6 + }, + { + "@type": "PhpMyAdmin\\SqlParser\\Token", + "token": " ", + "value": " ", + "keyword": null, + "type": 3, + "flags": 0, + "position": 10 + }, + { + "@type": "PhpMyAdmin\\SqlParser\\Token", + "token": "'user'@'hostname'", + "value": "user@hostname", + "keyword": null, + "type": 8, + "flags": 4, + "position": 11 + }, + { + "@type": "PhpMyAdmin\\SqlParser\\Token", + "token": " ", + "value": " ", + "keyword": null, + "type": 3, + "flags": 0, + "position": 28 + }, + { + "@type": "PhpMyAdmin\\SqlParser\\Token", + "token": "IDENTIFIED VIA", + "value": "IDENTIFIED VIA", + "keyword": "IDENTIFIED VIA", + "type": 1, + "flags": 23, + "position": 29 + }, + { + "@type": "PhpMyAdmin\\SqlParser\\Token", + "token": " ", + "value": " ", + "keyword": null, + "type": 3, + "flags": 0, + "position": 43 + }, + { + "@type": "PhpMyAdmin\\SqlParser\\Token", + "token": "mysql_native_password", + "value": "mysql_native_password", + "keyword": null, + "type": 0, + "flags": 0, + "position": 44 + }, + { + "@type": "PhpMyAdmin\\SqlParser\\Token", + "token": " ", + "value": " ", + "keyword": null, + "type": 3, + "flags": 0, + "position": 65 + }, + { + "@type": "PhpMyAdmin\\SqlParser\\Token", + "token": "BY", + "value": "BY", + "keyword": "BY", + "type": 1, + "flags": 3, + "position": 66 + }, + { + "@type": "PhpMyAdmin\\SqlParser\\Token", + "token": " ", + "value": " ", + "keyword": null, + "type": 3, + "flags": 0, + "position": 68 + }, + { + "@type": "PhpMyAdmin\\SqlParser\\Token", + "token": "'password'", + "value": "password", + "keyword": null, + "type": 7, + "flags": 1, + "position": 69 + }, + { + "@type": "PhpMyAdmin\\SqlParser\\Token", + "token": ";", + "value": ";", + "keyword": null, + "type": 9, + "flags": 0, + "position": 79 + }, + { + "@type": "PhpMyAdmin\\SqlParser\\Token", + "token": null, + "value": null, + "keyword": null, + "type": 9, + "flags": 0, + "position": null + } + ], + "count": 15, + "idx": 0 + }, + "DEFAULT_DELIMITER": ";", + "delimiter": ";", + "delimiterLen": 1, + "strict": false, + "errors": [] + }, + "parser": null, + "errors": { + "lexer": [], + "parser": [] + } +} \ No newline at end of file diff --git a/tests/data/lexer/lexSymbolUser5_mariadb_100400.in b/tests/data/lexer/lexSymbolUser5_mariadb_100400.in new file mode 100644 index 000000000..64dacdcd5 --- /dev/null +++ b/tests/data/lexer/lexSymbolUser5_mariadb_100400.in @@ -0,0 +1 @@ +CREATE USER 'user'@'hostname' IDENTIFIED VIA mysql_native_password BY 'password'; \ No newline at end of file diff --git a/tests/data/lexer/lexSymbolUser5_mariadb_100400.out b/tests/data/lexer/lexSymbolUser5_mariadb_100400.out new file mode 100644 index 000000000..3f5cc7d24 --- /dev/null +++ b/tests/data/lexer/lexSymbolUser5_mariadb_100400.out @@ -0,0 +1,183 @@ +{ + "query": "CREATE USER 'user'@'hostname' IDENTIFIED VIA mysql_native_password BY 'password';", + "lexer": { + "@type": "PhpMyAdmin\\SqlParser\\Lexer", + "PARSER_METHODS": [ + "parseDelimiter", + "parseWhitespace", + "parseNumber", + "parseComment", + "parseOperator", + "parseBool", + "parseString", + "parseSymbol", + "parseKeyword", + "parseLabel", + "parseUnknown" + ], + "KEYWORD_NAME_INDICATORS": [ + "FROM", + "SET", + "WHERE" + ], + "OPERATOR_NAME_INDICATORS": [ + ",", + "." + ], + "str": "CREATE USER 'user'@'hostname' IDENTIFIED VIA mysql_native_password BY 'password';", + "len": 81, + "last": 81, + "list": { + "@type": "PhpMyAdmin\\SqlParser\\TokensList", + "tokens": [ + { + "@type": "PhpMyAdmin\\SqlParser\\Token", + "token": "CREATE", + "value": "CREATE", + "keyword": "CREATE", + "type": 1, + "flags": 3, + "position": 0 + }, + { + "@type": "PhpMyAdmin\\SqlParser\\Token", + "token": " ", + "value": " ", + "keyword": null, + "type": 3, + "flags": 0, + "position": 6 + }, + { + "@type": "PhpMyAdmin\\SqlParser\\Token", + "token": "USER", + "value": "USER", + "keyword": "USER", + "type": 1, + "flags": 33, + "position": 7 + }, + { + "@type": "PhpMyAdmin\\SqlParser\\Token", + "token": " ", + "value": " ", + "keyword": null, + "type": 3, + "flags": 0, + "position": 11 + }, + { + "@type": "PhpMyAdmin\\SqlParser\\Token", + "token": "'user'@'hostname'", + "value": "user@hostname", + "keyword": null, + "type": 8, + "flags": 4, + "position": 12 + }, + { + "@type": "PhpMyAdmin\\SqlParser\\Token", + "token": " ", + "value": " ", + "keyword": null, + "type": 3, + "flags": 0, + "position": 29 + }, + { + "@type": "PhpMyAdmin\\SqlParser\\Token", + "token": "IDENTIFIED VIA", + "value": "IDENTIFIED VIA", + "keyword": "IDENTIFIED VIA", + "type": 1, + "flags": 23, + "position": 30 + }, + { + "@type": "PhpMyAdmin\\SqlParser\\Token", + "token": " ", + "value": " ", + "keyword": null, + "type": 3, + "flags": 0, + "position": 44 + }, + { + "@type": "PhpMyAdmin\\SqlParser\\Token", + "token": "mysql_native_password", + "value": "mysql_native_password", + "keyword": null, + "type": 0, + "flags": 0, + "position": 45 + }, + { + "@type": "PhpMyAdmin\\SqlParser\\Token", + "token": " ", + "value": " ", + "keyword": null, + "type": 3, + "flags": 0, + "position": 66 + }, + { + "@type": "PhpMyAdmin\\SqlParser\\Token", + "token": "BY", + "value": "BY", + "keyword": "BY", + "type": 1, + "flags": 3, + "position": 67 + }, + { + "@type": "PhpMyAdmin\\SqlParser\\Token", + "token": " ", + "value": " ", + "keyword": null, + "type": 3, + "flags": 0, + "position": 69 + }, + { + "@type": "PhpMyAdmin\\SqlParser\\Token", + "token": "'password'", + "value": "password", + "keyword": null, + "type": 7, + "flags": 1, + "position": 70 + }, + { + "@type": "PhpMyAdmin\\SqlParser\\Token", + "token": ";", + "value": ";", + "keyword": null, + "type": 9, + "flags": 0, + "position": 80 + }, + { + "@type": "PhpMyAdmin\\SqlParser\\Token", + "token": null, + "value": null, + "keyword": null, + "type": 9, + "flags": 0, + "position": null + } + ], + "count": 15, + "idx": 0 + }, + "DEFAULT_DELIMITER": ";", + "delimiter": ";", + "delimiterLen": 1, + "strict": false, + "errors": [] + }, + "parser": null, + "errors": { + "lexer": [], + "parser": [] + } +} \ No newline at end of file diff --git a/tools/contexts/MariaDb100400.txt b/tools/contexts/MariaDb100400.txt index 92452a828..02e421548 100644 --- a/tools/contexts/MariaDb100400.txt +++ b/tools/contexts/MariaDb100400.txt @@ -211,6 +211,7 @@ HOUR_MICROSECOND (R) HOUR_MINUTE (R) HOUR_SECOND (R) IDENTIFIED +IDENTIFIED VIA (K) IDENTIFIED WITH (K) IF (R) IGNORE (R) diff --git a/tools/contexts/MariaDb100500.txt b/tools/contexts/MariaDb100500.txt index 92452a828..02e421548 100644 --- a/tools/contexts/MariaDb100500.txt +++ b/tools/contexts/MariaDb100500.txt @@ -211,6 +211,7 @@ HOUR_MICROSECOND (R) HOUR_MINUTE (R) HOUR_SECOND (R) IDENTIFIED +IDENTIFIED VIA (K) IDENTIFIED WITH (K) IF (R) IGNORE (R) diff --git a/tools/contexts/MariaDb100600.txt b/tools/contexts/MariaDb100600.txt index 92452a828..02e421548 100644 --- a/tools/contexts/MariaDb100600.txt +++ b/tools/contexts/MariaDb100600.txt @@ -211,6 +211,7 @@ HOUR_MICROSECOND (R) HOUR_MINUTE (R) HOUR_SECOND (R) IDENTIFIED +IDENTIFIED VIA (K) IDENTIFIED WITH (K) IF (R) IGNORE (R)