Repository navigation
Fail to parse ESCAPE '\' with two Columns Escaped #832
Copy link
Copy link
Closed
Description
Actual Behavior
JSQLParserException is thrown:
at net.sf.jsqlparser.parser.CCJSqlParserManager.parse(CCJSqlParserManager.java:40)
Caused by: net.sf.jsqlparser.parser.TokenMgrException: Lexical error at line 1, column 81. Encountered: "\\" (92), after : ""
at net.sf.jsqlparser.parser.CCJSqlParserTokenManager.getNextToken(CCJSqlParserTokenManager.java:3600)
at net.sf.jsqlparser.parser.CCJSqlParser.jj_ntk_f(CCJSqlParser.java:19297)
at net.sf.jsqlparser.parser.CCJSqlParser.AndExpression(CCJSqlParser.java:6101)
at net.sf.jsqlparser.parser.CCJSqlParser.OrExpression(CCJSqlParser.java:6051)
at net.sf.jsqlparser.parser.CCJSqlParser.AndExpression(CCJSqlParser.java:6087)
at net.sf.jsqlparser.parser.CCJSqlParser.OrExpression(CCJSqlParser.java:6051)
at net.sf.jsqlparser.parser.CCJSqlParser.AndExpression(CCJSqlParser.java:6142)
at net.sf.jsqlparser.parser.CCJSqlParser.OrExpression(CCJSqlParser.java:6051)
at net.sf.jsqlparser.parser.CCJSqlParser.Expression(CCJSqlParser.java:6022)
at net.sf.jsqlparser.parser.CCJSqlParser.WhereClause(CCJSqlParser.java:5379)
at net.sf.jsqlparser.parser.CCJSqlParser.PlainSelect(CCJSqlParser.java:3195)
at net.sf.jsqlparser.parser.CCJSqlParser.SetOperationList(CCJSqlParser.java:3351)
at net.sf.jsqlparser.parser.CCJSqlParser.SelectBody(CCJSqlParser.java:3059)
at net.sf.jsqlparser.parser.CCJSqlParser.SubSelect(CCJSqlParser.java:9738)
at net.sf.jsqlparser.parser.CCJSqlParser.FromItem(CCJSqlParser.java:4556)
at net.sf.jsqlparser.parser.CCJSqlParser.PlainSelect(CCJSqlParser.java:3185)
at net.sf.jsqlparser.parser.CCJSqlParser.SetOperationList(CCJSqlParser.java:3351)
at net.sf.jsqlparser.parser.CCJSqlParser.SelectBody(CCJSqlParser.java:3059)
at net.sf.jsqlparser.parser.CCJSqlParser.Select(CCJSqlParser.java:3052)
at net.sf.jsqlparser.parser.CCJSqlParser.SingleStatement(CCJSqlParser.java:132)
at net.sf.jsqlparser.parser.CCJSqlParser.Statement(CCJSqlParser.java:83)
at net.sf.jsqlparser.parser.CCJSqlParserManager.parse(CCJSqlParserManager.java:38)
Expected Behavior
Can parse this without issues.
Steps to Reproduce the Problem
Parse this SQL:
SELECT * FROM T1 WHERE (name LIKE ? ESCAPE '\') AND (description LIKE ? ESCAPE '\')
Code Used
Statement statement = new CCJSqlParserManager().parse(new StringReader("SELECT * FROM T1 WHERE (name LIKE ? ESCAPE '\') AND (description LIKE ? ESCAPE '\')"))
Note
This parses without issues, having the 2nd escape is needed to see the problem:
SELECT * FROM T1 WHERE (name LIKE ? ESCAPE '\') AND (description LIKE ?)
Specifications
Tried using com.github.jsqlparser:jsqlparser:1.4 and com.github.jsqlparser:jsqlparser:2.1
Reactions are currently unavailable
Metadata
Metadata
Assignees
Labels
No labels
Activity
sivaraam commentedon Sep 23, 2019
Interesting. On first sight, I thought not escaping the backslash in following statement was the reason behind the issue,
So, I tried the following,
Note that
\is replaced with\\. But, this didn't parse. Then I tried splitting the query into multiple lines (by adding newlines to different parts the query) to make more sense to the line information printed in error. So, I tried the following,Interestingly it parsed without errors. It seems that the parse has issues only when two ESCAPES are found in the same line in a query.
wumpz commentedon Sep 23, 2019
I know that. It is a problem with JSqlParser supporting \ escaping and '' escaping. Til now I was not able to switch on / off one or the other by a flag. If this could be solved by updating the literals reg exp I would be very happy. PRs are welcome.
I thingk the multiline issue comes from JavaCCs evaluating token reg exps.
feat: Configurable backslash `\` escaping