We read every piece of feedback, and take your input very seriously.
To see all available qualifiers, see our documentation.
2 parents 30c444f + e30aa28 commit 0842db6Copy full SHA for 0842db6
2 files changed
src/Tokenizer.php
@@ -55,14 +55,23 @@ protected function statements()
55
{
56
$statements = [];
57
58
- while ($result = $this->statement()) {
59
- $statements[] = $result;
60
- }
+ do {
+ $result = $this->statement();
+ if ($result !== null && count($result) > 0) {
61
+ $statements[] = $result;
62
+ }
63
+ } while ($result !== null);
64
65
return $statements;
66
}
67
68
/**
69
+ * Returns an array containing the tokens in the next statement of the input.
70
+ *
71
+ * Returns empty array on empty statements (i.e. repeated delimiters, like: ;;;).
72
73
+ * Returns null if End-Of-File reached.
74
75
* @return string[]|null
76
*/
77
protected function statement()
@@ -76,6 +85,10 @@ protected function statement()
85
$tokens = [];
86
78
87
while ("" !== $token = $this->token()) {
88
+ /**
89
+ * DEV NOTE: This checks for DELIMITER statement, that changes delimiter from ; to something else.
90
+ * If detected, it will extract the new DELIMITER and reassign $this->delimiter_pattern.
91
+ */
79
92
if (is_string($token) && preg_match('/^delimiter$/i', $token) === 1) {
80
93
$this->consume('[ ]*');
81
94
@@ -218,7 +231,7 @@ protected function grouped()
218
231
if ($this->is($closing)) {
219
232
$tokens[] = $closing;
220
233
221
- $this->offset +=1;
234
+ $this->offset += 1;
222
235
223
236
return $tokens;
224
237
tests/unit/TokenizerCest.php
@@ -138,6 +138,26 @@ protected function useCases(): array
138
["/* three\nfour */", "\n", "SELECT", " ", "2"],
139
],
140
141
+ [
142
+ self::MESSAGE => "Empty statement - in between",
143
+ self::INPUT => "SELECT 1;; SELECT 2",
144
+ self::EXPECTED => [["SELECT", " ", "1"], ["SELECT", " ", "2"]],
145
+ ],
146
147
+ self::MESSAGE => "Empty statements - first",
148
+ self::INPUT => ";;SELECT 1; SELECT 2;",
149
150
151
152
+ self::MESSAGE => "Empty statements - last",
153
+ self::INPUT => "SELECT 1; SELECT 2;;;",
154
155
156
157
+ self::MESSAGE => "Empty statements - all over",
158
+ self::INPUT => ";;;;SELECT 1;;;; SELECT 2;;;",
159
160
161
];
162
163
0 commit comments