question-mark
Stuck on an issue?

Lightrun Answers was designed to reduce the constant googling that comes with debugging 3rd party libraries. It collects links to all the places you might be looking at while hunting down a tough bug.

And, if you’re still stuck at the end, we’re happy to hop on a call to see how we can help out.

Parser hangs in some queries

See original GitHub issue

Parser hangs during parse of a query with big number of comas.

Steps to reproduce Parse query SELECT * FROM ((((((((((((((((tblA))))))))))))))))

Parser hangs (loops infinitely consuming 100% of cpu)

This issue was reported in https://github.com/dbeaver/dbeaver/issues/9054

Stack from the thread dump:

java.lang.Thread.State: RUNNABLE
	  at net.sf.jsqlparser.parser.CCJSqlParser.jj_add_error_token(CCJSqlParser.java:24965)
	  at net.sf.jsqlparser.parser.CCJSqlParser.jj_scan_token(CCJSqlParser.java:24895)
	  at net.sf.jsqlparser.parser.CCJSqlParser.jj_3R_385(CCJSqlParser.java:18292)
	  at net.sf.jsqlparser.parser.CCJSqlParser.jj_3R_515(CCJSqlParser.java:18130)
	  at net.sf.jsqlparser.parser.CCJSqlParser.jj_3R_421(CCJSqlParser.java:18138)
	  at net.sf.jsqlparser.parser.CCJSqlParser.jj_3R_354(CCJSqlParser.java:24089)
	  at net.sf.jsqlparser.parser.CCJSqlParser.jj_3R_193(CCJSqlParser.java:24132)
	  at net.sf.jsqlparser.parser.CCJSqlParser.jj_3R_502(CCJSqlParser.java:22742)
	  at net.sf.jsqlparser.parser.CCJSqlParser.jj_3R_388(CCJSqlParser.java:22907)
	  at net.sf.jsqlparser.parser.CCJSqlParser.jj_3R_275(CCJSqlParser.java:22938)
	  at net.sf.jsqlparser.parser.CCJSqlParser.jj_3R_129(CCJSqlParser.java:22428)
	  at net.sf.jsqlparser.parser.CCJSqlParser.jj_3R_561(CCJSqlParser.java:22816)
	  at net.sf.jsqlparser.parser.CCJSqlParser.jj_3R_498(CCJSqlParser.java:22852)
	  at net.sf.jsqlparser.parser.CCJSqlParser.jj_3R_388(CCJSqlParser.java:22896)
	  at net.sf.jsqlparser.parser.CCJSqlParser.jj_3R_275(CCJSqlParser.java:22938)
	  at net.sf.jsqlparser.parser.CCJSqlParser.jj_3R_129(CCJSqlParser.java:22428)
	  at net.sf.jsqlparser.parser.CCJSqlParser.jj_3R_561(CCJSqlParser.java:22816)
	  at net.sf.jsqlparser.parser.CCJSqlParser.jj_3R_498(CCJSqlParser.java:22852)
	  at net.sf.jsqlparser.parser.CCJSqlParser.jj_3R_388(CCJSqlParser.java:22896)
	  at net.sf.jsqlparser.parser.CCJSqlParser.jj_3R_275(CCJSqlParser.java:22938)
	  at net.sf.jsqlparser.parser.CCJSqlParser.jj_3R_129(CCJSqlParser.java:22428)
	  at net.sf.jsqlparser.parser.CCJSqlParser.jj_3R_561(CCJSqlParser.java:22816)
	  at net.sf.jsqlparser.parser.CCJSqlParser.jj_3R_498(CCJSqlParser.java:22852)
	  at net.sf.jsqlparser.parser.CCJSqlParser.jj_3R_388(CCJSqlParser.java:22896)
	  at net.sf.jsqlparser.parser.CCJSqlParser.jj_3R_275(CCJSqlParser.java:22938)
	  at net.sf.jsqlparser.parser.CCJSqlParser.jj_3R_129(CCJSqlParser.java:22428)
	  at net.sf.jsqlparser.parser.CCJSqlParser.jj_3R_561(CCJSqlParser.java:22816)
	  at net.sf.jsqlparser.parser.CCJSqlParser.jj_3R_498(CCJSqlParser.java:22852)
	  at net.sf.jsqlparser.parser.CCJSqlParser.jj_3R_388(CCJSqlParser.java:22896)
	  at net.sf.jsqlparser.parser.CCJSqlParser.jj_3R_275(CCJSqlParser.java:22938)
	  at net.sf.jsqlparser.parser.CCJSqlParser.jj_3R_562(CCJSqlParser.java:22767)
	  at net.sf.jsqlparser.parser.CCJSqlParser.jj_3R_498(CCJSqlParser.java:22856)
	  at net.sf.jsqlparser.parser.CCJSqlParser.jj_3R_388(CCJSqlParser.java:22896)
	  at net.sf.jsqlparser.parser.CCJSqlParser.jj_3R_275(CCJSqlParser.java:22938)
	  at net.sf.jsqlparser.parser.CCJSqlParser.jj_3R_562(CCJSqlParser.java:22767)
	  at net.sf.jsqlparser.parser.CCJSqlParser.jj_3R_498(CCJSqlParser.java:22856)
	  at net.sf.jsqlparser.parser.CCJSqlParser.jj_3R_388(CCJSqlParser.java:22896)
	  at net.sf.jsqlparser.parser.CCJSqlParser.jj_3R_275(CCJSqlParser.java:22938)
	  at net.sf.jsqlparser.parser.CCJSqlParser.jj_3R_562(CCJSqlParser.java:22767)
	  at net.sf.jsqlparser.parser.CCJSqlParser.jj_3R_498(CCJSqlParser.java:22856)
	  at net.sf.jsqlparser.parser.CCJSqlParser.jj_3R_388(CCJSqlParser.java:22896)
	  at net.sf.jsqlparser.parser.CCJSqlParser.jj_3R_275(CCJSqlParser.java:22938)
	  at net.sf.jsqlparser.parser.CCJSqlParser.jj_3R_562(CCJSqlParser.java:22767)
	  at net.sf.jsqlparser.parser.CCJSqlParser.jj_3R_498(CCJSqlParser.java:22856)
	  at net.sf.jsqlparser.parser.CCJSqlParser.jj_3R_388(CCJSqlParser.java:22896)
	  at net.sf.jsqlparser.parser.CCJSqlParser.jj_3R_275(CCJSqlParser.java:22938)
	  at net.sf.jsqlparser.parser.CCJSqlParser.jj_3R_562(CCJSqlParser.java:22767)
	  at net.sf.jsqlparser.parser.CCJSqlParser.jj_3R_498(CCJSqlParser.java:22856)
	  at net.sf.jsqlparser.parser.CCJSqlParser.jj_3R_388(CCJSqlParser.java:22896)
	  at net.sf.jsqlparser.parser.CCJSqlParser.jj_3R_275(CCJSqlParser.java:22938)
	  at net.sf.jsqlparser.parser.CCJSqlParser.jj_3R_129(CCJSqlParser.java:22428)
	  at net.sf.jsqlparser.parser.CCJSqlParser.jj_3R_561(CCJSqlParser.java:22816)
	  at net.sf.jsqlparser.parser.CCJSqlParser.jj_3R_498(CCJSqlParser.java:22852)
	  at net.sf.jsqlparser.parser.CCJSqlParser.jj_3R_388(CCJSqlParser.java:22896)
	  at net.sf.jsqlparser.parser.CCJSqlParser.jj_3R_275(CCJSqlParser.java:22938)
	  at net.sf.jsqlparser.parser.CCJSqlParser.jj_3R_562(CCJSqlParser.java:22767)
	  at net.sf.jsqlparser.parser.CCJSqlParser.jj_3R_498(CCJSqlParser.java:22856)
	  at net.sf.jsqlparser.parser.CCJSqlParser.jj_3R_388(CCJSqlParser.java:22896)
	  at net.sf.jsqlparser.parser.CCJSqlParser.jj_3R_275(CCJSqlParser.java:22938)
	  at net.sf.jsqlparser.parser.CCJSqlParser.jj_3R_129(CCJSqlParser.java:22428)
	  at net.sf.jsqlparser.parser.CCJSqlParser.jj_3R_561(CCJSqlParser.java:22816)
	  at net.sf.jsqlparser.parser.CCJSqlParser.jj_3R_498(CCJSqlParser.java:22852)
	  at net.sf.jsqlparser.parser.CCJSqlParser.jj_3R_388(CCJSqlParser.java:22896)
	  at net.sf.jsqlparser.parser.CCJSqlParser.jj_3R_275(CCJSqlParser.java:22938)
	  at net.sf.jsqlparser.parser.CCJSqlParser.jj_3R_129(CCJSqlParser.java:22428)
	  at net.sf.jsqlparser.parser.CCJSqlParser.jj_3R_561(CCJSqlParser.java:22816)
	  at net.sf.jsqlparser.parser.CCJSqlParser.jj_3R_498(CCJSqlParser.java:22852)
	  at net.sf.jsqlparser.parser.CCJSqlParser.jj_3R_388(CCJSqlParser.java:22896)
	  at net.sf.jsqlparser.parser.CCJSqlParser.jj_3R_275(CCJSqlParser.java:22938)
	  at net.sf.jsqlparser.parser.CCJSqlParser.jj_3R_129(CCJSqlParser.java:22428)
	  at net.sf.jsqlparser.parser.CCJSqlParser.jj_3R_561(CCJSqlParser.java:22816)
	  at net.sf.jsqlparser.parser.CCJSqlParser.jj_3R_498(CCJSqlParser.java:22852)
	  at net.sf.jsqlparser.parser.CCJSqlParser.jj_3R_388(CCJSqlParser.java:22896)
	  at net.sf.jsqlparser.parser.CCJSqlParser.jj_3R_275(CCJSqlParser.java:22938)
	  at net.sf.jsqlparser.parser.CCJSqlParser.jj_3R_129(CCJSqlParser.java:22428)
	  at net.sf.jsqlparser.parser.CCJSqlParser.jj_3R_561(CCJSqlParser.java:22816)
	  at net.sf.jsqlparser.parser.CCJSqlParser.jj_3R_498(CCJSqlParser.java:22852)
	  at net.sf.jsqlparser.parser.CCJSqlParser.jj_3R_388(CCJSqlParser.java:22896)
	  at net.sf.jsqlparser.parser.CCJSqlParser.jj_3R_275(CCJSqlParser.java:22938)
	  at net.sf.jsqlparser.parser.CCJSqlParser.jj_3R_129(CCJSqlParser.java:22428)
	  at net.sf.jsqlparser.parser.CCJSqlParser.jj_3_47(CCJSqlParser.java:22730)
	  at net.sf.jsqlparser.parser.CCJSqlParser.jj_rescan_token(CCJSqlParser.java:25106)
	  at net.sf.jsqlparser.parser.CCJSqlParser.generateParseException(CCJSqlParser.java:25025)
	  at net.sf.jsqlparser.parser.CCJSqlParser.jj_consume_token(CCJSqlParser.java:24875)
	  at net.sf.jsqlparser.parser.CCJSqlParser.SetOperationList(CCJSqlParser.java:4281)
	  at net.sf.jsqlparser.parser.CCJSqlParser.SelectBody(CCJSqlParser.java:3923)
	  at net.sf.jsqlparser.parser.CCJSqlParser.SetOperationList(CCJSqlParser.java:4255)
	  at net.sf.jsqlparser.parser.CCJSqlParser.SelectBody(CCJSqlParser.java:3923)
	  at net.sf.jsqlparser.parser.CCJSqlParser.SetOperationList(CCJSqlParser.java:4255)
	  at net.sf.jsqlparser.parser.CCJSqlParser.SelectBody(CCJSqlParser.java:3923)
	  at net.sf.jsqlparser.parser.CCJSqlParser.SetOperationList(CCJSqlParser.java:4255)
	  at net.sf.jsqlparser.parser.CCJSqlParser.SelectBody(CCJSqlParser.java:3923)
	  at net.sf.jsqlparser.parser.CCJSqlParser.SetOperationList(CCJSqlParser.java:4255)
	  at net.sf.jsqlparser.parser.CCJSqlParser.SelectBody(CCJSqlParser.java:3923)
	  at net.sf.jsqlparser.parser.CCJSqlParser.SetOperationList(CCJSqlParser.java:4255)
	  at net.sf.jsqlparser.parser.CCJSqlParser.SelectBody(CCJSqlParser.java:3923)
	  at net.sf.jsqlparser.parser.CCJSqlParser.SetOperationList(CCJSqlParser.java:4255)
	  at net.sf.jsqlparser.parser.CCJSqlParser.SelectBody(CCJSqlParser.java:3923)
	  at net.sf.jsqlparser.parser.CCJSqlParser.SetOperationList(CCJSqlParser.java:4255)
	  at net.sf.jsqlparser.parser.CCJSqlParser.SelectBody(CCJSqlParser.java:3923)
	  at net.sf.jsqlparser.parser.CCJSqlParser.SetOperationList(CCJSqlParser.java:4255)
	  at net.sf.jsqlparser.parser.CCJSqlParser.SelectBody(CCJSqlParser.java:3923)
	  at net.sf.jsqlparser.parser.CCJSqlParser.SetOperationList(CCJSqlParser.java:4255)
	  at net.sf.jsqlparser.parser.CCJSqlParser.SelectBody(CCJSqlParser.java:3923)
	  at net.sf.jsqlparser.parser.CCJSqlParser.SetOperationList(CCJSqlParser.java:4255)
	  at net.sf.jsqlparser.parser.CCJSqlParser.SelectBody(CCJSqlParser.java:3923)
	  at net.sf.jsqlparser.parser.CCJSqlParser.SetOperationList(CCJSqlParser.java:4255)
	  at net.sf.jsqlparser.parser.CCJSqlParser.SelectBody(CCJSqlParser.java:3923)
	  at net.sf.jsqlparser.parser.CCJSqlParser.SetOperationList(CCJSqlParser.java:4255)
	  at net.sf.jsqlparser.parser.CCJSqlParser.SelectBody(CCJSqlParser.java:3923)
	  at net.sf.jsqlparser.parser.CCJSqlParser.SetOperationList(CCJSqlParser.java:4255)
	  at net.sf.jsqlparser.parser.CCJSqlParser.SelectBody(CCJSqlParser.java:3923)
	  at net.sf.jsqlparser.parser.CCJSqlParser.SetOperationList(CCJSqlParser.java:4255)
	  at net.sf.jsqlparser.parser.CCJSqlParser.SelectBody(CCJSqlParser.java:3923)
	  at net.sf.jsqlparser.parser.CCJSqlParser.SetOperationList(CCJSqlParser.java:4255)
	  at net.sf.jsqlparser.parser.CCJSqlParser.SelectBody(CCJSqlParser.java:3923)
	  at net.sf.jsqlparser.parser.CCJSqlParser.SubSelect(CCJSqlParser.java:12580)
	  at net.sf.jsqlparser.parser.CCJSqlParser.FromItem(CCJSqlParser.java:5840)
	  at net.sf.jsqlparser.parser.CCJSqlParser.PlainSelect(CCJSqlParser.java:4055)
	  at net.sf.jsqlparser.parser.CCJSqlParser.SetOperationList(CCJSqlParser.java:4264)
	  at net.sf.jsqlparser.parser.CCJSqlParser.SelectBody(CCJSqlParser.java:3923)
	  at net.sf.jsqlparser.parser.CCJSqlParser.Select(CCJSqlParser.java:3916)
	  at net.sf.jsqlparser.parser.CCJSqlParser.SingleStatement(CCJSqlParser.java:130)
	  at net.sf.jsqlparser.parser.CCJSqlParser.Statement(CCJSqlParser.java:81)

