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
> >>>
> >>
>
>

Reply via email to