Skip to content

Commit 5689daf

Browse files
committed
Adding more explain tests and improve comments
Signed-off-by: iifawzi <iifawzie@gmail.com>
1 parent cb58b82 commit 5689daf

5 files changed

Lines changed: 1077 additions & 8 deletions

File tree

src/Statements/ExplainStatement.php

Lines changed: 11 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -43,8 +43,8 @@ class ExplainStatement extends Statement
4343

4444
/**
4545
* The statement alias, could be any of the following:
46-
* - EXPLAIN/DESC/DESCRIBE
47-
* - EXPLAIN/DESC/DESCRIBE ANALYZE
46+
* - {EXPLAIN | DESCRIBE | DESC}
47+
* - {EXPLAIN | DESCRIBE | DESC} ANALYZE
4848
* - ANALYZE
4949
*
5050
* @var string
@@ -89,8 +89,8 @@ public function parse(Parser $parser, TokensList $list)
8989
/**
9090
* To Differentiate between ANALYZE / EXPLAIN / EXPLAIN ANALYZE
9191
* 0 -> ANALYZE ( used by mariaDB https://mariadb.com/kb/en/analyze-statement)
92-
* 1 -> EXPLAIN / DESC / DESCRIBE
93-
* 2 -> EXPLAIN / DESC / DESCRIBE [ANALYZE]
92+
* 1 -> {EXPLAIN | DESCRIBE | DESC}
93+
* 2 -> {EXPLAIN | DESCRIBE | DESC} ANALYZE
9494
*/
9595
$miniState = 0;
9696

@@ -184,17 +184,20 @@ public function parse(Parser $parser, TokensList $list)
184184

185185
public function build(): string
186186
{
187-
$str = $this->statemenetAlias . ' ';
187+
$str = $this->statemenetAlias;
188188

189-
$str .= OptionsArray::build($this->options);
189+
if (count($this->options->options)) {
190+
$str .= ' ';
191+
}
192+
193+
$str .= OptionsArray::build($this->options) . ' ';
190194

191195
if ($this->bodyParser) {
192196
foreach ($this->bodyParser->statements as $statement) {
193197
$str .= $statement->build();
194198
}
195199
} elseif ($this->connectionId) {
196-
$str .= 'FOR CONNECTION ';
197-
$str .= $this->connectionId;
200+
$str .= 'FOR CONNECTION ' . $this->connectionId;
198201
} elseif ($this->explainedTable) {
199202
$str .= $this->explainedTable;
200203
}

tests/Builder/ExplainStatementTest.php

Lines changed: 9 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -64,5 +64,14 @@ public function testBuilder(): void
6464
'DESC FOR CONNECTION 458',
6565
$stmt->build()
6666
);
67+
68+
/* Assertion 6 */
69+
$query = 'EXPLAIN FORMAT=TREE SELECT * FROM db;';
70+
$parser = new Parser($query);
71+
$stmt = $parser->statements[0];
72+
$this->assertEquals(
73+
'EXPLAIN FORMAT=TREE SELECT * FROM db',
74+
$stmt->build()
75+
);
6776
}
6877
}

tests/Parser/ExplainStatementTest.php

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -26,6 +26,7 @@ public function explainProvider(): array
2626
['parser/parseExplain1'],
2727
['parser/parseExplain2'],
2828
['parser/parseExplain3'],
29+
['parser/parseExplain4'],
2930
['parser/parseExplainErr'],
3031
['parser/parseExplainErr1'],
3132
['parser/parseExplainErr2'],

tests/data/parser/parseExplain4.in

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1 @@
1+
EXPLAIN FORMAT=TREE SELECT * FROM db

0 commit comments

Comments
 (0)