Thanks, will give it a try Best, Aitozi.
Jark Wu <imj...@gmail.com> 于2023年3月6日周一 15:11写道: > Hi Aitozi, > > I would suggest trying to contribute it to the upstream project Calcite > first. > > Best, > Jark > > > 2023年3月6日 11:51,Aitozi <gjying1...@gmail.com> 写道: > > > > Hi Jark, > > > > Thank you for your helpful suggestion. It appears that 'E'foo\n'' is a > more > > versatile and widely accepted option. To assess its feasibility, I have > > reviewed the relevant Unicode supports and concluded that it may > > necessitate modifications to the Parser.jj file to accommodate this new > > syntax. > > > > > > I am unsure whether we should initially incorporate this alteration in > > Calcite or if we can directly supersede the StringLiteral behavior within > > the Flink project. Nevertheless, I believe supporting this change is > > achievable. > > > > > > > > Thanks, > > Aitozi. > > > > Jark Wu <imj...@gmail.com> 于2023年3月6日周一 10:16写道: > > > >> Hi Aitozi, > >> > >> I think this is a good idea to improve the backslash escape strings. > >> However, I lean a bit more toward the Postgres approach[1], > >> which is more standard-compliant. PG allows backslash escape > >> string by writing the letter E (upper or lower case) just before the > >> opening single quote, e.g., E'foo\n'. > >> > >> Recognizing backslash escapes in both regular and escape string > constants > >> is not backward compatible in Flink, and is also deprecated in PG. > >> > >> In addition, Flink also supports Unicode escape string constants by > >> writing the U& before the quote[1] which works in the same way with > >> backslash escape string. > >> > >> Best, > >> Jark > >> > >> [1]: > >> > >> > https://www.postgresql.org/docs/current/sql-syntax-lexical.html#SQL-SYNTAX-CONSTANTS > >> [2]: > >> > >> > https://nightlies.apache.org/flink/flink-docs-master/docs/dev/table/sql/queries/overview/ > >> > >> On Sat, 4 Mar 2023 at 23:31, Aitozi <gjying1...@gmail.com> wrote: > >> > >>> Hi, > >>> I encountered a problem when using string literal in Flink. Currently, > >>> Flink will escape the string literal during codegen, so for the query > >>> below: > >>> > >>> SELECT 'a\nb'; it will print => a\nb > >>> > >>> then for the query > >>> > >>> SELECT SPLIT_INDEX(col, '\n', 0); > >>> > >>> The col can not split by the newline. If we want to split by the > newline, > >>> we should use > >>> > >>> SELECT SPLIT_INDEX(col, ' > >>> ', 0) > >>> > >>> or > >>> > >>> SELECT SPLIT_INDEX(col, CHR(10), 0) > >>> > >>> The above way could be more intuitive. Some other databases support > these > >>> "Special Character Escape Sequences"[1]. > >>> > >>> In this way, we can directly use > >>> SELECT SPLIT_INDEX(col, '\n', 0); for the query. > >>> > >>> I know this is not standard behavior in ANSI SQL. I'm opening this > thread > >>> for some opinions from the community guys. > >>> > >>> [1]: > >>> > >>> > >> > https://dev.mysql.com/doc/refman/8.0/en/string-literals.html#character-escape-sequences > >>> > >>> Thanks, > >>> Aitozi > >>> > >> > >