@@ -180,6 +180,13 @@ public function parse(Parser $parser, TokensList $list)
180180 */
181181 $ state = 0 ;
182182
183+ /**
184+ * If the query is multi-table or not
185+ *
186+ * @var bool $multiTable
187+ */
188+ $ multiTable = false ;
189+
183190 for (; $ list ->idx < $ list ->count ; ++$ list ->idx ) {
184191 /**
185192 * Token parsed at this moment.
@@ -193,11 +200,6 @@ public function parse(Parser $parser, TokensList $list)
193200 break ;
194201 }
195202
196- // Skipping whitespaces and comments.
197- if (($ token ->type === Token::TYPE_WHITESPACE ) || ($ token ->type === Token::TYPE_COMMENT )) {
198- continue ;
199- }
200-
201203 if ($ state === 0 ) {
202204 if ($ token ->type === Token::TYPE_KEYWORD
203205 && $ token ->value !== 'FROM '
@@ -226,9 +228,6 @@ public function parse(Parser $parser, TokensList $list)
226228 ++$ list ->idx ; // Skip 'FROM'
227229 $ this ->from = ExpressionArray::parse ($ parser , $ list );
228230 $ state = 2 ;
229- } elseif ($ token ->type === Token::TYPE_KEYWORD ) {
230- $ parser ->error (__ ('Unexpected keyword. ' ), $ token );
231- break ;
232231 } else {
233232 $ parser ->error (__ ('Unexpected token. ' ), $ token );
234233 break ;
@@ -237,9 +236,11 @@ public function parse(Parser $parser, TokensList $list)
237236 if ($ token ->type === Token::TYPE_KEYWORD
238237 && $ token ->value === 'USING '
239238 ) {
240- ++$ list ->idx ; // Skip 'FROM '
239+ ++$ list ->idx ; // Skip 'USING '
241240 $ this ->using = ExpressionArray::parse ($ parser , $ list );
242241 $ state = 3 ;
242+
243+ $ multiTable = true ;
243244 } elseif ($ token ->type === Token::TYPE_KEYWORD
244245 && $ token ->value === 'WHERE '
245246 ) {
@@ -261,9 +262,6 @@ public function parse(Parser $parser, TokensList $list)
261262 } elseif ($ token ->type === Token::TYPE_KEYWORD ) {
262263 $ parser ->error (__ ('Unexpected keyword. ' ), $ token );
263264 break ;
264- } else {
265- $ parser ->error (__ ('Unexpected token. ' ), $ token );
266- break ;
267265 }
268266 } elseif ($ state === 3 ) {
269267 if ($ token ->type === Token::TYPE_KEYWORD
@@ -272,18 +270,6 @@ public function parse(Parser $parser, TokensList $list)
272270 ++$ list ->idx ; // Skip 'WHERE'
273271 $ this ->where = Condition::parse ($ parser , $ list );
274272 $ state = 4 ;
275- } elseif ($ token ->type === Token::TYPE_KEYWORD
276- && $ token ->value === 'ORDER BY '
277- ) {
278- ++$ list ->idx ; // Skip 'ORDER BY'
279- $ this ->order = OrderKeyword::parse ($ parser , $ list );
280- $ state = 5 ;
281- } elseif ($ token ->type === Token::TYPE_KEYWORD
282- && $ token ->value === 'LIMIT '
283- ) {
284- ++$ list ->idx ; // Skip 'LIMIT'
285- $ this ->limit = Limit::parse ($ parser , $ list );
286- $ state = 6 ;
287273 } elseif ($ token ->type === Token::TYPE_KEYWORD ) {
288274 $ parser ->error (__ ('Unexpected keyword. ' ), $ token );
289275 break ;
@@ -292,6 +278,16 @@ public function parse(Parser $parser, TokensList $list)
292278 break ;
293279 }
294280 } elseif ($ state === 4 ) {
281+ if ($ multiTable === true
282+ && $ token ->type === Token::TYPE_KEYWORD
283+ ) {
284+ $ parser ->error (
285+ __ ('This type of clause is not valid in Multi-table queries. ' ),
286+ $ token
287+ );
288+ break ;
289+ }
290+
295291 if ($ token ->type === Token::TYPE_KEYWORD
296292 && $ token ->value === 'ORDER BY '
297293 ) {
@@ -307,9 +303,6 @@ public function parse(Parser $parser, TokensList $list)
307303 } elseif ($ token ->type === Token::TYPE_KEYWORD ) {
308304 $ parser ->error (__ ('Unexpected keyword. ' ), $ token );
309305 break ;
310- } else {
311- $ parser ->error (__ ('Unexpected token. ' ), $ token );
312- break ;
313306 }
314307 } elseif ($ state === 5 ) {
315308 if ($ token ->type === Token::TYPE_KEYWORD
@@ -321,9 +314,6 @@ public function parse(Parser $parser, TokensList $list)
321314 } elseif ($ token ->type === Token::TYPE_KEYWORD ) {
322315 $ parser ->error (__ ('Unexpected keyword. ' ), $ token );
323316 break ;
324- } else {
325- $ parser ->error (__ ('Unexpected token. ' ), $ token );
326- break ;
327317 }
328318 }
329319 }
0 commit comments