JSqlParser icon indicating copy to clipboard operation
JSqlParser copied to clipboard

No support for LOCK TABLES

Open ksqsf opened this issue 4 years ago • 2 comments

Describe the bug JSqlParser doesn't support LOCK TABLES and throws ParseException: Encountered unexpected token.

To Reproduce SQL:

-- Other Parsable Statements;
LOCK TABLES `table` WRITE;
-- Other Parsable Statements;
-- UNLOCK...

Parsing:

        val file = File(path).bufferedReader()
        val parser = CCJSqlParser(file.readText())

Exception:

Exception in thread "main" net.sf.jsqlparser.parser.ParseException: Encountered unexpected token: "LOCK" <S_IDENTIFIER>
    at line 42, column 1.

Was expecting one of:

    "("
    ";"
    "ALTER"
    "BEGIN"
    "CALL"
    "COMMENT"
    "COMMIT"
    "CREATE"
    "DECLARE"
    "DELETE"
    "DESCRIBE"
    "DROP"
    "EXEC"
    "EXECUTE"
    "EXPLAIN"
    "GRANT"
    "INSERT"
    "MERGE"
    "REPLACE"
    "SET"
    "SHOW"
    "TRUNCATE"
    "UPDATE"
    "UPSERT"
    "USE"
    "VALUES"
    "WITH"
    <K_SELECT>

	at net.sf.jsqlparser.parser.CCJSqlParser.generateParseException(CCJSqlParser.java:26538)
	at net.sf.jsqlparser.parser.CCJSqlParser.jj_consume_token(CCJSqlParser.java:26377)
	at net.sf.jsqlparser.parser.CCJSqlParser.Statements(CCJSqlParser.java:511)

Expected behavior Parse it into an AST.

System Ref: https://dev.mysql.com/doc/refman/8.0/en/lock-tables.html

ksqsf avatar Mar 27 '21 07:03 ksqsf

Is there a way to ignore such unparsable statements?

ksqsf avatar Mar 27 '21 07:03 ksqsf

Look into StatementsTest. There are examples of parser.setErrorRecovery(true);. This skips unparsable statements.

wumpz avatar Apr 10 '21 21:04 wumpz

See UnsupportedStatements as explain in #1945 (unless you will sponsor or provide a specific implementation of this feature.)

manticore-projects avatar Apr 18 '24 12:04 manticore-projects