System

  • Any database
  • Java 11
  • JSQLParser 3.2

Issue Analytics

  • State:closed
  • Created 3 years ago
  • Comments:10 (5 by maintainers)

github_iconTop GitHub Comments

1reaction
wumpzcommented, Dec 31, 2020

Sorry. It’s a bit late.

I included a test for

SELECT * FROM (((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((tblA)))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))

This one now parses in <0.2 secs.

0reactions
serge-ridercommented, Jan 15, 2021

Thank you!

Read more comments on GitHub >

github_iconTop Results From Across the Web

Query Hangs while Parsing - Oracle Communities
In one of our databases, one of the Select query hangs at the parsing stage. The query was working fine few days back....
Read more >
Parser hangs on query with multiple "case when" statements · Issue ...
Describe the bug Our users experience problems running queries which contain multiple "case when" statements: dbeaver/dbeaver#10704 To Reproduce Use the ...
Read more >
MySQL workbench freezes for around 20 seconds on first ...
The program was unable to parse some of the files, presumably because they were generated by a previous version of MySQL workbench.
Read more >
Bug #730739 “query parser error - bib search hangs on query with ...
I've pushed a branch which ignores empty query atoms (including those that have a - in front of them, and those that look...
Read more >
Parse Server crashing when I running a query on a single row
this is a dupe of Node.js heap out of memory. You can try bumping up how much memory your node process has with ......
Read more >

github_iconTop Related Medium Post

No results found

github_iconTop Related StackOverflow Question

No results found

github_iconTroubleshoot Live Code

Lightrun enables developers to add logs, metrics and snapshots to live code - no restarts or redeploys required.
Start Free

github_iconTop Related Reddit Thread

No results found

github_iconTop Related Hackernoon Post

No results found

github_iconTop Related Tweet

No results found

github_iconTop Related Dev.to Post

No results found

github_iconTop Related Hashnode Post

No results found