Repository navigation
Lexical error from backslash in string literal #1173
Copy link
Copy link
Closed
Description
Describe the bug
Lexical error for Oracle update statement when where clause has backslash in string literal.
To Reproduce
Steps to reproduce the behavior:
- update PARAM_TBL set PARA_DESC = null where PARA_DESC = '\' and DEFAULT_VALUE = '\'
- Parsing this SQL using JSqlParser with this statements:
import net.sf.jsqlparser.parser.CCJSqlParserUtil;
public class SqlParse {
public static void main(String[] args) throws Exception {
String sql = "update PARAM_TBL set PARA_DESC = null where PARA_DESC = '\\' and DEFAULT_VALUE = '\\'";
CCJSqlParserUtil.parse(sql);
}
}
- Exception
Exception in thread "main" net.sf.jsqlparser.JSQLParserException: Lexical error at line 1, column 82. Encountered: "\\" (92), after : ""
at net.sf.jsqlparser.parser.CCJSqlParserUtil.parseStatement(CCJSqlParserUtil.java:165)
at net.sf.jsqlparser.parser.CCJSqlParserUtil.parse(CCJSqlParserUtil.java:59)
at net.sf.jsqlparser.parser.CCJSqlParserUtil.parse(CCJSqlParserUtil.java:37)
at SqlParse.main(SqlParse.java:7)
Caused by: net.sf.jsqlparser.parser.TokenMgrException: Lexical error at line 1, column 82. Encountered: "\\" (92), after : ""
at net.sf.jsqlparser.parser.CCJSqlParserTokenManager.getNextToken(CCJSqlParserTokenManager.java:4759)
at net.sf.jsqlparser.parser.CCJSqlParser.jj_scan_token(CCJSqlParser.java:26392)
at net.sf.jsqlparser.parser.CCJSqlParser.jj_3R_PrimaryExpression_3279_9_631(CCJSqlParser.java:24982)
at net.sf.jsqlparser.parser.CCJSqlParser.jj_3R_PrimaryExpression_3217_5_117(CCJSqlParser.java:25491)
at net.sf.jsqlparser.parser.CCJSqlParser.jj_3R_BitwiseXor_3187_5_184(CCJSqlParser.java:25612)
at net.sf.jsqlparser.parser.CCJSqlParser.jj_3R_MultiplicativeExpression_3157_5_179(CCJSqlParser.java:25743)
at net.sf.jsqlparser.parser.CCJSqlParser.jj_3R_AdditiveExpression_3133_5_360(CCJSqlParser.java:25826)
at net.sf.jsqlparser.parser.CCJSqlParser.jj_3R_BitwiseAndOr_3101_5_176(CCJSqlParser.java:26047)
at net.sf.jsqlparser.parser.CCJSqlParser.jj_3R_ConcatExpression_3078_5_258(CCJSqlParser.java:26100)
at net.sf.jsqlparser.parser.CCJSqlParser.jj_3R_SimpleExpression_3054_5_115(CCJSqlParser.java:18471)
at net.sf.jsqlparser.parser.CCJSqlParser.jj_3_93(CCJSqlParser.java:18642)
at net.sf.jsqlparser.parser.CCJSqlParser.jj_3R_ComparisonItem_3008_3_158(CCJSqlParser.java:18744)
at net.sf.jsqlparser.parser.CCJSqlParser.jj_3R_RegularCondition_2665_9_334(CCJSqlParser.java:20825)
at net.sf.jsqlparser.parser.CCJSqlParser.jj_3R_RegularCondition_2633_5_157(CCJSqlParser.java:21160)
at net.sf.jsqlparser.parser.CCJSqlParser.jj_3R_Condition_2616_9_310(CCJSqlParser.java:21226)
at net.sf.jsqlparser.parser.CCJSqlParser.jj_3R_Condition_2614_5_154(CCJSqlParser.java:21260)
at net.sf.jsqlparser.parser.CCJSqlParser.jj_3_70(CCJSqlParser.java:21352)
at net.sf.jsqlparser.parser.CCJSqlParser.jj_2_70(CCJSqlParser.java:17723)
at net.sf.jsqlparser.parser.CCJSqlParser.AndExpression(CCJSqlParser.java:8424)
at net.sf.jsqlparser.parser.CCJSqlParser.OrExpression(CCJSqlParser.java:8400)
at net.sf.jsqlparser.parser.CCJSqlParser.Expression(CCJSqlParser.java:8371)
at net.sf.jsqlparser.parser.CCJSqlParser.WhereClause(CCJSqlParser.java:7284)
at net.sf.jsqlparser.parser.CCJSqlParser.Update(CCJSqlParser.java:1408)
at net.sf.jsqlparser.parser.CCJSqlParser.SingleStatement(CCJSqlParser.java:138)
at net.sf.jsqlparser.parser.CCJSqlParser.Statement(CCJSqlParser.java:81)
at net.sf.jsqlparser.parser.CCJSqlParserUtil.parseStatement(CCJSqlParserUtil.java:163)
... 3 more
System
- Oracle 10
- Java 8
- JSqlParser 4.0
Reactions are currently unavailable
Metadata
Metadata
Assignees
Labels
No labels
Activity
wumpz commentedon Apr 28, 2021
This is connected to quote parsing in JSqlParser. So JSqlParser recognizes \' as an escaped quote and therefore the accepted string literal here is:
which is not your intention.
wumpz commentedon Apr 28, 2021
I thinking about making this quotation escaping somehow more robust. Probably we should consider making the concrete processing optional.
feat: Configurable backslash `\` escaping
Assorted Fixes #5 (#1715)