Skip to content

Commit 997d824

Browse files
committed
Using the usual parsing method for transactions.
1 parent de326a4 commit 997d824

4 files changed

Lines changed: 11 additions & 9 deletions

File tree

src/Parser.php

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -436,6 +436,9 @@ public function parse()
436436
$this->statements[] = $statement;
437437
} elseif ($statement->type === TransactionStatement::TYPE_END) {
438438
if ($lastTransaction === null) {
439+
// Even though an error occurred, the query is being
440+
// saved.
441+
$this->statements[] = $statement;
439442
$this->error(
440443
__('No transaction was previously started.'),
441444
$token

src/Statement.php

Lines changed: 6 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -188,7 +188,7 @@ public function parse(Parser $parser, TokensList $list)
188188
* default.
189189
* @var bool $parsedOptions
190190
*/
191-
$parsedOptions = !empty(static::$OPTIONS) ? false : true;
191+
$parsedOptions = empty(static::$OPTIONS);
192192

193193
for (; $list->idx < $list->count; ++$list->idx) {
194194
/**
@@ -257,7 +257,10 @@ public function parse(Parser $parser, TokensList $list)
257257
}
258258
$parsedBeginning = true;
259259
if (!$parsedOptions) {
260-
++$list->idx; // Skipping keyword.
260+
if (empty(static::$OPTIONS[$token->value])) {
261+
// Skipping keyword because if it is not a option.
262+
++$list->idx;
263+
}
261264
$this->options = OptionsArray::parse(
262265
$parser,
263266
$list,
@@ -276,7 +279,7 @@ public function parse(Parser $parser, TokensList $list)
276279

277280
// Parsing this keyword.
278281
if ($class !== null) {
279-
++$list->idx; // Skipping keyword.
282+
++$list->idx; // Skipping keyword or last option.
280283
$this->$field = $class::parse($parser, $list, $options);
281284
}
282285

src/Statements/TransactionStatement.php

Lines changed: 1 addition & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -88,11 +88,7 @@ class TransactionStatement extends Statement
8888
*/
8989
public function parse(Parser $parser, TokensList $list)
9090
{
91-
$this->options = OptionsArray::parse(
92-
$parser,
93-
$list,
94-
static::$OPTIONS
95-
);
91+
parent::parse($parser, $list);
9692

9793
// Checks the type of this query.
9894
if (($this->options->has('START TRANSACTION'))
Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1 +1 @@
1-
a:4:{s:5:"query";s:7:"COMMIT;";s:5:"lexer";O:15:"SqlParser\Lexer":8:{s:6:"strict";b:0;s:3:"str";s:7:"COMMIT;";s:3:"len";i:7;s:4:"last";i:7;s:4:"list";O:20:"SqlParser\TokensList":3:{s:6:"tokens";a:3:{i:0;O:15:"SqlParser\Token":5:{s:5:"token";s:6:"COMMIT";s:5:"value";s:6:"COMMIT";s:4:"type";i:1;s:5:"flags";i:1;s:8:"position";i:0;}i:1;O:15:"SqlParser\Token":5:{s:5:"token";s:1:";";s:5:"value";s:1:";";s:4:"type";i:9;s:5:"flags";i:0;s:8:"position";i:6;}i:2;O:15:"SqlParser\Token":5:{s:5:"token";N;s:5:"value";N;s:4:"type";i:9;s:5:"flags";i:0;s:8:"position";N;}}s:5:"count";i:3;s:3:"idx";i:3;}s:9:"delimiter";s:1:";";s:12:"delimiterLen";i:1;s:6:"errors";a:0:{}}s:6:"parser";O:16:"SqlParser\Parser":4:{s:4:"list";r:8;s:6:"strict";b:0;s:6:"errors";a:0:{}s:10:"statements";a:0:{}}s:6:"errors";a:2:{s:5:"lexer";a:0:{}s:6:"parser";a:1:{i:0;a:3:{i:0;s:38:"No transaction was previously started.";i:1;r:10;i:2;i:0;}}}}
1+
a:4:{s:5:"query";s:7:"COMMIT;";s:5:"lexer";O:15:"SqlParser\Lexer":8:{s:6:"strict";b:0;s:3:"str";s:7:"COMMIT;";s:3:"len";i:7;s:4:"last";i:7;s:4:"list";O:20:"SqlParser\TokensList":3:{s:6:"tokens";a:3:{i:0;O:15:"SqlParser\Token":5:{s:5:"token";s:6:"COMMIT";s:5:"value";s:6:"COMMIT";s:4:"type";i:1;s:5:"flags";i:1;s:8:"position";i:0;}i:1;O:15:"SqlParser\Token":5:{s:5:"token";s:1:";";s:5:"value";s:1:";";s:4:"type";i:9;s:5:"flags";i:0;s:8:"position";i:6;}i:2;O:15:"SqlParser\Token":5:{s:5:"token";N;s:5:"value";N;s:4:"type";i:9;s:5:"flags";i:0;s:8:"position";N;}}s:5:"count";i:3;s:3:"idx";i:3;}s:9:"delimiter";s:1:";";s:12:"delimiterLen";i:1;s:6:"errors";a:0:{}}s:6:"parser";O:16:"SqlParser\Parser":4:{s:4:"list";r:8;s:6:"strict";b:0;s:6:"errors";a:0:{}s:10:"statements";a:1:{i:0;O:41:"SqlParser\Statements\TransactionStatement":6:{s:4:"type";i:2;s:10:"statements";N;s:3:"end";N;s:7:"options";O:33:"SqlParser\Components\OptionsArray":1:{s:7:"options";a:1:{i:1;s:6:"COMMIT";}}s:5:"first";i:0;s:4:"last";i:0;}}}s:6:"errors";a:2:{s:5:"lexer";a:0:{}s:6:"parser";a:1:{i:0;a:3:{i:0;s:38:"No transaction was previously started.";i:1;r:10;i:2;i:0;}}}}

0 commit comments

Comments
 (0)