vertical-blank / sql-formatter

SQL formatter written with only Java Standard Library, without dependencies.
MIT License
223 stars 46 forks source link

Escape character + escaped double quote makes formatted SQL invalid #61

Open jzillmann opened 1 year ago

jzillmann commented 1 year ago

In Postgres such a query is valid:

select A as "A\""B" from "T1";

The single result column will be named A\"B. The backslash escape isn't used as escape here, the first inner " will escape the following ". To demonstrate the logic a bit more a few examples:

Now the formatter chokes on this.

select A as "A\""B" from "T1";

will be formatted as

select A as "A\"" B " from " T1 ";

Which is not even executable anymore. Is there any configuration that could alleviate this problem ?

manticore-projects commented 1 year ago

Greetings.

With JSQLParser, your query parses just fine

SQL Text
 └─Statements: statement.select.PlainSelect
    ├─selectItems: statement.select.SelectItem
    │  ├─Column: a
    │  └─Alias:  AS "A\""B"
    └─Table: "T1"

@vertical-blank you may have a look at the Tokens 1) S_CHAR_LITERAL at https://github.com/manticore-projects/JSqlParser/blob/5e7732c870a66afff5b39214b2cfbb0409e12585/src/main/jjtree/net/sf/jsqlparser/parser/JSqlParserCC.jjt#L531

2) or S_QUOTED_IDENTIFIER at https://github.com/manticore-projects/JSqlParser/blob/5e7732c870a66afff5b39214b2cfbb0409e12585/src/main/jjtree/net/sf/jsqlparser/parser/JSqlParserCC.jjt#LL557C5-L557C24

for more complete Regular Expressions. It should be a copy'n paste option.

philos1234 commented 3 months ago

is there any update on this issue?