Skip to content

Commit f5123d8

Browse files
committed
Merge branch '5.8.x'
2 parents 8591e28 + e144b3a commit f5123d8

39 files changed

Lines changed: 6374 additions & 5 deletions

.gitattributes

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1,3 +1,6 @@
1+
*.in linguist-language=sql
2+
*.out linguist-language=json
3+
14
/tools export-ignore
25
/tests/benchmarks export-ignore
36
.gitattributes export-ignore

CHANGELOG.md

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -19,6 +19,7 @@
1919
- Fix `COALESCE PARTITION` in `ALTER TABLE`, rather than `COALESCE` (#323)
2020
- Support `ALGORITHM` and `LOCK` options in `ALTER TABLE` statements (#319)
2121
- Fix way end of functions, procedures and triggers' bodies is identified (#438)
22+
- Fix `enclosed by` is not recognized by the parser when `fields` is in lower case (#236)
2223

2324
## [5.7.0] - 2023-01-25
2425

src/Components/IntoKeyword.php

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -221,14 +221,14 @@ public static function parse(Parser $parser, TokensList $list, array $options =
221221

222222
$state = 3;
223223
} elseif ($state === 3) {
224-
$ret->parseFileOptions($parser, $list, $token->value);
224+
$ret->parseFileOptions($parser, $list, $token->keyword);
225225
$state = 4;
226226
} elseif ($state === 4) {
227227
if ($token->type === Token::TYPE_KEYWORD && $token->keyword !== 'LINES') {
228228
break;
229229
}
230230

231-
$ret->parseFileOptions($parser, $list, $token->value);
231+
$ret->parseFileOptions($parser, $list, $token->keyword);
232232
$state = 5;
233233
}
234234
}
@@ -241,7 +241,7 @@ public static function parse(Parser $parser, TokensList $list, array $options =
241241
/**
242242
* @param Parser $parser The parser
243243
* @param TokensList $list A token list
244-
* @param string $keyword They keyword
244+
* @param string $keyword The keyword
245245
*
246246
* @return void
247247
*/

tests/Builder/CallStatementTest.php

Lines changed: 79 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -18,4 +18,83 @@ public function testBuilder(): void
1818

1919
$this->assertEquals($query, $stmt->build());
2020
}
21+
22+
public function testBuilderShort(): void
23+
{
24+
$query = 'CALL foo';
25+
26+
$parser = new Parser($query);
27+
$stmt = $parser->statements[0];
28+
29+
$this->assertEquals($query . '()', $stmt->build());
30+
}
31+
32+
public function testBuilderWithDbName(): void
33+
{
34+
$query = 'CALL foo()';
35+
36+
$parser = new Parser($query);
37+
$stmt = $parser->statements[0];
38+
39+
$this->assertEquals($query, $stmt->build());
40+
}
41+
42+
public function testBuilderWithDbNameShort(): void
43+
{
44+
$query = 'CALL foo';
45+
46+
$parser = new Parser($query);
47+
$stmt = $parser->statements[0];
48+
49+
$this->assertEquals($query . '()', $stmt->build());
50+
}
51+
52+
public function testBuilderWithDbNameAndParams(): void
53+
{
54+
$query = 'CALL foo(@bar, @baz);';
55+
56+
$parser = new Parser($query);
57+
$stmt = $parser->statements[0];
58+
59+
$this->assertEquals('CALL foo(@bar,@baz)', $stmt->build());
60+
}
61+
62+
public function testBuilderMultiCallsShort(): void
63+
{
64+
$query = 'call e;call f';
65+
66+
$parser = new Parser($query);
67+
$stmt = $parser->statements[0];
68+
69+
$this->assertEquals('CALL e()', $stmt->build());
70+
$stmt = $parser->statements[1];
71+
72+
$this->assertEquals('CALL f()', $stmt->build());
73+
}
74+
75+
public function testBuilderMultiCalls(): void
76+
{
77+
$query = 'call e();call f';
78+
79+
$parser = new Parser($query);
80+
$stmt = $parser->statements[0];
81+
82+
$this->assertEquals('CALL e()', $stmt->build());
83+
$stmt = $parser->statements[1];
84+
85+
$this->assertEquals('CALL f()', $stmt->build());
86+
}
87+
88+
public function testBuilderMultiCallsArgs(): void
89+
{
90+
$query = 'call e("foo");call f';
91+
92+
$parser = new Parser($query);
93+
$stmt = $parser->statements[0];
94+
95+
$this->assertEquals('CALL e("foo")', $stmt->build());
96+
$stmt = $parser->statements[1];
97+
98+
$this->assertEquals('CALL f()', $stmt->build());
99+
}
21100
}

tests/Builder/InsertStatementTest.php

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -20,7 +20,7 @@ public function testBuilder(): void
2020
);
2121

