Visitar URL original
Encountered unexpected token: "\n\n\n" <ST_SEMICOLON> · Issue #1988 · JSQLParser/JSqlParser · GitHub
Skip to content

Encountered unexpected token: "\n\n\n" <ST_SEMICOLON> #1988

Description

@pansong291

Always check against the Latest SNAPSHOT of JSQLParser and the Syntax Diagram

Failing SQL Feature:

  • Brief description of the failing SQL feature
    net.sf.jsqlparser.parser.ParseException: Encountered unexpected token: "\n\n\n" <ST_SEMICOLON>
      at line 1, column 39.
    

SQL Example:

  • Simplified Query Example, focusing on the failing feature
    UPDATE shop_info  SET title=?,
    
    
    
    
    props=?  WHERE id=?
  • This SQL statement is dynamically concatenated in the program using a third-party library, so it is not possible to remove the extra blank lines within it. Even with the extra blank lines, it can be executed normally in MySQL, which means it does not have syntax errors.

Software Information:

  • JSqlParser version 4.6
  • Database MySQL

Tips:

Please write in English and avoid Screenshots (as we can't copy and paste content from it).
Try your example online with the latest JSQLParser and share the link in the error report.
Do provide Links or References to the specific Grammar and Syntax you are trying to use.

http://jsqlformatter.manticore-projects.com/jsqlformatter/demo.html?args=-c%20KoBQIgggKgogBAZwBYHsAOB9AlgOwGYpxwDKMUcALlhQDYCmAvAPwA0AUBx2gE7oLNEA6gAkYAJXhYAJsyA

Activity

  1. manticore-projects commented on Apr 9, 2024

    @manticore-projects
    Contributor

    Greetings!

    Two empty lines \n\n\n terminate a statement. There is no good reason for a statement to contain more than 1 empty line, but there are many good reasons to split statements at empty lines when you don't want to write semicolons.

    If you still insist on empty lines then just use something like String.replaceAll("\n\n+", "\n").

  2. pansong291 commented on Apr 10, 2024

    @pansong291
    Author

    @manticore-projects Hello, I don't think it's that simple. Consider the following SQL statement, it cannot simply replace empty lines:

    update shop_info set title=?,
    
    
    
    content='abc
    
    
    
    def'
    where id=?
  3. manticore-projects commented on Apr 18, 2024

    @manticore-projects
    Contributor

    With JSQLParser 4.10 Snapshot, you can use the method CCJSqlParserUtil.sanitizeSingleSql( sqlStr) to sanitize your statement. It will remove the redundant empty lines using a regular expression which honors StringLiteral.

        @Test
        void testSingleStatementWithEmptyLines() throws JSQLParserException {
            String sqlStr = "update shop_info set title=?,\n"
                            + "\n"
                            + "\n"
                            + "\n"
                            + "content='abc\n"
                            + "\n"
                            + "\n"
                            + "\n"
                            + "def'\n"
                            + "where id=?";
    
            Statement statement = CCJSqlParserUtil.parse( CCJSqlParserUtil.sanitizeSingleSql( sqlStr) );
            TestUtils.assertStatementCanBeDeparsedAs(statement, "update shop_info set title=?,\n"
                                                                + "content='abc\n"
                                                                + "\n"
                                                                + "\n"
                                                                + "\n"
                                                                + "def'\n"
                                                                + "where id=?", true);
        }
  4. changed the title [-][BUG] JSQLParser Version : 4.6 : Encountered unexpected token: "\n\n\n" <ST_SEMICOLON> at line 1, column 39.[/-] [+]Encountered unexpected token: "\n\n\n" <ST_SEMICOLON>[/+] on May 1, 2024
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Metadata

Metadata

Assignees

No one assigned

    Labels

    No labels
    No labels

    Type

    No type

    Projects

    No projects

      Milestone

      No milestone

      Relationships

      None yet

      Development

      No branches or pull requests

      Issue actions