2222
/* Assertion 2 */
23-
/* Reserved keywords (with backqoutes as field name) */
23+
/* Reserved keywords (with backquotes as field name) */
2424
$parser = new Parser('INSERT INTO tbl(`order`) VALUES (1)');
2525
$stmt = $parser->statements[0];
2626
$this->assertEquals(
Lines changed: 40 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,40 @@
1+
<?php
2+
3+
declare(strict_types=1);
4+
5+
namespace PhpMyAdmin\SqlParser\Tests\Builder;
6+
7+
use PhpMyAdmin\SqlParser\Parser;
8+
use PhpMyAdmin\SqlParser\Tests\TestCase;
9+
10+
class UpdateStatementTest extends TestCase
11+
{
12+
public function testBuilder(): void
13+
{
14+
/* Assertion 1 */
15+
$parser = new Parser(
16+
'update user u left join user_detail ud on u.id = ud.user_id set ud.ip =\'33\' where u.id = 1'
17+
);
18+
$stmt = $parser->statements[0];
19+
$this->assertEquals(
20+
'UPDATE user AS `u` SET ud.ip = \'33\' WHERE u.id = 1',
21+
$stmt->build()
22+
);
23+
/* Assertion 2 */
24+
$parser = new Parser('update user u join user_detail ud on u.id = ud.user_id set ud.ip =\'33\' where u.id = 1');
25+
$stmt = $parser->statements[0];
26+
$this->assertEquals(
27+
'UPDATE user AS `u` SET ud.ip = \'33\' WHERE u.id = 1',
28+
$stmt->build()
29+
);
30+
/* Assertion 3 */
31+
$parser = new Parser(
32+
'update user u inner join user_detail ud on u.id = ud.user_id set ud.ip =\'33\' where u.id = 1'
33+
);
34+
$stmt = $parser->statements[0];
35+
$this->assertEquals(
36+
'UPDATE user AS `u` SET ud.ip = \'33\' WHERE u.id = 1',
37+
$stmt->build()
38+
);
39+
}
40+
}

tests/Parser/CallStatementTest.php

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -25,6 +25,8 @@ public static function callProvider(): array
2525
['parser/parseCall'],
2626
['parser/parseCall2'],
2727
['parser/parseCall3'],
28+
['parser/parseCall4'],
29+
['parser/parseCall5'],
2830
];
2931
}
3032
}

tests/Parser/CreateStatementTest.php

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -45,6 +45,10 @@ public static function createProvider(): array
4545
['parser/parseCreateTable10'],
4646
['parser/parseCreateTable11'],
4747
['parser/parseCreateTable12'],
48+
['parser/parseCreateTable13'],
49+
['parser/parseCreateTable14'],
50+
['parser/parseCreateTable15'],
51+
['parser/parseCreateTable16'],
4852
['parser/parseCreateTableErr1'],
4953
['parser/parseCreateTableErr2'],
5054
['parser/parseCreateTableErr3'],

tests/Parser/LoadStatementTest.php

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -37,6 +37,7 @@ public static function loadProvider(): array
3737
['parser/parseLoad4'],
3838
['parser/parseLoad5'],
3939
['parser/parseLoad6'],
40+
['parser/parseLoad7'],
4041
['parser/parseLoadErr1'],
4142
['parser/parseLoadErr2'],
4243
['parser/parseLoadErr3'],

tests/Parser/TransactionStatementTest.php

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -38,6 +38,9 @@ public static function transactionProvider(): array
3838
['parser/parseTransaction2'],
3939
['parser/parseTransaction3'],
4040
['parser/parseTransaction4'],
41+
['parser/parseTransaction5'],
42+
['parser/parseTransaction6'],
43+
['parser/parseTransaction7'],
4144
['parser/parseTransactionErr1'],
4245
];
4346
}

0 commit comments

Comments
 (0)